00001 #ifndef kmfoldermaildir_h
00002 #define kmfoldermaildir_h
00003
00004 #include "kmfolderindex.h"
00005
00006 #include <kfileitem.h>
00007
00008 #include <tqguardedptr.h>
00009
00010 class KMFolderMaildir;
00011 namespace KMail {
00012 class FolderJob;
00013 class MaildirJob;
00014 class AttachmentStrategy;
00015 }
00016 namespace KIO {
00017 class Job;
00018 }
00019
00020 using KMail::FolderJob;
00021 using KMail::MaildirJob;
00022 using KMail::AttachmentStrategy;
00023
00024 class KMFolderMaildir : public KMFolderIndex
00025 {
00026 Q_OBJECT
00027 TQ_OBJECT
00028 friend class ::KMail::MaildirJob;
00029 public:
00033 KMFolderMaildir(KMFolder* folder, const char* name=0);
00034 virtual ~KMFolderMaildir();
00035
00037 virtual KMFolderType folderType() const { return KMFolderTypeMaildir; }
00038
00040 virtual DwString getDwString(int idx);
00041
00044 virtual KMMessage* take(int idx);
00045
00052 virtual int addMsg(KMMessage* msg, int* index_return = 0);
00053
00055 virtual void removeMsg(int i, bool imapQuiet = FALSE);
00056 virtual void removeMsg(TQPtrList<KMMessage> msgList, bool imapQuiet = FALSE)
00057 { return KMFolderIndex::removeMsg(msgList, imapQuiet); }
00058
00059
00060
00061 virtual void msgStatusChanged( const KMMsgStatus oldStatus,
00062 const KMMsgStatus newStatus,
00063 int idx);
00064
00070 virtual int open(const char *owner);
00071
00072 virtual int canAccess();
00073
00075 virtual void sync();
00076
00079 virtual void reallyDoClose(const char *owner);
00080
00087 static int createMaildirFolders( const TQString & folderPath );
00088
00089 static TQString constructValidFileName( const TQString & filename = TQString(),
00090 KMMsgStatus status = KMMsgStatusNew );
00091
00092 static bool removeFile( const TQString & folderPath,
00093 const TQString & filename );
00094
00096 virtual int create();
00097
00100 int compact( unsigned int startIndex, int nbMessages, const TQStringList& entryList, bool& done );
00101
00104 virtual int compact( bool silent );
00105
00107 virtual bool isReadOnly() const { return false; }
00108
00110 virtual TQ_INT64 doFolderSize() const;
00111
00112 protected:
00113 virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt, KMFolder *folder,
00114 TQString partSpecifier, const AttachmentStrategy *as ) const;
00115 virtual FolderJob* doCreateJob( TQPtrList<KMMessage>& msgList, const TQString& sets,
00116 FolderJob::JobType jt, KMFolder *folder ) const;
00119 virtual KMMessage* readMsg(int idx);
00120
00124 virtual int removeContents();
00125
00129 virtual int expungeContents();
00130
00134 virtual int createIndexFromContents();
00135
00145 int addMsgInternal( KMMessage* msg, int* index_return = 0, bool stripUid=false );
00146
00147 private slots:
00148 void slotDirSizeJobResult( KIO::Job* job );
00149
00150 private:
00151 void readFileHeaderIntern(const TQString& dir, const TQString& file, KMMsgStatus status);
00152 TQString moveInternal(const TQString& oldLoc, const TQString& newLoc, KMMsgInfo* mi);
00153 TQString moveInternal(const TQString& oldLoc, const TQString& newLoc, TQString& aFileName, KMMsgStatus status);
00154 bool removeFile(const TQString& filename);
00155
00161 virtual IndexStatus indexStatus();
00162
00163 typedef TQPair<TQGuardedPtr<const KMFolderMaildir>,KFileItemList> DirSizeJobQueueEntry;
00164 static TQValueList<DirSizeJobQueueEntry> s_DirSizeJobQueue;
00165
00166 TQStrList mIdxToFileList;
00167 int mIdxCount;
00168 mutable bool mCurrentlyCheckingFolderSize;
00169 };
00170 #endif