kmfolder.h
00001
00002
00003
00004
00005
00006
00007
00008 #ifndef kmfolder_h
00009 #define kmfolder_h
00010
00011
00012 #include <config.h>
00013
00014 #include "kmfoldernode.h"
00015 #include "kmfoldertype.h"
00016 #include "kmmsginfo.h"
00017 #include "kmglobal.h"
00018 #include "folderjob.h"
00019 using KMail::FolderJob;
00020 #include "mailinglist-magic.h"
00021 using KMail::MailingList;
00022
00023 #include "mimelib/string.h"
00024
00025 #include <qptrvector.h>
00026 #include <sys/types.h>
00027 #include <stdio.h>
00028
00029 class KMMessage;
00030 class KMFolderDir;
00031 class KMAcctList;
00032 class KMMsgDict;
00033 class KMMsgDictREntry;
00034 class QTimer;
00035 class FolderStorage;
00036 class KMFolderTreeItem;
00037
00038 namespace KMail {
00039 class AttachmentStrategy;
00040 }
00041 using KMail::AttachmentStrategy;
00042
00043 typedef QValueList<Q_UINT32> SerNumList;
00044
00055 class KMFolder: public KMFolderNode
00056 {
00057 Q_OBJECT
00058 friend class KMFolderJob;
00059 public:
00060
00061
00065 KMFolder( KMFolderDir* parent, const QString& name,
00066 KMFolderType aFolderType );
00067 ~KMFolder();
00068
00070 void readConfig( KConfig* config );
00071
00073 void writeConfig( KConfig* config ) const;
00074
00075 FolderStorage* storage() { return mStorage; }
00077 const FolderStorage* storage() const { return mStorage; }
00078
00080 KMFolderType folderType() const;
00081
00083 QString fileName() const;
00084
00086 QString location() const;
00087
00089 QString indexLocation() const;
00090
00092 QString subdirLocation() const;
00093
00096 KMFolderDir* child() const
00097 { return mChild; }
00098
00100 KMFolderDir* createChildFolder();
00101
00103 void setChild( KMFolderDir* aChild );
00104
00106 bool noContent() const;
00107
00109 void setNoContent(bool aNoContent);
00110
00112 bool noChildren() const;
00113
00115 void setNoChildren(bool aNoChildren);
00116
00118 KMMessage* getMsg(int idx);
00119
00121 KMMsgInfo* unGetMsg(int idx);
00122
00124 bool isMessage(int idx);
00125
00127 QCString& getMsgString(int idx, QCString& mDest);
00128
00130 DwString getDwString(int idx);
00131
00135 void ignoreJobsForMessage( KMMessage* );
00136
00141 FolderJob* createJob( KMMessage *msg, FolderJob::JobType jt = FolderJob::tGetMessage,
00142 KMFolder *folder = 0, QString partSpecifier = QString::null,
00143 const AttachmentStrategy *as = 0 ) const;
00144 FolderJob* createJob( QPtrList<KMMessage>& msgList, const QString& sets,
00145 FolderJob::JobType jt = FolderJob::tGetMessage,
00146 KMFolder *folder = 0 ) const;
00147
00152 const KMMsgBase* getMsgBase(int idx) const;
00153 KMMsgBase* getMsgBase(int idx);
00154
00156 const KMMsgBase* operator[](int idx) const;
00157
00159 KMMsgBase* operator[](int idx);
00160
00163 KMMessage* take(int idx);
00164 void take(QPtrList<KMMessage> msgList);
00165
00172 int addMsg(KMMessage* msg, int* index_return = 0);
00173
00177 int addMsgKeepUID(KMMessage* msg, int* index_return = 0);
00178
00181 void emitMsgAddedSignals(int idx);
00182
00184 void removeMsg(int i, bool imapQuiet = FALSE);
00185 void removeMsg(QPtrList<KMMessage> msgList, bool imapQuiet = FALSE);
00186
00189 int expungeOldMsg(int days);
00190
00195 int moveMsg(KMMessage* msg, int* index_return = 0);
00196 int moveMsg(QPtrList<KMMessage>, int* index_return = 0);
00197
00199 int find(const KMMsgBase* msg) const;
00200 int find( const KMMessage * msg ) const;
00201
00203 int count(bool cache = false) const;
00204
00206 int countUnread();
00207
00210 int countUnreadRecursive();
00211
00214 void msgStatusChanged( const KMMsgStatus oldStatus,
00215 const KMMsgStatus newStatus,
00216 int idx);
00217
00223 int open();
00224
00227 int canAccess();
00228
00231 void close(bool force=FALSE);
00232
00234 void sync();
00235
00237 bool isOpened() const;
00238
00240 void markNewAsUnread();
00241
00243 void markUnreadAsRead();
00244
00248 int create(bool imap = FALSE);
00249
00254 void remove();
00255
00259 int expunge();
00260
00261 enum CompactOptions { CompactLater, CompactNow, CompactSilentlyNow };
00268 void compact( CompactOptions options );
00269
00272 int rename(const QString& newName, KMFolderDir *aParent = 0);
00273
00275 bool autoCreateIndex() const;
00276
00279 void setAutoCreateIndex(bool);
00280
00284 bool dirty() const;
00285
00287 void setDirty(bool f);
00288
00290 bool needsCompacting() const;
00291 void setNeedsCompacting(bool f);
00292
00301 void quiet(bool beQuiet);
00302
00304 bool isReadOnly() const;
00305
00310 bool isSystemFolder() const { return mIsSystemFolder; }
00311 void setSystemFolder(bool itIs) { mIsSystemFolder=itIs; }
00312
00314 virtual QString label() const;
00315 void setLabel( const QString& l ) { mLabel = l; }
00316
00318 virtual QString systemLabel() const { return mSystemLabel; }
00319 void setSystemLabel( const QString& l ) { mSystemLabel = l; }
00320
00322 virtual QString prettyURL() const;
00323
00325 const char* type() const;
00326
00328 bool hasAccounts() const;
00329
00331 void setMailingListEnabled( bool enabled );
00332 bool isMailingListEnabled() const { return mMailingListEnabled; }
00333
00334 void setMailingList( const MailingList& mlist );
00335 MailingList mailingList() const
00336 { return mMailingList; }
00337 QString mailingListPostAddress() const;
00338
00339 void setIdentity(uint identity);
00340 uint identity() const { return mIdentity; }
00341
00343 QString whoField() const { return mWhoField; }
00344 void setWhoField(const QString& aWhoField);
00345
00347 QString userWhoField(void) { return mUserWhoField; }
00348 void setUserWhoField(const QString &whoField,bool writeConfig=true);
00349
00351 void correctUnreadMsgsCount();
00352
00354 QString idString() const;
00355
00359 void setAutoExpire(bool enabled);
00360
00364 bool isAutoExpire() const { return mExpireMessages; }
00365
00371 void setUnreadExpireAge(int age);
00372
00377 void setUnreadExpireUnits(ExpireUnits units);
00378
00384 void setReadExpireAge(int age);
00385
00390 void setReadExpireUnits(ExpireUnits units);
00391
00396 int getUnreadExpireAge() const { return mUnreadExpireAge; }
00397
00402 int getReadExpireAge() const { return mReadExpireAge; }
00403
00408 ExpireUnits getUnreadExpireUnits() const { return mUnreadExpireUnits; }
00409
00414 ExpireUnits getReadExpireUnits() const { return mReadExpireUnits; }
00415
00416 enum ExpireAction { ExpireDelete, ExpireMove };
00420 ExpireAction expireAction() const { return mExpireAction; }
00421 void setExpireAction( ExpireAction a );
00422
00426 QString expireToFolderId() const { return mExpireToFolderId; }
00427 void setExpireToFolderId( const QString& id );
00428
00433 void expireOldMessages( bool immediate );
00434
00437 int writeIndex( bool createEmptyIndex = false );
00438
00441 void fillMsgDict(KMMsgDict *dict);
00442
00444 int writeMsgDict(KMMsgDict *dict = 0);
00445
00447 int touchMsgDict();
00448
00450 int appendtoMsgDict(int idx = -1);
00451
00453 void setRDict(KMMsgDictREntry *rentry);
00454
00456 KMMsgDictREntry *rDict() const;
00457
00459 void setStatus(int idx, KMMsgStatus status, bool toggle=false);
00460
00462 void setStatus(QValueList<int>& ids, KMMsgStatus status, bool toggle=false);
00463
00465 bool useCustomIcons() const { return mUseCustomIcons; }
00466 void setUseCustomIcons(bool useCustomIcons) { mUseCustomIcons = useCustomIcons; }
00467 QString normalIconPath() const { return mNormalIconPath; }
00468 QString unreadIconPath() const { return mUnreadIconPath; }
00469 void setIconPaths(const QString &normalPath, const QString &unreadPath);
00470
00471 void removeJobs();
00472
00476 static size_t crlf2lf( char* str, const size_t strLen );
00477
00478 void daysToExpire( int& unreadDays, int& readDays );
00479
00484 KMFolder* trashFolder() const;
00485
00490 bool putRepliesInSameFolder() const { return mPutRepliesInSameFolder; }
00491 void setPutRepliesInSameFolder( bool b ) { mPutRepliesInSameFolder = b; }
00492
00497 bool ignoreNewMail() const { return mIgnoreNewMail; }
00498 void setIgnoreNewMail( bool b ) { mIgnoreNewMail = b; }
00499
00501 bool isMoveable() const;
00502
00503 signals:
00506 void changed();
00507
00510 void cleared();
00511
00514 void expunged( KMFolder* );
00515
00517 void iconsChanged();
00518
00520 void nameChanged();
00521
00523 void msgRemoved(KMFolder*, Q_UINT32 sernum);
00524
00526 void msgRemoved(int idx,QString msgIdMD5, QString strippedSubjMD5);
00527 void msgRemoved(KMFolder*);
00528
00530 void msgAdded(int idx);
00531 void msgAdded(KMFolder*, Q_UINT32 sernum);
00532
00534 void msgChanged(KMFolder*, Q_UINT32 sernum, int delta);
00535
00537 void msgHeaderChanged(KMFolder*, int);
00538
00540 void statusMsg(const QString&);
00541
00543 void numUnreadMsgsChanged( KMFolder* );
00544
00546 void removed(KMFolder*, bool);
00547
00548 public slots:
00550 int updateIndex();
00551
00554 void reallyAddMsg(KMMessage* aMsg);
00555
00558 void reallyAddCopyOfMsg(KMMessage* aMsg);
00559
00560 private slots:
00562 void slotContentsTypeChanged( KMail::FolderContentsType type );
00563
00564 private:
00565 FolderStorage* mStorage;
00566 KMFolderDir* mParent;
00567 KMFolderDir* mChild;
00568 bool mIsSystemFolder;
00569
00571 QString mLabel;
00572 QString mSystemLabel;
00573
00575 bool mExpireMessages;
00576 int mUnreadExpireAge;
00577 int mReadExpireAge;
00578 ExpireUnits mUnreadExpireUnits;
00579 ExpireUnits mReadExpireUnits;
00580 ExpireAction mExpireAction;
00581 QString mExpireToFolderId;
00582
00584 bool mUseCustomIcons;
00585 QString mNormalIconPath;
00586 QString mUnreadIconPath;
00587
00589 bool mMailingListEnabled;
00590 MailingList mMailingList;
00591
00592 uint mIdentity;
00593
00595 QString mWhoField, mUserWhoField;
00596
00598 bool mPutRepliesInSameFolder;
00599
00601 bool mIgnoreNewMail;
00602 };
00603
00604 #endif
This file is part of the documentation for kmail Library Version 3.3.2.