00001
00024
#ifndef __KMAIL_IMAPACCOUNTBASE_H__
00025
#define __KMAIL_IMAPACCOUNTBASE_H__
00026
00027
#include "networkaccount.h"
00028
00029
#include <qtimer.h>
00030
#include <kio/global.h>
00031
00032
class KMAcctMgr;
00033
class KMFolder;
00034
class KConfig;
00035
class KMessage;
00036
class KMMessagePart;
00037
class DwBodyPart;
00038
class DwMessage;
00039
00040
namespace KIO {
00041
class Job;
00042 }
00043
00044
namespace KMail {
00045
00046
class AttachmentStrategy;
00047
00048
class ImapAccountBase :
public KMail::NetworkAccount {
00049 Q_OBJECT
00050
protected:
00051 ImapAccountBase( KMAcctMgr * parent,
const QString & name );
00052
public:
00053
virtual ~ImapAccountBase();
00054
00056
virtual void init();
00057
00059
virtual void pseudoAssign(
const KMAccount * a );
00060
00061
00063 QString prefix()
const {
return mPrefix; }
00064
virtual void setPrefix(
const QString & prefix );
00065
00068
bool autoExpunge()
const {
return mAutoExpunge; }
00069
virtual void setAutoExpunge(
bool expunge );
00070
00072
bool hiddenFolders()
const {
return mHiddenFolders; }
00073
virtual void setHiddenFolders(
bool show );
00074
00076
bool onlySubscribedFolders()
const {
return mOnlySubscribedFolders; }
00077
virtual void setOnlySubscribedFolders(
bool show );
00078
00080
bool loadOnDemand()
const {
return mLoadOnDemand; }
00081
virtual void setLoadOnDemand(
bool load );
00082
00084
virtual KIO::MetaData slaveConfig() const;
00085
00086 virtual
void readConfig( KConfig & config );
00087 virtual
void writeConfig( KConfig & config ) ;
00088
00089 enum ConnectionState { Error = 0, Connected, Connecting };
00096 ConnectionState makeConnection();
00097
00101 struct jobData
00102 {
00103
00104
jobData() : url(QString::null), parent(0), total(1), done(0), offset(0), inboxOnly(
false), quiet(
false) {}
00105
00106
jobData(
const QString& _url,
KMFolder *_parent = 0,
00107
int _total = 1,
int _done = 0,
bool _quiet =
false,
bool _inboxOnly =
false )
00108 : url(_url), parent(_parent), total(_total), done(_done), offset(0),
00109 inboxOnly(_inboxOnly), quiet(_quiet)
00110 {}
00111
00112 QString htmlURL()
const;
00113
00114 QString path;
00115 QString url;
00116 QByteArray data;
00117 QCString cdata;
00118 QStringList items;
00119
KMFolder *parent;
00120 QPtrList<KMMessage> msgList;
00121
int total, done, offset;
00122
bool inboxOnly, quiet, onlySubscribed;
00123 };
00124
00125
typedef QMap<KIO::Job *, jobData>::Iterator JobIterator;
00129
void insertJob( KIO::Job* job,
const jobData& data ) {
00130 mapJobData.insert( job, data );
00131 displayProgress();
00132 }
00136 JobIterator findJob( KIO::Job* job ) {
return mapJobData.find( job ); }
00137 JobIterator jobsEnd() {
return mapJobData.end(); }
00142
void removeJob( JobIterator& it ) {
00143 mapJobData.remove( it );
00144 displayProgress();
00145 }
00146
00147
void removeJob( KIO::Job* job ) {
00148 mapJobData.remove( job );
00149 displayProgress();
00150 }
00151
00158
void listDirectory(QString path,
bool onlySubscribed,
00159
bool secondStep = FALSE,
KMFolder* parent = NULL,
bool reset =
false);
00160
00164
virtual void listDirectory() = 0;
00165
00170
void changeSubscription(
bool subscribe, QString imapPath);
00171
00175
void slaveDied() { mSlave = 0; killAllJobs(); }
00176
00180
void killAllJobs(
bool disconnectSlave=
false ) = 0;
00181
00185
void processNewMailSingleFolder(
KMFolder* folder);
00186
00190
bool createInbox() {
return mCreateInbox; }
00191
void setCreateInbox(
bool create ) { mCreateInbox = create; }
00192
00196
void handleBodyStructure( QDataStream & stream, KMMessage * msg,
00197
const AttachmentStrategy *as );
00198
00199
public slots:
00204
void slotListEntries(KIO::Job * job,
const KIO::UDSEntryList & uds);
00205
00210
void slotListResult(KIO::Job * job);
00211
00216
void slotSubscriptionResult(KIO::Job * job);
00217
00221
virtual void displayProgress();
00222
00226
void slotSlaveError(KIO::Slave *aSlave,
int,
const QString &errorMsg);
00227
00228
protected slots:
00233
virtual void postProcessNewMail(
KMFolder * );
00234
void slotCheckQueuedFolders();
00235
00236
void slotSchedulerSlaveConnected(KIO::Slave *aSlave);
00237
void slotSchedulerSlaveError(KIO::Slave *aSlave,
int,
const QString &errorMsg);
00238
00239
protected:
00240
virtual QString protocol() const;
00241 virtual
unsigned short int defaultPort() const;
00242
00243 virtual
void setPrefixHook() = 0;
00244
00248
void constructParts( QDataStream & stream,
int count, KMMessagePart* parentKMPart,
00249 DwBodyPart * parent, const DwMessage * dwmsg );
00250
00251 protected:
00252 QPtrList<QGuardedPtr<
KMFolder> > mOpenFolders;
00253 QStringList mSubfolderNames, mSubfolderPaths,
00254 mSubfolderMimeTypes;
00255 QMap<KIO::Job *, jobData> mapJobData;
00256 QTimer mIdleTimer;
00257 QString mPrefix;
00258
int mTotal, mCountUnread, mCountLastUnread, mCountRemainChecks;
00259
bool mAutoExpunge : 1;
00260
bool mHiddenFolders : 1;
00261
bool mOnlySubscribedFolders : 1;
00262
bool mLoadOnDemand : 1;
00263
bool mProgressEnabled : 1;
00264
00265
bool mIdle : 1;
00266
bool mErrorDialogIsActive : 1;
00267
bool mPasswordDialogIsActive : 1;
00268
00269 QValueList<QGuardedPtr<
KMFolder> > mMailCheckFolders;
00270
00271 QValueList<QGuardedPtr<
KMFolder> > mFoldersQueuedForChecking;
00272
bool mCreateInbox;
00273
00274 QPtrList<KMMessagePart> mBodyPartList;
00275
00276 KMMessage* mCurrentMsg;
00277
00278 signals:
00284
void connectionResult(
int errorCode );
00285
00289
void receivedFolders(QStringList, QStringList,
00290 QStringList, const ImapAccountBase::jobData &);
00291
00295
void subscriptionChanged(QString imapPath,
bool subscribed);
00296
00297 };
00298
00299
00300 }
00301
00302 #endif