20 #ifndef kmfoldersearch_h 21 #define kmfoldersearch_h 23 #include <tqguardedptr.h> 24 #include <tqvaluelist.h> 25 #include <tqvaluevector.h> 26 #include <tqvaluestack.h> 29 #include "folderstorage.h" 40 typedef TQValueList<TQ_UINT32> SerNumList;
43 class KMFolderSearchJob;
44 class KMIndexSearchTarget;
48 class AttachmentStrategy;
50 using KMail::AttachmentStrategy;
52 class KMSearch:
public TQObject
58 KMSearch(TQObject * parent = 0,
const char * name = 0);
61 bool write(TQString location)
const;
62 bool read(TQString location);
63 bool recursive()
const {
return mRecursive; }
64 void setRecursive(
bool recursive) {
if (running()) stop(); mRecursive = recursive; }
65 KMFolder* root()
const {
return mRoot; }
66 void setRoot(
KMFolder *folder) {
if (running()) stop(); mRoot = folder; }
67 bool inScope(
KMFolder* folder)
const;
72 bool running()
const {
return mRunning; }
74 int foundCount()
const {
return mFoundCount; }
75 int searchCount()
const {
return mSearchCount; }
76 TQString currentFolder()
const {
return mLastFolder; }
82 void found(TQ_UINT32 serNum);
83 void finished(
bool success);
86 void slotProcessNextBatch();
87 void slotSearchFolderResult(
KMFolder*, TQValueList<TQ_UINT32>,
91 friend class ::KMIndexSearchTarget;
92 void setRunning(
bool b) { mRunning = b; }
93 void setFoundCount(
int f) { mFoundCount = f; }
94 void setCurrentFolder(
const TQString &f) { mLastFolder = f; }
97 int mRemainingFolders;
98 bool mRecursive, mRunning, mIdle, mRunByIndex;
99 TQGuardedPtr<KMFolder> mRoot;
101 TQValueList<TQGuardedPtr<KMFolder> > mFolders, mOpenedFolders;
102 TQValueList<TQGuardedPtr<KMFolderImap> > mIncompleteFolders;
104 TQString mLastFolder;
107 TQTimer *mProcessNextBatchTimer;
114 friend class ::KMFolderSearchJob;
116 KMFolderSearch(
KMFolder* folder,
const char* name=0);
117 virtual ~KMFolderSearch();
120 virtual KMFolderType folderType()
const {
return KMFolderTypeSearch; }
123 void setSearch(KMSearch *search);
125 const KMSearch* search()
const;
127 void stopSearch() {
if (mSearch) mSearch->stop(); }
130 virtual void ignoreJobsForMessage(
KMMessage* );
132 virtual void tryReleasingFolder(
KMFolder* folder);
135 virtual bool isMoveable()
const {
return false; }
141 void executeSearch();
143 void searchFinished(
bool success);
145 void examineAddedMessage(
KMFolder *folder, TQ_UINT32 serNum);
147 void examineRemovedMessage(
KMFolder *folder, TQ_UINT32 serNum);
149 void examineChangedMessage(
KMFolder *folder, TQ_UINT32 serNum,
int delta);
151 void examineInvalidatedFolder(
KMFolder *folder);
153 void examineRemovedFolder(
KMFolder *folder);
155 void propagateHeaderChanged(
KMFolder *folder,
int idx);
160 void addSerNum(TQ_UINT32 serNum);
163 void removeSerNum(TQ_UINT32 serNum);
166 virtual int updateIndex();
169 void slotSearchExamineMsgDone(
KMFolder*, TQ_UINT32 serNum,
174 virtual int addMsg(
KMMessage* msg,
int* index_return = 0);
175 virtual int open(
const char *owner);
176 virtual int canAccess();
178 virtual void reallyDoClose(
const char* owner);
179 virtual int create();
180 virtual int compact(
bool );
181 virtual bool isReadOnly()
const;
182 virtual const KMMsgBase* getMsgBase(
int idx)
const;
183 virtual KMMsgBase* getMsgBase(
int idx);
184 virtual int find(
const KMMsgBase* msg)
const;
185 virtual TQString indexLocation()
const;
186 virtual int writeIndex(
bool createEmptyIndex =
false );
187 DwString getDwString(
int idx);
188 TQ_UINT32 serNum(
int idx) {
return mSerNums[idx]; }
191 virtual FolderJob* doCreateJob(
KMMessage *msg, FolderJob::JobType jt,
192 KMFolder *folder, TQString partSpecifier,
193 const AttachmentStrategy *as )
const;
194 virtual FolderJob* doCreateJob(TQPtrList<KMMessage>& msgList,
const TQString& sets,
195 FolderJob::JobType jt,
KMFolder *folder)
const;
197 virtual bool readIndex();
198 virtual int removeContents();
199 virtual int expungeContents();
200 virtual int count(
bool cache =
false)
const;
201 virtual KMMsgBase* takeIndexEntry(
int idx);
202 virtual KMMsgInfo* setIndexEntry(
int idx,
KMMessage *msg);
203 virtual void clearIndex(
bool autoDelete=
true,
bool syncDict =
false);
204 virtual void truncateIndex();
207 TQValueVector<TQ_UINT32> mSerNums;
208 TQValueList<TQGuardedPtr<KMFolder> > mFolders;
209 TQValueStack<TQ_UINT32> mUnexaminedMessages;
212 bool mInvalid, mUnlinked;
214 TQTimer *mExecuteSearchTimer;
215 TQMap<const KMFolder*, unsigned int>mFoldersCurrentlyBeingSearched;
This class is an abstraction of a search over messages.
The FolderStorage class is the bass class for the storage related aspects of a collection of mail (a ...