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 Sat May 1 11:37:26 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003