00001
00002
00003
00004
00005
00006
00007
#ifndef kmfolder_h
00008
#define kmfolder_h
00009
00010
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; }
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
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;
00613
int unreadExpireAge;
00614
int readExpireAge;
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 };
00634 };
00635
00636
#endif