kmail

kmfoldermaildir.h

00001 #ifndef kmfoldermaildir_h
00002 #define kmfoldermaildir_h
00003 
00004 #include "kmfolderindex.h"
00005 
00006 #include <tdefileitem.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 TDEIO {
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   
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   // Called by KMMsgBase::setStatus when status of a message has changed
00060   // required to keep the number unread messages variable current.
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( TDEIO::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 /*kmfoldermaildir_h*/