00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef actionscheduler_h
00033 #define actionscheduler_h
00034
00035 #include "kmfilteraction.h"
00036 #include "kmfilter.h"
00037 #include "kmfiltermgr.h"
00038 #include "kmcommands.h"
00039
00040 #include <tqobject.h>
00041 #include <tqguardedptr.h>
00042 #include <tqtimer.h>
00043
00044 class KMHeaders;
00045
00046 namespace KMail {
00047
00048
00049 class ActionScheduler : public TQObject
00050 {
00051 Q_OBJECT
00052
00053
00054 public:
00055 enum ReturnCode { ResultOk, ResultError, ResultCriticalError };
00056
00057 ActionScheduler(KMFilterMgr::FilterSet set,
00058 TQValueList<KMFilter*> filters,
00059 KMHeaders *headers = 0,
00060 KMFolder *srcFolder = 0);
00061 ~ActionScheduler();
00062
00065 void setAutoDestruct( bool );
00066
00068 void setAlwaysMatch( bool );
00069
00071 void setDefaultDestinationFolder( KMFolder* );
00072
00074 void setSourceFolder( KMFolder* );
00075
00079 void setFilterList( TQValueList<KMFilter*> filters );
00080
00082 void setAccountId( uint id ) { mAccountId = id; mAccount = true; }
00083
00085 void clearAccountId() { mAccountId = 0; mAccount = false; }
00086
00088 void execFilters(const TQValueList<TQ_UINT32> serNums);
00089 void execFilters(const TQPtrList<KMMsgBase> msgList);
00090 void execFilters(KMMsgBase* msgBase);
00091 void execFilters(TQ_UINT32 serNum);
00092
00093 static TQString debug();
00094 static bool isEnabled();
00095
00100 bool ignoreChanges( bool ignore );
00101
00102 signals:
00104 void result(ReturnCode);
00105 void filtered(TQ_UINT32);
00106
00107 public slots:
00109 void actionMessage(KMFilterAction::ReturnCode = KMFilterAction::GoOn);
00110
00112 void copyMessageFinished( KMCommand *command );
00113
00114 private slots:
00115 KMMsgBase* messageBase(TQ_UINT32 serNum);
00116 KMMessage* message(TQ_UINT32 serNum);
00117 void finish();
00118
00119 void folderClosedOrExpunged();
00120
00121 int tempOpenFolder(KMFolder* aFolder);
00122 void tempCloseFolders();
00123
00124
00125 void fetchMessage();
00126 void messageFetched( KMMessage *msg );
00127 void msgAdded( KMFolder*, TQ_UINT32 );
00128 void enqueue(TQ_UINT32 serNum);
00129
00130
00131 void processMessage();
00132 void messageRetrieved(KMMessage*);
00133 void filterMessage();
00134 void moveMessage();
00135 void moveMessageFinished( KMCommand *command );
00136 void timeOut();
00137 void fetchTimeOut();
00138
00139 private:
00140 static TQValueList<ActionScheduler*> *schedulerList;
00141 static KMFolderMgr *tempFolderMgr;
00142 static int refCount, count;
00143 static bool sEnabled, sEnabledChecked;
00144 TQValueListIterator<TQ_UINT32> mMessageIt;
00145 TQValueListIterator<KMFilter> mFilterIt;
00146 TQValueList<TQ_UINT32> mSerNums, mFetchSerNums;
00147 TQValueList<TQGuardedPtr<KMFolder> > mOpenFolders;
00148 TQValueList<KMFilter> mFilters, mQueuedFilters;
00149 KMFilterAction* mFilterAction;
00150 KMFilterMgr::FilterSet mSet;
00151 KMHeaders *mHeaders;
00152 TQGuardedPtr<KMFolder> mSrcFolder, mDestFolder;
00153 bool mExecuting, mExecutingLock, mFetchExecuting;
00154 bool mUnget, mFetchUnget;
00155 bool mIgnore;
00156 bool mFiltersAreQueued;
00157 bool mAutoDestruct;
00158 bool mAlwaysMatch;
00159 bool mAccount;
00160 uint mAccountId;
00161 TQ_UINT32 mOriginalSerNum;
00162 bool mDeleteSrcFolder;
00163 ReturnCode mResult;
00164 TQTimer *finishTimer, *fetchMessageTimer, *tempCloseFoldersTimer;
00165 TQTimer *processMessageTimer, *filterMessageTimer;
00166 TQTimer *timeOutTimer, *fetchTimeOutTimer;
00167 TQTime timeOutTime, fetchTimeOutTime;
00168 KMCommand *lastCommand;
00169 FolderJob *lastJob;
00170 };
00171
00172 }
00173
00174 #endif