00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef kmfolderimap_h
00025 #define kmfolderimap_h
00026
00027 #include "acljobs.h"
00028 #include "kmacctimap.h"
00029 #include "kmfoldermbox.h"
00030 #include "kmmsgbase.h"
00031
00032 #include "tdeio/job.h"
00033 #include "tdeio/global.h"
00034
00035 #include <kstandarddirs.h>
00036
00037 #include <tqintdict.h>
00038 #include <tqdict.h>
00039 template< typename T> class TQPtrList;
00040 template< typename T> class TQValueList;
00041
00042 class KMFolderTreeItem;
00043 class KMFolderImap;
00044 class KMSearchPattern;
00045 class KMMessage;
00046 namespace KMail {
00047 class FolderJob;
00048 class ImapJob;
00049 class AttachmentStrategy;
00050 class ImapAccountBase;
00051 }
00052 namespace KPIM {
00053 class ProgressItem;
00054 }
00055 using KMail::FolderJob;
00056 using KMail::ImapJob;
00057 using KMail::AttachmentStrategy;
00058 using KMail::ImapAccountBase;
00059 using KPIM::ProgressItem;
00060
00061 class KMMsgMetaData
00062 {
00063 public:
00064 KMMsgMetaData(KMMsgStatus aStatus)
00065 :mStatus(aStatus), mSerNum(0) {}
00066 KMMsgMetaData(KMMsgStatus aStatus, TQ_UINT32 aSerNum)
00067 :mStatus(aStatus), mSerNum(aSerNum) {}
00068 ~KMMsgMetaData() {};
00069 KMMsgStatus status() const { return mStatus; }
00070 TQ_UINT32 serNum() const { return mSerNum; }
00071 private:
00072 KMMsgStatus mStatus;
00073 TQ_UINT32 mSerNum;
00074 };
00075
00076
00077
00078 class KMFolderImap : public KMFolderMbox
00079 {
00080 Q_OBJECT
00081
00082 friend class ::KMail::ImapJob;
00083 public:
00084
00085 static TQString cacheLocation() {
00086 return locateLocal("data", "kmail/imap" );
00087 }
00088
00089 enum imapState {
00090 imapNoInformation = 0,
00091 imapListingInProgress = 1,
00092 imapDownloadInProgress = 2,
00093 imapFinished = 3
00094 };
00095
00096 virtual imapState getContentState() const { return mContentState; }
00097 virtual void setContentState(imapState state) { mContentState = state; }
00098
00099 virtual imapState getSubfolderState() { return mSubfolderState; }
00100 virtual void setSubfolderState(imapState state);
00101
00105 KMFolderImap(KMFolder* folder, const char* name=0);
00106 virtual ~KMFolderImap();
00107
00109 virtual KMFolderType folderType() const { return KMFolderTypeImap; }
00110
00111 virtual KMMessage* getMsg(int idx);
00113 void setImapPath( const TQString &path );
00114 TQString imapPath() const { return mImapPath; }
00115
00117 ulong lastUid();
00118
00120 void setUidValidity(const TQString &validity) { mUidValidity = validity; }
00121 TQString uidValidity() { return mUidValidity; }
00122
00124 void setAccount(KMAcctImap *acct);
00125 KMAcctImap* account() const;
00126
00128 virtual void removeMsg(int i, bool quiet = FALSE);
00129 virtual void removeMsg(const TQPtrList<KMMessage>& msgList, bool quiet = FALSE);
00130
00131 virtual int rename( const TQString& newName, KMFolderDir *aParent = 0 );
00132
00134 virtual void remove();
00135
00137 bool autoExpunge();
00138
00140 virtual void writeConfig();
00141
00143 virtual void readConfig();
00144
00150 virtual bool listDirectory();
00151
00155 void getFolder(bool force = FALSE);
00156
00160 void getAndCheckFolder(bool force = FALSE);
00161
00165 void getMessage(KMFolder * folder, KMMessage * msg);
00166
00174 void createFolder(const TQString &name,
00175 const TQString& imapPath = TQString(), bool askUser = true);
00176
00180 void deleteMessage(KMMessage * msg);
00181 void deleteMessage(const TQPtrList<KMMessage>& msgList);
00182
00187 virtual void setStatus(int idx, KMMsgStatus status, bool toggle);
00188
00192 virtual void setStatus(TQValueList<int>& _ids, KMMsgStatus status, bool toggle);
00193
00195 static TQStringList makeSets( TQValueList<ulong>&, bool sort = true);
00196 static TQStringList makeSets(const TQStringList&, bool sort = true);
00197
00199 static TQPtrList<KMMessage> splitMessageList(const TQString& set,
00200 TQPtrList<KMMessage>& msgList);
00201
00203 void getUids(TQValueList<int>& ids, TQValueList<ulong>& uids);
00204
00206 void getUids(const TQPtrList<KMMessage>& msgList, TQValueList<ulong>& uids);
00207
00211 void expungeFolder(KMFolderImap * aFolder, bool quiet);
00212
00213 virtual int compact( bool ) { expungeFolder(this, false); return 0; };
00214
00218 void sendFolderComplete(bool success)
00219 { emit folderComplete(this, success); }
00220
00225 bool processNewMail(bool interactive);
00226
00231 void setSelected(bool selected) { mIsSelected = selected; }
00232 bool isSelected() { return mIsSelected; }
00233
00237 static TQString encodeFileName(const TQString &);
00238 static TQString decodeFileName(const TQString &);
00239 static TQTextCodec * utf7Codec();
00240
00244 static TQString statusToFlags(KMMsgStatus status, int supportedFalgs);
00245
00249 virtual TQString fileName() const {
00250 return encodeFileName( KMFolderMbox::fileName() ); }
00251
00255 ulong serNumForUID( ulong uid );
00256
00261 void saveMsgMetaData( KMMessage* msg, ulong uid = 0 );
00262
00266 static TQValueList<ulong> splitSets(const TQString);
00267
00268 virtual void ignoreJobsForMessage( KMMessage* );
00269
00273 bool includeInMailCheck() { return mCheckMail; }
00274 void setIncludeInMailCheck( bool check );
00275
00277 virtual int create();
00278
00280 virtual bool isAutoExpire() const { return false; }
00281
00283 virtual void reallyDoClose(const char* owner);
00284
00285 void setCheckingValidity( bool val ) { mCheckingValidity = val; }
00286
00288 KMFolder* trashFolder() const;
00289
00295 void setAlreadyRemoved(bool removed);
00296
00298 bool isReadOnly() const { return KMFolderMbox::isReadOnly() || mReadOnly; }
00299 bool canDeleteMessages() const;
00300
00306 unsigned int userRights() const { return mUserRights; }
00307 KMail::ACLJobs::ACLFetchState userRightsState() const { return mUserRightsState; }
00308
00310 void setUserRights( unsigned int userRights, KMail::ACLJobs::ACLFetchState userRightsState );
00311
00317 virtual void search( const KMSearchPattern* );
00318 virtual void search( const KMSearchPattern*, TQ_UINT32 serNum );
00319
00321 virtual bool isMoveable() const;
00322
00324 void initializeFrom( KMFolderImap* parent, TQString path, TQString mimeType );
00325
00327 int permanentFlags() const { return mPermanentFlags; }
00328
00329 virtual bool mailCheckInProgress() const;
00330
00331 signals:
00332 void folderComplete(KMFolderImap *folder, bool success);
00333
00337 void deleted(KMFolderImap*);
00338
00342 void directoryListingFinished(KMFolderImap*);
00343
00349 void folderCreationResult( const TQString &name, bool success );
00350
00351 public slots:
00353 virtual void addMsgQuiet(KMMessage *);
00354 virtual void addMsgQuiet(TQPtrList<KMMessage>);
00355
00362 virtual int addMsg(KMMessage* msg, int* index_return = 0);
00363 virtual int addMsg(TQPtrList<KMMessage>&, TQValueList<int>& index_return);
00364
00366 void copyMsg(TQPtrList<KMMessage>& msgList);
00367
00368
00371 virtual KMMessage* take(int idx);
00372 virtual void take(TQPtrList<KMMessage>);
00373
00377 void slotSimpleData(TDEIO::Job * job, const TQByteArray & data);
00378
00383 static void flagsToStatus(KMMsgBase *msg, int flags, bool newMsg = TRUE, int supportedFalgs = 31 );
00384
00389 static void seenFlagToStatus( KMMsgBase *msg, int flags, bool newMsg = true );
00390
00394 void slotCopyMsgResult( KMail::FolderJob* job );
00395
00399 void slotSearchDone( TQValueList<TQ_UINT32> serNums,
00400 const KMSearchPattern* pattern,
00401 bool complete );
00402
00406 void slotSearchDone( TQ_UINT32 serNum, const KMSearchPattern* pattern, bool matches );
00407
00412 void slotListResult( const TQStringList&, const TQStringList&,
00413 const TQStringList&, const TQStringList&, const ImapAccountBase::jobData& );
00414
00419 void slotCheckNamespace( const TQStringList&, const TQStringList&,
00420 const TQStringList&, const TQStringList&, const ImapAccountBase::jobData& );
00421
00422 protected:
00423 virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt,
00424 KMFolder *folder, TQString partSpecifier,
00425 const AttachmentStrategy *as ) const;
00426 virtual FolderJob* doCreateJob( TQPtrList<KMMessage>& msgList, const TQString& sets,
00427 FolderJob::JobType jt, KMFolder *folder ) const;
00428
00429 void getMessagesResult(TDEIO::Job * job, bool lastSet);
00430
00434 virtual int expungeContents();
00435
00436 void setChildrenState( TQString attributes );
00437
00439 void initInbox();
00440
00442 KMFolderImap* findParent( const TQString& path, const TQString& name );
00443
00445 void checkFolders( const TQStringList& folderNames, const TQString& ns );
00446
00447 void finishMailCheck( const char *func, imapState state );
00448
00449 protected slots:
00450
00454 void checkValidity();
00455 void slotCheckValidityResult(TDEIO::Job * job);
00456
00460 void reallyGetFolder(const TQString &startUid = TQString());
00461
00465 void slotListFolderResult(TDEIO::Job * job);
00466 void slotListFolderEntries(TDEIO::Job * job, const TDEIO::UDSEntryList & uds);
00467
00471 void slotGetMessagesResult(TDEIO::Job * job);
00472 void slotGetLastMessagesResult(TDEIO::Job * job);
00473 void slotGetMessagesData(TDEIO::Job * job, const TQByteArray & data);
00474
00478 void slotCreateFolderResult(TDEIO::Job * job);
00479
00483 void slotRemoveFolderResult(TDEIO::Job *job);
00484
00488 void slotStatResult(TDEIO::Job *job);
00489
00494 void slotCompleteMailCheckProgress();
00495
00499 void slotProcessNewMail( int errorCode, const TQString& errorMsg );
00500
00506 void slotCreatePendingFolders( int errorCode, const TQString& errorMsg );
00507
00511 void slotListNamespaces();
00512
00513 protected:
00514 TQString mImapPath;
00515 ulong mLastUid;
00516 imapState mContentState, mSubfolderState;
00517 bool mIsSelected;
00518 bool mCheckFlags;
00519 bool mReadOnly;
00520 bool mCheckMail;
00521 mutable TQGuardedPtr<KMAcctImap> mAccount;
00522
00523 TQString mUidValidity;
00524 unsigned int mUserRights;
00525 KMail::ACLJobs::ACLFetchState mUserRightsState;
00526
00527 private:
00528
00529 bool mCheckingValidity;
00530
00531 TQIntDict<KMMsgMetaData> mUidMetaDataMap;
00532
00533 TQDict<KMMsgMetaData> mMetaDataMap;
00534
00535 bool mAlreadyRemoved;
00536
00537 TQGuardedPtr<ProgressItem> mMailCheckProgressItem;
00538
00539 ProgressItem *mListDirProgressItem;
00540
00541 ProgressItem *mAddMessageProgressItem;
00542
00543 TQStringList mFoldersPendingCreation;
00544
00545
00546
00547
00548
00549 bool mUploadAllFlags;
00550
00551
00552
00553 int mPermanentFlags;
00554 };
00555
00556 #endif // kmfolderimap_h