kmail Library API Documentation

kmfolder.h

00001 /* Virtual base class for mail folder 00002 * 00003 * Author: Stefan Taferner <taferner@kde.org> 00004 * This code is under GPL 00005 * 00006 */ 00007 #ifndef kmfolder_h 00008 #define kmfolder_h 00009 00010 // for large file support 00011 #include <config.h> 00012 00013 #include "kmfoldernode.h" 00014 #include "kmfoldertype.h" 00015 #include "kmmsginfo.h" 00016 #include "kmglobal.h" 00017 #include "folderjob.h" 00018 using KMail::FolderJob; 00019 00020 #include "mimelib/string.h" 00021 00022 #include <qptrvector.h> 00023 #include <sys/types.h> 00024 #include <stdio.h> 00025 00026 class KMMessage; 00027 class KMFolderDir; 00028 class KMAcctList; 00029 class KMMsgDict; 00030 class KMMsgDictREntry; 00031 class QTimer; 00032 00033 namespace KMail { 00034 class AttachmentStrategy; 00035 } 00036 using KMail::AttachmentStrategy; 00037 00038 typedef QValueList<Q_UINT32> SerNumList; 00039 00050 class KMFolder: public KMFolderNode 00051 { 00052 Q_OBJECT 00053 friend class KMFolderJob; 00054 public: 00055 00056 00060 KMFolder(KMFolderDir* parent=0, const QString& name=QString::null); 00061 virtual ~KMFolder(); 00062 00064 virtual KMFolderType folderType() const { return KMFolderTypeUnknown; } 00065 00067 virtual QString fileName() const { return name(); } 00068 00070 QString location() const; 00071 00073 virtual QString indexLocation() const = 0; 00074 00076 QString subdirLocation() const; 00077 00080 virtual KMFolderDir* child() const 00081 { return mChild; } 00082 00084 virtual KMFolderDir* createChildFolder(); 00085 00087 virtual void setChild( KMFolderDir* aChild ) 00088 { mChild = aChild; } 00089 00091 virtual bool noContent() const 00092 { return mNoContent; } 00093 00095 virtual void setNoContent(bool aNoContent) 00096 { mNoContent = aNoContent; } 00097 00099 virtual KMMessage* getMsg(int idx); 00100 00102 virtual KMMsgInfo* unGetMsg(int idx); 00103 00105 virtual bool isMessage(int idx); 00106 00108 virtual QCString& getMsgString(int idx, QCString& mDest) = 0; 00109 00111 virtual DwString getDwString(int idx) = 0; 00112 00116 virtual void ignoreJobsForMessage( KMMessage* ); 00117 00122 virtual FolderJob* createJob( KMMessage *msg, FolderJob::JobType jt = FolderJob::tGetMessage, 00123 KMFolder *folder = 0, QString partSpecifier = QString::null, 00124 const AttachmentStrategy *as = 0 ) const; 00125 virtual FolderJob* createJob( QPtrList<KMMessage>& msgList, const QString& sets, 00126 FolderJob::JobType jt = FolderJob::tGetMessage, 00127 KMFolder *folder = 0 ) const; 00128 00133 virtual const KMMsgBase* getMsgBase(int idx) const = 0; 00134 virtual KMMsgBase* getMsgBase(int idx) = 0; 00135 00137 virtual const KMMsgBase* operator[](int idx) const { return getMsgBase(idx); } 00138 00140 virtual KMMsgBase* operator[](int idx) { return getMsgBase(idx); } 00141 00144 virtual KMMessage* take(int idx); 00145 virtual void take(QPtrList<KMMessage> msgList); 00146 00153 virtual int addMsg(KMMessage* msg, int* index_return = 0) = 0; 00154 00158 virtual int addMsgKeepUID(KMMessage* msg, int* index_return = 0) { 00159 return addMsg(msg, index_return); 00160 } 00161 00164 void emitMsgAddedSignals(int idx); 00165 00168 virtual bool canAddMsgNow(KMMessage* aMsg, int* aIndex_ret); 00169 00171 virtual void removeMsg(int i, bool imapQuiet = FALSE); 00172 virtual void removeMsg(QPtrList<KMMessage> msgList, bool imapQuiet = FALSE); 00173 00176 virtual int expungeOldMsg(int days); 00177 00182 virtual int moveMsg(KMMessage* msg, int* index_return = 0); 00183 virtual int moveMsg(QPtrList<KMMessage>, int* index_return = 0); 00184 00186 virtual int find(const KMMsgBase* msg) const = 0; 00187 int find( const KMMessage * msg ) const; 00188 00190 virtual int count(bool cache = false) const; 00191 00193 virtual int countUnread(); 00194 00197 virtual int countUnreadRecursive(); 00198 00201 virtual void msgStatusChanged( const KMMsgStatus oldStatus, 00202 const KMMsgStatus newStatus, 00203 int idx); 00204 00210 virtual int open() = 0; 00211 00214 virtual int canAccess() = 0; 00215 00218 virtual void close(bool force=FALSE) = 0; 00219 00221 virtual void sync() = 0; 00222 00224 bool isOpened() const { return (mOpenCount>0); } 00225 00227 virtual void markNewAsUnread(); 00228 00230 virtual void markUnreadAsRead(); 00231 00235 virtual int create(bool imap = FALSE) = 0; 00236 00241 virtual int remove(); 00242 00246 virtual int expunge(); 00247 00250 virtual int compact() = 0; 00251 00254 virtual int rename(const QString& newName, KMFolderDir *aParent = 0); 00255 00257 bool autoCreateIndex() const { return mAutoCreateIndex; } 00258 00261 virtual void setAutoCreateIndex(bool); 00262 00266 bool dirty() const { return mDirty; } 00267 00269 void setDirty(bool f); 00270 00272 bool needsCompacting() const { return needsCompact; } 00273 virtual void setNeedsCompacting(bool f) { needsCompact = f; } 00274 00283 virtual void quiet(bool beQuiet); 00284 00286 virtual bool isReadOnly() const = 0; 00287 00292 bool isSystemFolder() const { return mIsSystemFolder; } 00293 void setSystemFolder(bool itIs) { mIsSystemFolder=itIs; } 00294 00296 virtual QString label() const; 00297 void setLabel(const QString& lbl) { mLabel = lbl; } 00298 00300 virtual const char* type() const; 00301 00302 virtual QCString protocol() const = 0; 00303 00305 bool hasAccounts() const { return (mAcctList != 0); } 00306 00308 void setMailingList(bool enabled) 00309 { mMailingListEnabled = enabled; writeConfig(); } 00310 bool isMailingList() const { return mMailingListEnabled; } 00311 00312 void setMailingListPostAddress(const QString &address) 00313 { mMailingListPostingAddress = address; writeConfig(); } 00314 QString mailingListPostAddress() const 00315 { return mMailingListPostingAddress; } 00316 00317 void setMailingListAdminAddress(const QString &address) 00318 { mMailingListAdminAddress = address; writeConfig(); } 00319 QString mailingListAdminAddress() const 00320 { return mMailingListAdminAddress; } 00321 00322 void setIdentity(uint identity); 00323 uint identity() const { return mIdentity; } 00324 00326 QString whoField() const { return mWhoField; } 00327 void setWhoField(const QString& aWhoField) { mWhoField = aWhoField; /*writeConfig();*/ } 00328 00330 QString userWhoField(void) { return mUserWhoField; } 00331 void setUserWhoField(const QString &whoField,bool writeConfig=true); 00332 00334 virtual void correctUnreadMsgsCount(); 00335 00337 virtual QString idString() const; 00338 00342 void 00343 setAutoExpire(bool enabled) { 00344 expireMessages = enabled; 00345 writeConfig(); 00346 } 00347 00351 virtual bool isAutoExpire() const { return expireMessages; } 00352 00358 void 00359 setUnreadExpireAge(int age) { 00360 if (age >= 0) { 00361 unreadExpireAge = age; 00362 writeConfig(); 00363 } 00364 } 00365 00370 void 00371 setUnreadExpireUnits(ExpireUnits units) { 00372 if (units >= expireNever && units < expireMaxUnits) { 00373 unreadExpireUnits = units; 00374 } 00375 } 00376 00382 void 00383 setReadExpireAge(int age) { 00384 if (age >= 0) { 00385 readExpireAge = age; 00386 writeConfig(); 00387 } 00388 } 00389 00394 void 00395 setReadExpireUnits(ExpireUnits units) { 00396 if (units >= expireNever && units <= expireMaxUnits) { 00397 readExpireUnits = units; 00398 } 00399 } 00400 00405 int getUnreadExpireAge() const { return unreadExpireAge; } 00406 00411 int getReadExpireAge() const { return readExpireAge; } 00412 00417 ExpireUnits getUnreadExpireUnits() const { return unreadExpireUnits; } 00418 00423 ExpireUnits getReadExpireUnits() const { return readExpireUnits; } 00424 00425 void expireOldMessages(); 00426 00429 virtual int writeIndex( bool createEmptyIndex = false ) = 0; 00430 00433 void fillMsgDict(KMMsgDict *dict); 00434 00436 int writeMsgDict(KMMsgDict *dict = 0); 00437 00439 int touchMsgDict(); 00440 00442 int appendtoMsgDict(int idx = -1); 00443 00445 void setRDict(KMMsgDictREntry *rentry); 00446 00448 KMMsgDictREntry *rDict() const { return mRDict; } 00449 00451 virtual void setStatus(int idx, KMMsgStatus status, bool toggle=false); 00452 00454 virtual void setStatus(QValueList<int>& ids, KMMsgStatus status, bool toggle=false); 00455 00457 virtual bool useCustomIcons() const { return mUseCustomIcons; } 00458 virtual void setUseCustomIcons(bool useCustomIcons) { mUseCustomIcons = useCustomIcons; } 00459 virtual QString normalIconPath() const { return mNormalIconPath; } 00460 virtual QString unreadIconPath() const { return mUnreadIconPath; } 00461 virtual void setIconPaths(const QString &normalPath, const QString &unreadPath); 00462 00463 void removeJobs(); 00464 00468 static size_t crlf2lf( char* str, const size_t strLen ); 00469 00470 signals: 00473 void changed(); 00474 00477 void cleared(); 00478 00481 void expunged(); 00482 00484 void iconsChanged(); 00485 00487 void nameChanged(); 00488 00490 void msgRemoved(KMFolder*, Q_UINT32 sernum); 00491 00493 void msgRemoved(int idx,QString msgIdMD5, QString strippedSubjMD5); 00494 void msgRemoved(KMFolder*); 00495 00497 void msgAdded(int idx); 00498 void msgAdded(KMFolder*, Q_UINT32 sernum); 00499 00501 void msgChanged(KMFolder*, Q_UINT32 sernum, int delta); 00502 00504 void msgHeaderChanged(KMFolder*, int); 00505 00507 void statusMsg(const QString&); 00508 00510 void numUnreadMsgsChanged( KMFolder* ); 00511 00512 // Emitted by KMFolderCachedIMAP to signal syncing 00513 void syncRunning( KMFolder*, bool ); 00514 00515 public slots: 00517 virtual int updateIndex() = 0; 00518 00521 virtual void reallyAddMsg(KMMessage* aMsg); 00522 00525 virtual void reallyAddCopyOfMsg(KMMessage* aMsg); 00526 00527 protected slots: 00528 virtual void removeJob( QObject* ); 00529 protected: 00530 virtual void addJob( FolderJob* ) const; 00536 virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt, KMFolder *folder, 00537 QString partSpecifier, const AttachmentStrategy *as ) const = 0; 00538 virtual FolderJob* doCreateJob( QPtrList<KMMessage>& msgList, const QString& sets, 00539 FolderJob::JobType jt, KMFolder *folder ) const = 0; 00540 00544 void headerOfMsgChanged(const KMMsgBase*, int idx); 00545 00547 virtual QString dotEscape(const QString&) const; 00548 00551 virtual KMMessage* readMsg(int idx) = 0; 00552 00554 virtual bool readIndex() = 0; 00555 00559 virtual int removeContents() = 0; 00560 00564 virtual int expungeContents() = 0; 00565 00567 virtual void writeConfig(); 00568 00570 virtual void readConfig(); 00571 00572 virtual KMMsgBase* takeIndexEntry( int idx ) = 0; 00573 virtual KMMsgInfo* setIndexEntry( int idx, KMMessage *msg ) = 0; 00574 virtual void clearIndex(bool autoDelete=true, bool syncDict = false) = 0; 00575 virtual void fillDictFromIndex(KMMsgDict *dict) = 0; 00576 virtual void truncateIndex() = 0; 00577 00578 int mOpenCount; 00579 int mQuiet; 00580 bool mChanged; 00582 bool mAutoCreateIndex; 00584 bool mDirty; 00586 bool mFilesLocked; 00588 QString mLabel; 00590 QString mWhoField, mUserWhoField; 00591 bool mIsSystemFolder; 00592 KMAcctList* mAcctList; 00593 00594 bool mMailingListEnabled; 00595 QString mMailingListPostingAddress; 00596 QString mMailingListAdminAddress; 00597 uint mIdentity; 00598 00600 int mUnreadMsgs, mGuessedUnreadMsgs; 00601 int mTotalMsgs; 00602 bool mWriteConfigEnabled; 00604 bool needsCompact; 00606 bool mCompactable; 00607 bool mNoContent; 00608 KMFolderDir* mChild; 00609 bool mConvertToUtf8; 00610 00612 bool expireMessages; // TRUE if old messages are expired 00613 int unreadExpireAge; // Given in unreadExpireUnits 00614 int readExpireAge; // Given in readExpireUnits 00615 ExpireUnits unreadExpireUnits; 00616 ExpireUnits readExpireUnits; 00617 00618 int daysToExpire(int num, ExpireUnits units); 00619 00621 KMMsgDictREntry *mRDict; 00626 mutable QPtrList<FolderJob> mJobList; 00627 00629 bool mUseCustomIcons; 00630 QString mNormalIconPath; 00631 QString mUnreadIconPath; 00632 QTimer *mDirtyTimer; 00633 enum { mDirtyTimerInterval = 600000 }; // 10 minutes 00634 }; 00635 00636 #endif /*kmfolder_h*/
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:00 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003