kmfoldersearch.h
00001
00002
00003
00004
00005
00006 #ifndef kmfoldersearch_h
00007 #define kmfoldersearch_h
00008
00009 #include <qguardedptr.h>
00010 #include <qvaluelist.h>
00011 #include <qvaluevector.h>
00012 #include <qvaluestack.h>
00013 #include "kmfolder.h"
00014 #include "folderstorage.h"
00015
00025 typedef QValueList<Q_UINT32> SerNumList;
00026 class KMSearchPattern;
00027 class KMFolderImap;
00028 class QTimer;
00029
00030 namespace KMail {
00031 class AttachmentStrategy;
00032 }
00033 using KMail::AttachmentStrategy;
00034
00035 class KMSearch: public QObject
00036 {
00037 Q_OBJECT
00038
00039 public:
00040 KMSearch(QObject * parent = 0, const char * name = 0);
00041 ~KMSearch();
00042
00043 bool write(QString location) const;
00044 bool read(QString location);
00045 bool recursive() const { return mRecursive; }
00046 void setRecursive(bool recursive) { if (running()) stop(); mRecursive = recursive; }
00047 KMFolder* root() const { return mRoot; }
00048 void setRoot(KMFolder *folder) { if (running()) stop(); mRoot = folder; }
00049 bool inScope(KMFolder* folder) const;
00050
00051 void setSearchPattern(KMSearchPattern *searchPattern);
00052 KMSearchPattern* searchPattern() const { return mSearchPattern; }
00053 void start();
00054 bool running() const { return mRunning; }
00055 void stop();
00056 int foundCount() const { return mFoundCount; }
00057 int searchedCount() const { return mSearchedCount; }
00058 QString currentFolder() const { return mLastFolder; }
00059
00060 signals:
00061 void found(Q_UINT32 serNum);
00062 void finished(bool success);
00063
00064 protected slots:
00065 void slotProcessNextBatch();
00066 void slotFolderComplete(KMFolderImap *folder, bool success);
00067
00068 protected:
00069 friend class KMIndexSearchTarget;
00070 void setRunning(bool b) { mRunning = b; }
00071 void setFoundCount(int f) { mFoundCount = f; }
00072 void setSearchedCount(int f) { mSearchedCount = f; }
00073 void setCurrentFolder(const QString &f) { mLastFolder = f; }
00074
00075 private:
00076 int mRemainingMessages;
00077 int mRemainingFolders;
00078 bool mRecursive, mRunning, mIdle, mRunByIndex;
00079 QGuardedPtr<KMFolder> mRoot;
00080 KMSearchPattern* mSearchPattern;
00081 QValueList<QGuardedPtr<KMFolder> > mFolders, mOpenedFolders;
00082 QValueList<QGuardedPtr<KMFolderImap> > mIncompleteFolders;
00083 SerNumList mSerNums;
00084 QString mLastFolder;
00085 int mSearchedCount, mFoundCount;
00086 QTimer *mProcessNextBatchTimer;
00087 };
00088
00089 class KMFolderSearch: public FolderStorage
00090 {
00091 Q_OBJECT
00092 friend class KMFolderSearchJob;
00093 public:
00094 KMFolderSearch(KMFolder* folder, const char* name=0);
00095 virtual ~KMFolderSearch();
00096
00098 virtual KMFolderType folderType() const { return KMFolderTypeSearch; }
00099
00100
00101 void setSearch(KMSearch *search);
00102
00103 const KMSearch* search() const;
00104
00105 void stopSearch() { if (mSearch) mSearch->stop(); }
00106
00107 virtual KMMessage* getMsg(int idx);
00108 virtual void ignoreJobsForMessage( KMMessage* );
00109
00110 virtual void tryReleasingFolder(KMFolder* folder);
00111
00112 protected slots:
00113
00114 bool readSearch();
00115
00116 void executeSearch();
00117
00118 void searchFinished(bool success);
00119
00120 void examineAddedMessage(KMFolder *folder, Q_UINT32 serNum);
00121
00122 void examineCompletedFolder(KMFolderImap *folder, bool success);
00123
00124 void examineRemovedMessage(KMFolder *folder, Q_UINT32 serNum);
00125
00126 void examineChangedMessage(KMFolder *folder, Q_UINT32 serNum, int delta);
00127
00128 void examineInvalidatedFolder(KMFolder *folder);
00129
00130 void examineRemovedFolder(KMFolder *folder);
00131
00132 void propagateHeaderChanged(KMFolder *folder, int idx);
00133
00134 public slots:
00135
00136
00137 void addSerNum(Q_UINT32 serNum);
00138
00139
00140 void removeSerNum(Q_UINT32 serNum);
00141
00143 virtual int updateIndex();
00144
00145 public:
00146
00147 virtual QCString& getMsgString(int idx, QCString& mDest);
00148 virtual int addMsg(KMMessage* msg, int* index_return = 0);
00149 virtual int open();
00150 virtual int canAccess();
00151 virtual void sync();
00152 virtual void close(bool force=FALSE);
00153 virtual int create(bool imap = FALSE);
00154 virtual int compact( bool );
00155 virtual bool isReadOnly() const;
00156 virtual const KMMsgBase* getMsgBase(int idx) const;
00157 virtual KMMsgBase* getMsgBase(int idx);
00158 virtual int find(const KMMsgBase* msg) const;
00159 virtual QString indexLocation() const;
00160 virtual int writeIndex( bool createEmptyIndex = false );
00161 DwString getDwString(int idx);
00162 Q_UINT32 serNum(int idx) { return mSerNums[idx]; }
00163
00164 protected:
00165 virtual FolderJob* doCreateJob(KMMessage *msg, FolderJob::JobType jt,
00166 KMFolder *folder, QString partSpecifier,
00167 const AttachmentStrategy *as ) const;
00168 virtual FolderJob* doCreateJob(QPtrList<KMMessage>& msgList, const QString& sets,
00169 FolderJob::JobType jt, KMFolder *folder) const;
00170 virtual KMMessage* readMsg(int idx);
00171 virtual bool readIndex();
00172 virtual int removeContents();
00173 virtual int expungeContents();
00174 virtual int count(bool cache = false) const;
00175 virtual KMMsgBase* takeIndexEntry(int idx);
00176 virtual KMMsgInfo* setIndexEntry(int idx, KMMessage *msg);
00177 virtual void clearIndex(bool autoDelete=true, bool syncDict = false);
00178 virtual void fillDictFromIndex(KMMsgDict*);
00179 virtual void truncateIndex();
00180
00181 private:
00182 QValueVector<Q_UINT32> mSerNums;
00183 QValueList<QGuardedPtr<KMFolder> > mFolders;
00184 QValueStack<Q_UINT32> mUnexaminedMessages;
00185 FILE *mIdsStream;
00186 KMSearch *mSearch;
00187 bool mInvalid, mUnlinked;
00188 bool mTempOpened;
00189 QTimer *mExecuteSearchTimer;
00190 };
00191 #endif
00192
This file is part of the documentation for kmail Library Version 3.3.2.