00001
00024
#ifndef kmfolderimap_h
00025
#define kmfolderimap_h
00026
00027
#include "kmacctimap.h"
00028
#include "kmfoldermbox.h"
00029
#include "kmmsgbase.h"
00030
#include "imapaccountbase.h"
00031
using KMail::ImapAccountBase;
00032
00033
#include "kio/job.h"
00034
#include "kio/global.h"
00035
00036
#include <qintdict.h>
00037
#include <qdict.h>
00038
#include <qvaluelist.h>
00039
00040
class KMFolderTreeItem;
00041
class KMFolderImap;
00042
namespace KMail {
00043
class FolderJob;
00044
class ImapJob;
00045
class AttachmentStrategy;
00046 }
00047
using KMail::FolderJob;
00048
using KMail::ImapJob;
00049
using KMail::AttachmentStrategy;
00050
00051
class KMMsgMetaData
00052 {
00053
public:
00054 KMMsgMetaData(KMMsgStatus aStatus)
00055 :mStatus(aStatus), mSerNum(0) {}
00056 KMMsgMetaData(KMMsgStatus aStatus, Q_UINT32 aSerNum)
00057 :mStatus(aStatus), mSerNum(aSerNum) {}
00058 ~KMMsgMetaData() {};
00059
const KMMsgStatus status()
const {
return mStatus; }
00060
const Q_UINT32 serNum()
const {
return mSerNum; }
00061
private:
00062 KMMsgStatus mStatus;
00063 Q_UINT32 mSerNum;
00064 };
00065
00066
00067
00068
class KMFolderImap :
public KMFolderMbox
00069 {
00070 Q_OBJECT
00071
friend class ImapJob;
00072
00073
public:
00074
enum imapState { imapNoInformation=0, imapInProgress=1, imapFinished=2 };
00075
00076
virtual imapState getContentState() {
return mContentState; }
00077
virtual void setContentState(imapState state) { mContentState = state; }
00078
00079
virtual imapState getSubfolderState() {
return mSubfolderState; }
00080
virtual void setSubfolderState(imapState state) { mSubfolderState = state; }
00081
00085 KMFolderImap(
KMFolderDir* parent=0,
const QString& name=QString::null);
00086
virtual ~KMFolderImap();
00087
00089
virtual KMFolderType folderType()
const {
return KMFolderTypeImap; }
00090
00091
virtual QCString protocol()
const {
return "imap"; }
00092
virtual KMMessage* getMsg(
int idx);
00094
void setImapPath(
const QString &path) { mImapPath = path; }
00095 QString imapPath() {
return mImapPath; }
00096
00098 ulong lastUid();
00099
00101
void setUidValidity(
const QString &validity) { mUidValidity = validity; }
00102 QString uidValidity() {
return mUidValidity; }
00103
00105
void setAccount(KMAcctImap *acct);
00106 KMAcctImap* account() {
return mAccount; }
00107
00109
virtual void removeMsg(
int i,
bool quiet = FALSE);
00110
virtual void removeMsg(QPtrList<KMMessage> msgList,
bool quiet = FALSE);
00111
00112
virtual int rename(
const QString& newName,
KMFolderDir *aParent = 0 );
00113
00115
virtual void removeOnServer();
00116
00118
bool autoExpunge();
00119
00121
virtual void writeConfig();
00122
00124
virtual void readConfig();
00125
00131
bool listDirectory(
bool secondStep = FALSE);
00132
00136
void getFolder(
bool force = FALSE);
00137
00141
void getAndCheckFolder(
bool force = FALSE);
00142
00146
void getMessage(
KMFolder * folder, KMMessage * msg);
00147
00151
void createFolder(
const QString &name);
00152
00156
void deleteMessage(KMMessage * msg);
00157
void deleteMessage(QPtrList<KMMessage> msgList);
00158
00163
virtual void setStatus(
int idx, KMMsgStatus status,
bool toggle);
00164
00168
virtual void setStatus(QValueList<int>& ids, KMMsgStatus status,
bool toggle);
00169
00171
void setImapStatus(QString path, QCString flags);
00172
00174 QStringList makeSets(QValueList<int>&,
bool sort =
true);
00175 QStringList makeSets(QStringList&,
bool sort =
true);
00176
00178
void getUids(QValueList<int>& ids, QValueList<int>& uids);
00179
00181
void getUids(QPtrList<KMMessage>& msgList, QValueList<int>& uids,
KMFolder* msgParent = 0);
00182
00186
void expungeFolder(KMFolderImap * aFolder,
bool quiet);
00187
00188
int compact() { expungeFolder(
this,
false);
return 0; };
00189
00193
void sendFolderComplete(
bool success)
00194 { emit folderComplete(
this, success); }
00195
00200
bool processNewMail(
bool interactive);
00201
00206
void setSelected(
bool selected) { mIsSelected = selected; }
00207
bool isSelected() {
return mIsSelected; }
00208
00212
static QString encodeFileName(
const QString &);
00213
static QString decodeFileName(
const QString &);
00214
static QTextCodec * utf7Codec();
00215
00219
static QString statusToFlags(KMMsgStatus status);
00220
00224
virtual QString fileName()
const {
return encodeFileName(name()); }
00225
00229
void insertUidSerNumEntry(ulong uid,
const ulong * sernum) {
00230 uidmap.insert(uid, sernum); }
00231
00235
static QValueList<int> splitSets(QString);
00236
00237
virtual void ignoreJobsForMessage( KMMessage* );
00238
00242
bool includeInMailCheck() {
return mCheckMail; }
00243
void setIncludeInMailCheck(
bool check ) { mCheckMail = check; }
00244
00246
virtual int create(
bool imap = FALSE);
00247
00249
virtual bool isAutoExpire()
const {
return false; }
00250
00254
virtual void close(
bool force=FALSE);
00255
00256
void setCheckingValidity(
bool val ) { mCheckingValidity = val; }
00257
00258 signals:
00259
void folderComplete(KMFolderImap *folder,
bool success);
00260
00264
void deleted(KMFolderImap*);
00265
00266
public slots:
00268
virtual void addMsgQuiet(KMMessage *);
00269
virtual void addMsgQuiet(QPtrList<KMMessage>);
00270
00277
virtual int addMsg(KMMessage* msg,
int* index_return = 0);
00278
int addMsg(QPtrList<KMMessage>&,
int* index_return = 0);
00279
00281
void copyMsg(QPtrList<KMMessage>& msgList);
00282
00283 QPtrList<KMMessage> splitMessageList(QString set, QPtrList<KMMessage>& msgList);
00284
00287
virtual KMMessage* take(
int idx);
00288
virtual void take(QPtrList<KMMessage>);
00289
00293
void slotSimpleData(KIO::Job * job,
const QByteArray & data);
00294
00295
protected:
00296
virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt,
00297
KMFolder *folder, QString partSpecifier,
00298
const AttachmentStrategy *as )
const;
00299
virtual FolderJob* doCreateJob( QPtrList<KMMessage>& msgList,
const QString& sets,
00300 FolderJob::JobType jt,
KMFolder *folder )
const;
00305
void flagsToStatus(KMMsgBase *msg,
int flags,
bool newMsg = TRUE);
00306
00307
void getMessagesResult(KIO::Job * job,
bool lastSet);
00308
00309
bool gotMsgs;
00310
00311 QString mUidValidity;
00312
00313
protected slots:
00314
00319
void slotListResult(QStringList, QStringList,
00320 QStringList,
const ImapAccountBase::jobData &);
00321
00325
void checkValidity();
00326
void slotCheckValidityResult(KIO::Job * job);
00327
00331
void reallyGetFolder(
const QString &startUid = QString::null);
00332
00336
void slotListFolderResult(KIO::Job * job);
00337
void slotListFolderEntries(KIO::Job * job,
const KIO::UDSEntryList & uds);
00338
00342
void slotRenameResult( KIO::Job *job );
00343
00347
void slotGetMessagesResult(KIO::Job * job);
00348
void slotGetLastMessagesResult(KIO::Job * job);
00349
void slotGetMessagesData(KIO::Job * job,
const QByteArray & data);
00350
00354
void slotCreateFolderResult(KIO::Job * job);
00355
00359
void slotSetStatusResult(KIO::Job * job);
00360
00364
void slotRemoveFolderResult(KIO::Job *job);
00365
00369
void slotStatResult(KIO::Job *job);
00370
00371
protected:
00372 QString mImapPath;
00373 ulong mLastUid;
00374 imapState mContentState, mSubfolderState;
00375 QStringList mSubfolderNames, mSubfolderPaths, mSubfolderMimeTypes;
00376
bool mIsSelected;
00377
bool mCheckFlags;
00378
bool mReadOnly;
00379
bool mCheckMail : 1;
00380 QGuardedPtr<KMAcctImap> mAccount;
00381 QIntDict<ulong> uidmap;
00382
private:
00383
bool mCheckingValidity;
00384 QDict<KMMsgMetaData> mMetaDataMap;
00385 };
00386
00387
#endif // kmfolderimap_h