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
#include <kstandarddirs.h>
00040
00041
class KMFolderTreeItem;
00042
class KMFolderImap;
00043
namespace KMail {
00044
class FolderJob;
00045
class ImapJob;
00046
class AttachmentStrategy;
00047
class ProgressItem;
00048 }
00049
using KMail::FolderJob;
00050
using KMail::ImapJob;
00051
using KMail::AttachmentStrategy;
00052
using KPIM::ProgressItem;
00053
00054
class KMMsgMetaData
00055 {
00056
public:
00057 KMMsgMetaData(KMMsgStatus aStatus)
00058 :mStatus(aStatus), mSerNum(0) {}
00059 KMMsgMetaData(KMMsgStatus aStatus, Q_UINT32 aSerNum)
00060 :mStatus(aStatus), mSerNum(aSerNum) {}
00061 ~KMMsgMetaData() {};
00062
const KMMsgStatus status()
const {
return mStatus; }
00063
const Q_UINT32 serNum()
const {
return mSerNum; }
00064
private:
00065 KMMsgStatus mStatus;
00066 Q_UINT32 mSerNum;
00067 };
00068
00069
00070
00071
class KMFolderImap :
public KMFolderMbox
00072 {
00073 Q_OBJECT
00074
friend class ImapJob;
00075
public:
00076
00077
static QString cacheLocation() {
00078
return locateLocal(
"data",
"kmail/imap" );
00079 }
00080
00081
enum imapState { imapNoInformation=0, imapInProgress=1, imapFinished=2 };
00082
00083
virtual imapState getContentState() {
return mContentState; }
00084
virtual void setContentState(imapState state) { mContentState = state; }
00085
00086
virtual imapState getSubfolderState() {
return mSubfolderState; }
00087
virtual void setSubfolderState(imapState state);
00088
00092 KMFolderImap(
KMFolder* folder,
const char* name=0);
00093
virtual ~KMFolderImap();
00094
00096
virtual KMFolderType folderType()
const {
return KMFolderTypeImap; }
00097
00098
virtual KMMessage* getMsg(
int idx);
00100
void setImapPath(
const QString &path) { mImapPath = path; }
00101
QString imapPath() {
return mImapPath; }
00102
00104 ulong lastUid();
00105
00107
void setUidValidity(
const QString &validity) { mUidValidity = validity; }
00108
QString uidValidity() {
return mUidValidity; }
00109
00111
void setAccount(KMAcctImap *acct);
00112 KMAcctImap* account()
const {
return mAccount; }
00113
00115
virtual void removeMsg(
int i,
bool quiet = FALSE);
00116
virtual void removeMsg(
const QPtrList<KMMessage>& msgList,
bool quiet = FALSE);
00117
00118
virtual int rename(
const QString& newName,
KMFolderDir *aParent = 0 );
00119
00121
virtual void remove();
00122
00124
bool autoExpunge();
00125
00127
virtual void writeConfig();
00128
00130
virtual void readConfig();
00131
00137
virtual bool listDirectory(
bool secondStep =
false);
00138
00142
void getFolder(
bool force = FALSE);
00143
00147
void getAndCheckFolder(
bool force = FALSE);
00148
00152
void getMessage(
KMFolder * folder, KMMessage * msg);
00153
00157
void createFolder(
const QString &name);
00158
00162
void deleteMessage(KMMessage * msg);
00163
void deleteMessage(
const QPtrList<KMMessage>& msgList);
00164
00169
virtual void setStatus(
int idx, KMMsgStatus status,
bool toggle);
00170
00174
virtual void setStatus(
QValueList<int>& ids, KMMsgStatus status,
bool toggle);
00175
00177
static QStringList makeSets(
QValueList<ulong>&,
bool sort =
true);
00178
static QStringList makeSets(
const QStringList&,
bool sort =
true);
00179
00181
static QPtrList<KMMessage> splitMessageList(
const QString& set,
00182
QPtrList<KMMessage>& msgList);
00183
00185
void getUids(
QValueList<int>& ids,
QValueList<ulong>& uids);
00186
00188
void getUids(
const QPtrList<KMMessage>& msgList,
QValueList<ulong>& uids,
KMFolder* msgParent = 0);
00189
00193
void expungeFolder(KMFolderImap * aFolder,
bool quiet);
00194
00195
virtual int compact(
bool ) { expungeFolder(
this,
false);
return 0; };
00196
00200
void sendFolderComplete(
bool success)
00201 { emit folderComplete(
this, success); }
00202
00207
bool processNewMail(
bool interactive);
00208
00213
void setSelected(
bool selected) { mIsSelected = selected; }
00214
bool isSelected() {
return mIsSelected; }
00215
00219
static QString encodeFileName(
const QString &);
00220
static QString decodeFileName(
const QString &);
00221
static QTextCodec * utf7Codec();
00222
00226
static QString statusToFlags(KMMsgStatus status);
00227
00231
virtual QString fileName()
const {
00232
return encodeFileName( KMFolderMbox::fileName() ); }
00233
00237
void insertUidSerNumEntry(ulong uid,
const ulong * sernum) {
00238 uidmap.insert(uid, sernum); }
00239
00243
static QValueList<ulong> splitSets(
const QString);
00244
00245
virtual void ignoreJobsForMessage( KMMessage* );
00246
00250
bool includeInMailCheck() {
return mCheckMail; }
00251
void setIncludeInMailCheck(
bool check );
00252
00254
virtual int create(
bool imap = FALSE);
00255
00257
virtual bool isAutoExpire()
const {
return false; }
00258
00262
virtual void close(
bool force=FALSE);
00263
00264
void setCheckingValidity(
bool val ) { mCheckingValidity = val; }
00265
00267
KMFolder* trashFolder() const;
00268
00274
void setAlreadyRemoved(
bool removed);
00275
00277
bool isReadOnly()
const {
return KMFolderMbox::isReadOnly() || mReadOnly; }
00278
00283
unsigned int userRights()
const {
return mUserRights; }
00284
00286
void setUserRights(
unsigned int userRights );
00287
00288 signals:
00289
void folderComplete(KMFolderImap *folder,
bool success);
00290
00294
void deleted(KMFolderImap*);
00295
00299
void directoryListingFinished(KMFolderImap*);
00300
00301
public slots:
00303
virtual void addMsgQuiet(KMMessage *);
00304
virtual void addMsgQuiet(
QPtrList<KMMessage>);
00305
00312
virtual int addMsg(KMMessage* msg,
int* index_return = 0);
00313
int addMsg(
QPtrList<KMMessage>&,
int* index_return = 0);
00314
00316
void copyMsg(
QPtrList<KMMessage>& msgList);
00317
00318
00321
virtual KMMessage* take(
int idx);
00322
virtual void take(
QPtrList<KMMessage>);
00323
00327
void slotSimpleData(KIO::Job * job,
const QByteArray & data);
00328
00333
static void flagsToStatus(KMMsgBase *msg,
int flags,
bool newMsg = TRUE);
00334
00335
protected:
00336
virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt,
00337
KMFolder *folder,
QString partSpecifier,
00338
const AttachmentStrategy *as )
const;
00339
virtual FolderJob* doCreateJob(
QPtrList<KMMessage>& msgList,
const QString& sets,
00340 FolderJob::JobType jt,
KMFolder *folder )
const;
00341
00342
void getMessagesResult(KIO::Job * job,
bool lastSet);
00343
00347
virtual int expungeContents();
00348
00349
protected slots:
00350
00355
void slotListResult(
const QStringList&,
const QStringList&,
00356
const QStringList&,
const QStringList&,
const ImapAccountBase::jobData& );
00357
00361
void checkValidity();
00362
void slotCheckValidityResult(KIO::Job * job);
00363
00367
void reallyGetFolder(
const QString &startUid = QString::null);
00368
00372
void slotListFolderResult(KIO::Job * job);
00373
void slotListFolderEntries(KIO::Job * job,
const KIO::UDSEntryList & uds);
00374
00378
void slotRenameResult( KIO::Job *job );
00379
00383
void slotGetMessagesResult(KIO::Job * job);
00384
void slotGetLastMessagesResult(KIO::Job * job);
00385
void slotGetMessagesData(KIO::Job * job,
const QByteArray & data);
00386
00390
void slotCreateFolderResult(KIO::Job * job);
00391
00395
void slotRemoveFolderResult(KIO::Job *job);
00396
00400
void slotStatResult(KIO::Job *job);
00401
00406
void slotCompleteMailCheckProgress();
00407
00411
void slotProcessNewMail(
int errorCode,
const QString& errorMsg );
00412
00418
void slotCreatePendingFolders();
00419
00420
protected:
00421
QString mImapPath;
00422 ulong mLastUid;
00423 imapState mContentState, mSubfolderState;
00424
bool mIsSelected;
00425
bool mCheckFlags;
00426
bool mReadOnly;
00427
bool mCheckMail;
00428
QGuardedPtr<KMAcctImap> mAccount;
00429
QIntDict<ulong> uidmap;
00430
QString mUidValidity;
00431
unsigned int mUserRights;
00432
00433
private:
00434
bool mCheckingValidity;
00435
QDict<KMMsgMetaData> mMetaDataMap;
00436
bool mAlreadyRemoved;
00437
QGuardedPtr<ProgressItem> mMailCheckProgressItem;
00438 ProgressItem *mListDirProgressItem;
00439
QStringList mFoldersPendingCreation;
00440 };
00441
00442
#endif // kmfolderimap_h