kmail Library API Documentation

kmfoldercachedimap.h

00001 00032 #ifndef kmfoldercachedimap_h 00033 #define kmfoldercachedimap_h 00034 00035 #include <kdialogbase.h> 00036 #include <kstandarddirs.h> 00037 #include <qvaluelist.h> 00038 #include <qvaluevector.h> 00039 #include <qptrlist.h> 00040 #include <qdialog.h> 00041 00042 #include "kmfoldermaildir.h" 00043 #include "kmfolderimap.h" 00044 #include "kmacctimap.h" 00045 #include "kmfoldertype.h" 00046 #include "folderjob.h" 00047 #include "cachedimapjob.h" 00048 00049 using KMail::FolderJob; 00050 class KMAcctCachedImap; 00051 00052 namespace KMail { 00053 class AttachmentStrategy; 00054 struct ACLListEntry; 00055 } 00056 using KMail::AttachmentStrategy; 00057 00058 class DImapTroubleShootDialog : public KDialogBase 00059 { 00060 Q_OBJECT 00061 public: 00062 DImapTroubleShootDialog( QWidget* parent=0, const char* name=0 ); 00063 00064 static int run(); 00065 00066 private slots: 00067 void slotRebuildIndex(); 00068 void slotRebuildCache(); 00069 00070 private: 00071 int rc; 00072 }; 00073 00074 class KMFolderCachedImap : public KMFolderMaildir 00075 { 00076 Q_OBJECT 00077 00078 public: 00079 static QString cacheLocation() { 00080 return locateLocal("data", "kmail/dimap" ); 00081 } 00082 00086 KMFolderCachedImap(KMFolder* folder, const char* name=0); 00087 virtual ~KMFolderCachedImap(); 00088 00090 void initializeFrom( KMFolderCachedImap* parent ); 00091 00092 virtual void readConfig(); 00093 00095 virtual KMFolderType folderType() const { return KMFolderTypeCachedImap; } 00096 00098 virtual void remove(); 00099 00101 virtual void serverSync( bool recurse ); 00102 00104 void resetSyncState(); 00105 00106 void checkUidValidity(); 00107 00108 enum imapState { imapNoInformation=0, imapInProgress=1, imapFinished=2 }; 00109 00110 virtual imapState getContentState() { return mContentState; } 00111 virtual void setContentState(imapState state) { mContentState = state; } 00112 00113 virtual imapState getSubfolderState() { return mSubfolderState; } 00114 virtual void setSubfolderState(imapState state); 00115 00117 void setImapPath(const QString &path); 00118 QString imapPath() const { return mImapPath; } 00119 00121 void setLastUid( ulong uid ); 00122 ulong lastUid(); 00123 00125 KMMsgBase* findByUID( ulong uid ); 00126 00128 void setUidValidity(const QString &validity) { mUidValidity = validity; } 00129 QString uidValidity() const { return mUidValidity; } 00130 00133 void clearUidMap() { uidMap.clear(); } 00134 00136 void setAccount(KMAcctCachedImap *acct); 00137 KMAcctCachedImap* account() const; 00138 00140 QString uidCacheLocation() const; 00141 00143 int readUidCache(); 00144 00146 int writeUidCache(); 00147 00149 int progress() const { return mProgress; } 00150 00151 /* Reimplemented from KMFolder. Moving is not supported, so aParent must be 0 */ 00152 virtual int rename(const QString& aName, KMFolderDir *aParent=0); 00153 00154 /* Reimplemented from KMFolderMaildir */ 00155 virtual KMMessage* take(int idx); 00156 /* Reimplemented from KMFolderMaildir */ 00157 virtual int addMsg(KMMessage* msg, int* index_return = 0); 00158 /* internal version that doesn't remove the X-UID header */ 00159 virtual int addMsgInternal(KMMessage* msg, bool, int* index_return = 0); 00160 virtual int addMsgKeepUID(KMMessage* msg, int* index_return = 0) { 00161 return addMsgInternal(msg, false, index_return); 00162 } 00163 00164 /* Reimplemented from KMFolderMaildir */ 00165 virtual void removeMsg(int i, bool imapQuiet = FALSE); 00166 virtual void removeMsg(QPtrList<KMMessage> msgList, bool imapQuiet = FALSE) 00167 { FolderStorage::removeMsg(msgList, imapQuiet); } 00168 00170 bool isReadOnly() const { return KMFolderMaildir::isReadOnly() || mReadOnly; } 00171 00175 void sendFolderComplete(bool success) 00176 { emit folderComplete(this, success); } 00177 00181 void setSilentUpload( bool silent ) { mSilentUpload = silent; } 00182 bool silentUpload() { return mSilentUpload; } 00183 00184 virtual int createIndexFromContents() 00185 { return KMFolderMaildir::createIndexFromContents(); } 00186 00187 //virtual void holdSyncs( bool hold ) { mHoldSyncs = hold; } 00188 00194 virtual bool listDirectory(bool secondStep = false); 00195 00197 KMFolder* trashFolder() const; 00198 00203 int userRights() const { return mUserRights; } 00204 00206 void setUserRights( unsigned int userRights ); 00207 00209 typedef QValueVector<KMail::ACLListEntry> ACLList; 00210 const ACLList& aclList() const { return mACLList; } 00211 00213 void setACLList( const ACLList& arr ); 00214 00216 void setContentsType( KMail::FolderContentsType type ); 00217 00218 // Reimplemented so the mStatusChangedLocally bool can be set 00219 virtual void setStatus(QValueList<int>& ids, KMMsgStatus status, bool toggle); 00220 00221 protected slots: 00226 void slotListResult(const QStringList&, const QStringList&, 00227 const QStringList&, const QStringList&, const ImapAccountBase::jobData& ); 00228 00229 void slotGetMessagesData(KIO::Job * job, const QByteArray & data); 00230 void getMessagesResult(KMail::FolderJob *, bool lastSet); 00231 void slotGetLastMessagesResult(KMail::FolderJob *); 00232 void slotProgress(unsigned long done, unsigned long total); 00233 void slotPutProgress( unsigned long, unsigned long ); 00234 00235 //virtual void slotCheckValidityResult(KIO::Job * job); 00236 void slotSubFolderComplete(KMFolderCachedImap*, bool); 00237 00238 // Connected to the imap account 00239 void slotConnectionResult( int errorCode, const QString& errorMsg ); 00240 00241 void slotCheckUidValidityResult( KMail::FolderJob* job ); 00242 00243 void slotReceivedUserRights( KMFolder* ); 00244 void slotReceivedACL( KMFolder*, KIO::Job*, const KMail::ACLList& ); 00245 00246 void slotMultiSetACLResult(KIO::Job *); 00247 void slotACLChanged( const QString&, int ); 00248 void slotDeleteMessagesResult(KMail::FolderJob *); 00249 void slotImapStatusChanged(KMFolder* folder, const QString&, bool); 00250 00251 protected: 00252 /* returns true if there were messages to delete 00253 on the server */ 00254 bool deleteMessages(); 00255 void listMessages(); 00256 void uploadNewMessages(); 00257 void uploadFlags(); 00258 void createNewFolders(); 00259 00260 void listDirectory2(); 00261 00262 00265 virtual QValueList<unsigned long> findNewMessages(); 00268 virtual QValueList<KMFolderCachedImap*> findNewFolders(); 00269 00271 virtual bool canRemoveFolder() const; 00272 00274 virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt, KMFolder *folder, 00275 QString partSpecifier, const AttachmentStrategy *as ) const; 00276 virtual FolderJob* doCreateJob( QPtrList<KMMessage>& msgList, const QString& sets, 00277 FolderJob::JobType jt, KMFolder *folder ) const; 00278 00279 virtual void timerEvent( QTimerEvent* ); 00280 00281 /* update progress status */ 00282 void newState( int progress, const QString& syncStatus ); 00283 00284 public slots: 00288 void slotSimpleData(KIO::Job * job, const QByteArray & data); 00289 00293 void slotTroubleshoot(); 00294 00295 private slots: 00296 void serverSyncInternal(); 00297 void slotIncreaseProgress(); 00298 void slotUpdateLastUid(); 00299 00300 signals: 00301 void folderComplete(KMFolderCachedImap *folder, bool success); 00302 void listComplete( KMFolderCachedImap* ); 00303 00307 void syncState( int state, int number ); 00308 00309 private: 00310 QString state2String( int state ) const; 00311 00313 enum { 00314 SYNC_STATE_INITIAL, 00315 SYNC_STATE_PUT_MESSAGES, 00316 SYNC_STATE_UPLOAD_FLAGS, 00317 SYNC_STATE_CREATE_SUBFOLDERS, 00318 SYNC_STATE_LIST_SUBFOLDERS, 00319 SYNC_STATE_LIST_SUBFOLDERS2, 00320 SYNC_STATE_DELETE_SUBFOLDERS, 00321 SYNC_STATE_LIST_MESSAGES, 00322 SYNC_STATE_DELETE_MESSAGES, 00323 SYNC_STATE_EXPUNGE_MESSAGES, 00324 SYNC_STATE_GET_MESSAGES, 00325 SYNC_STATE_HANDLE_INBOX, 00326 SYNC_STATE_GET_USERRIGHTS, 00327 SYNC_STATE_GET_ACLS, 00328 SYNC_STATE_SET_ACLS, 00329 SYNC_STATE_FIND_SUBFOLDERS, 00330 SYNC_STATE_SYNC_SUBFOLDERS, 00331 SYNC_STATE_CHECK_UIDVALIDITY, 00332 SYNC_STATE_RENAME_FOLDER 00333 } mSyncState; 00334 00335 int mProgress; 00336 int mStatusFlagsJobs; 00337 00338 QString mUidValidity; 00339 QString mImapPath; 00340 imapState mContentState, mSubfolderState; 00341 QStringList mSubfolderNames, mSubfolderPaths, 00342 mSubfolderMimeTypes, mSubfolderAttributes; 00343 00344 bool mHasInbox; 00345 bool mIsSelected; 00346 bool mCheckFlags; 00347 bool mReadOnly; 00348 mutable QGuardedPtr<KMAcctCachedImap> mAccount; 00349 00350 QIntDict<int> uidsOnServer; 00351 QValueList<ulong> uidsForDeletionOnServer; 00352 QValueList<KMail::CachedImapJob::MsgForDownload> mMsgsForDownload; 00353 QValueList<ulong> mUidsForDownload; 00354 QStringList foldersForDeletionOnServer; 00355 00356 QValueList<KMFolderCachedImap*> mSubfoldersForSync; 00357 KMFolderCachedImap* mCurrentSubfolder; 00358 00362 QMap<ulong,int> uidMap; 00363 bool uidMapDirty; 00364 void reloadUidMap(); 00365 int uidWriteTimer; 00366 00376 ulong mLastUid; 00381 ulong mTentativeHighestUid; 00382 00383 int mUserRights; 00384 ACLList mACLList; 00385 00386 bool mSilentUpload; 00387 bool mFolderRemoved; 00388 //bool mHoldSyncs; 00389 bool mRecurse; 00390 bool mCreateInbox; 00391 bool mContentsTypeChanged; 00396 bool mStatusChangedLocally; 00397 }; 00398 00399 #endif /*kmfoldercachedimap_h*/
KDE Logo
This file is part of the documentation for kmail Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:48 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003