00001
00024
#ifndef __KMAIL_IMAPACCOUNTBASE_H__
00025
#define __KMAIL_IMAPACCOUNTBASE_H__
00026
00027
#include "networkaccount.h"
00028
00029
#include <qtimer.h>
00030
#include <qguardedptr.h>
00031
#include <kio/global.h>
00032
00033
class KMAcctMgr;
00034
class KMFolder;
00035
class KConfig;
00036
class KMessage;
00037
class KMMessagePart;
00038
class DwBodyPart;
00039
class DwMessage;
00040
class FolderStorage;
00041
template <
typename T>
class QValueVector;
00042
00043
namespace KIO {
00044
class Job;
00045 }
00046
00047
namespace KPIM {
00048
class ProgressItem;
00049 }
00050
00051
namespace KMail {
00052
00053
using KPIM::ProgressItem;
00054
struct ACLListEntry;
00055
typedef QValueVector<KMail::ACLListEntry> ACLList;
00056
00057
class AttachmentStrategy;
00058
00059
class ImapAccountBase :
public KMail::NetworkAccount {
00060 Q_OBJECT
00061
protected:
00062 ImapAccountBase( KMAcctMgr * parent,
const QString & name, uint
id );
00063
public:
00064
virtual ~ImapAccountBase();
00065
00067
virtual void init();
00068
00070
virtual void pseudoAssign(
const KMAccount * a );
00071
00073
QString prefix()
const {
return mPrefix; }
00074
virtual void setPrefix(
const QString & prefix );
00075
00078
bool autoExpunge()
const {
return mAutoExpunge; }
00079
virtual void setAutoExpunge(
bool expunge );
00080
00082
bool hiddenFolders()
const {
return mHiddenFolders; }
00083
virtual void setHiddenFolders(
bool show );
00084
00086
bool onlySubscribedFolders()
const {
return mOnlySubscribedFolders; }
00087
virtual void setOnlySubscribedFolders(
bool show );
00088
00090
bool loadOnDemand()
const {
return mLoadOnDemand; }
00091
virtual void setLoadOnDemand(
bool load );
00092
00094
bool listOnlyOpenFolders()
const {
return mListOnlyOpenFolders; }
00095
virtual void setListOnlyOpenFolders(
bool only );
00096
00098
virtual KIO::MetaData slaveConfig() const;
00099
00100 virtual
void readConfig( KConfig& config );
00101 virtual
void writeConfig( KConfig& config );
00102
00103 enum ConnectionState { Error = 0, Connected, Connecting };
00104
enum ListType { List, ListSubscribed, ListSubscribedNoCheck };
00111 ConnectionState makeConnection();
00112
00116 struct jobData
00117 {
00118
00119
jobData() : url(QString::null), parent(0), total(1), done(0), offset(0), progressItem(0),
00120 inboxOnly(
false), quiet(
false), cancellable(
false), createInbox(
false) {}
00121
00122
jobData(
const QString& _url,
KMFolder *_parent = 0,
00123
int _total = 1,
int _done = 0,
bool _quiet =
false,
00124
bool _inboxOnly =
false,
bool _cancelable =
false,
bool _createInbox =
false )
00125 : url(_url), parent(_parent), total(_total), done(_done), offset(0),
00126 progressItem(0), inboxOnly(_inboxOnly), quiet(_quiet), cancellable(_cancelable),
00127 createInbox(_createInbox) {}
00128
00129
00130
QString htmlURL()
const;
00131
00132
QString path;
00133
QString url;
00134
QByteArray data;
00135
QCString cdata;
00136
QStringList items;
00137
KMFolder *parent;
00138
QPtrList<KMMessage> msgList;
00139
int total, done, offset;
00140 ProgressItem *progressItem;
00141
bool inboxOnly, onlySubscribed, quiet,
00142 cancellable, createInbox;
00143 };
00144
00145
typedef QMap<KIO::Job *, jobData>::Iterator JobIterator;
00149
void insertJob( KIO::Job* job,
const jobData& data ) {
00150 mapJobData.insert( job, data );
00151 }
00155 JobIterator findJob( KIO::Job* job ) {
return mapJobData.find( job ); }
00156 JobIterator jobsEnd() {
return mapJobData.end(); }
00161
void removeJob( JobIterator& it );
00162
00163
00164
void removeJob( KIO::Job* job ) {
00165 mapJobData.remove( job );
00166 }
00167
00173
void changeSubscription(
bool subscribe,
QString imapPath);
00174
00180
void getUserRights(
KMFolder* folder,
const QString& imapPath );
00181
00187
void getACL(
KMFolder* folder,
const QString& imapPath );
00188
00193
void setImapStatus(
KMFolder* folder,
const QString& path,
const QCString& flags );
00194
00198
void slaveDied() { mSlave = 0; killAllJobs(); }
00199
00203
void killAllJobs(
bool disconnectSlave=
false ) = 0;
00204
00208
virtual void cancelMailCheck();
00209
00213
void processNewMailSingleFolder(
KMFolder* folder);
00214
00218
void postProcessNewMail();
00219
00224
bool checkingMail(
KMFolder *folder );
00225
00226
bool checkingMail() {
return NetworkAccount::checkingMail(); }
00227
00231
void handleBodyStructure(
QDataStream & stream, KMMessage * msg,
00232
const AttachmentStrategy *as );
00233
00237
virtual void setFolder(
KMFolder*,
bool addAccount =
false);
00238
00243
bool hasACLSupport()
const {
return mACLSupport; }
00244
00249
bool handleJobError( KIO::Job* job,
const QString& context,
bool abortSync =
false );
00250
00254
virtual FolderStorage*
const rootFolder() const = 0;
00255
00259 ProgressItem* listDirProgressItem();
00260
00265 virtual
unsigned int folderCount() const;
00266
00267 private slots:
00272
void slotSubscriptionResult(KIO::Job * job);
00273
00274 protected slots:
00275 virtual
void slotCheckQueuedFolders();
00276
00278
void slotSchedulerSlaveConnected(KIO::Slave *aSlave);
00280
void slotSchedulerSlaveError(KIO::Slave *aSlave,
int, const
QString &errorMsg);
00281
00285
void slotSetStatusResult(KIO::Job * job);
00286
00288
void slotGetUserRightsResult( KIO::Job* _job );
00289
00291
void slotGetACLResult( KIO::Job* _job );
00292
00296
void slotNoopTimeout();
00300
void slotIdleTimeout();
00301
00305
void slotAbortRequested( ProgressItem* );
00306
00310
void slotSimpleResult(KIO::Job * job);
00311
00312 protected:
00313
00330 virtual
bool handleError(
int error, const
QString &errorMsg, KIO::Job* job, const
QString& context,
bool abortSync = false );
00331
00333
bool handlePutError( KIO::Job* job, jobData& jd,
KMFolder* folder );
00334
00335 virtual
QString protocol() const;
00336 virtual
unsigned short int defaultPort() const;
00337
00338 virtual
void setPrefixHook() = 0;
00339
00343
void constructParts(
QDataStream & stream,
int count, KMMessagePart* parentKMPart,
00344 DwBodyPart * parent, const DwMessage * dwmsg );
00345
00346 protected:
00347
QPtrList<
QGuardedPtr<
KMFolder> > mOpenFolders;
00348
QStringList mSubfolderNames, mSubfolderPaths,
00349 mSubfolderMimeTypes, mSubfolderAttributes;
00350
QMap<KIO::Job *, jobData> mapJobData;
00352
QTimer mIdleTimer;
00354
QTimer mNoopTimer;
00355
QString mPrefix;
00356
int mTotal, mCountUnread, mCountLastUnread;
00357
QMap<
QString,
int> mUnreadBeforeCheck;
00358
bool mAutoExpunge : 1;
00359
bool mHiddenFolders : 1;
00360
bool mOnlySubscribedFolders : 1;
00361
bool mLoadOnDemand : 1;
00362
bool mListOnlyOpenFolders : 1;
00363
bool mProgressEnabled : 1;
00364
00365
bool mErrorDialogIsActive : 1;
00366
bool mPasswordDialogIsActive : 1;
00367
bool mACLSupport : 1;
00368
bool mSlaveConnected : 1;
00369
00370
00371
QValueList<
QGuardedPtr<
KMFolder> > mMailCheckFolders;
00372
00373
QValueList<
QGuardedPtr<
KMFolder> > mFoldersQueuedForChecking;
00374
00375
QPtrList<KMMessagePart> mBodyPartList;
00376
00377 KMMessage* mCurrentMsg;
00378
00379
QGuardedPtr<ProgressItem> mListDirProgressItem;
00380
00381 signals:
00388
void connectionResult(
int errorCode, const QString& errorMsg );
00389
00394
void subscriptionChanged(const QString& imapPath,
bool subscribed);
00395
00401
void imapStatusChanged(
KMFolder*, const QString& imapPath,
bool cont );
00402
00408
void receivedUserRights( KMFolder* folder );
00409
00417
void receivedACL( KMFolder* folder, KIO::Job* job, const KMail::
ACLList& entries );
00418 };
00419
00420
00421 }
00422
00423 #endif