00001
00002 #ifndef KMAcctExpPop_h
00003 #define KMAcctExpPop_h
00004
00005 #include "networkaccount.h"
00006
00007 #include <tqvaluelist.h>
00008 #include <tqstringlist.h>
00009 #include <tqvaluevector.h>
00010 #include <tqtimer.h>
00011 #include <tqdict.h>
00012
00013 class KMPopHeaders;
00014 class KMMessage;
00015 class TQDataStream;
00016 namespace TDEIO {
00017 class MetaData;
00018 class Slave;
00019 class SimpleJob;
00020 class Job;
00021 }
00022
00024 namespace KMail {
00028 class PopAccount: public NetworkAccount {
00029 Q_OBJECT
00030
00031
00032 public:
00033 virtual ~PopAccount();
00034 virtual void init(void);
00035
00036 virtual TDEIO::MetaData slaveConfig() const;
00037
00039 virtual void pseudoAssign( const KMAccount * a );
00040
00041 virtual TQString protocol() const;
00042 virtual unsigned short int defaultPort() const;
00043
00047 bool usePipelining(void) const { return mUsePipelining; }
00048 virtual void setUsePipelining(bool);
00049
00054 bool leaveOnServer(void) const { return mLeaveOnServer; }
00055 virtual void setLeaveOnServer(bool);
00056
00060 int leaveOnServerDays(void) const { return mLeaveOnServerDays; }
00061 virtual void setLeaveOnServerDays(int);
00062
00066 int leaveOnServerCount(void) const { return mLeaveOnServerCount; }
00067 virtual void setLeaveOnServerCount(int);
00068
00072 int leaveOnServerSize(void) const { return mLeaveOnServerSize; }
00073 virtual void setLeaveOnServerSize(int);
00074
00079 bool filterOnServer(void) const { return mFilterOnServer; }
00080 virtual void setFilterOnServer(bool);
00081
00086 unsigned int filterOnServerCheckSize(void) const { return mFilterOnServerCheckSize; }
00087 virtual void setFilterOnServerCheckSize(unsigned int);
00088
00092 virtual TQString type(void) const;
00093 virtual void readConfig(TDEConfig&);
00094 virtual void writeConfig(TDEConfig&);
00095 virtual void processNewMail(bool _interactive);
00096
00097 virtual void killAllJobs( bool disconnectSlave=false );
00098
00099 protected:
00100 enum Stage { Idle, List, Uidl, Head, Retr, Dele, Quit };
00101 friend class ::AccountManager;
00102 PopAccount(AccountManager* owner, const TQString& accountName, uint id);
00103
00107 void startJob();
00108
00112 void connectJob();
00113
00117 void processRemainingQueuedMessages();
00118
00122 void saveUidList();
00123
00124 bool mUsePipelining;
00125 bool mLeaveOnServer;
00126 int mLeaveOnServerDays;
00127 int mLeaveOnServerCount;
00128 int mLeaveOnServerSize;
00129 bool gotMsgs;
00130 bool mFilterOnServer;
00131 unsigned int mFilterOnServerCheckSize;
00132
00133 TDEIO::SimpleJob *job;
00134
00135 TQMap<TQString, int> mMsgsPendingDownload;
00136
00137 TQPtrList<KMPopHeaders> headersOnServer;
00138 TQPtrListIterator<KMPopHeaders> headerIt;
00139 bool headers;
00140
00141 TQMap<TQString, bool> mHeaderDeleteUids;
00142 TQMap<TQString, bool> mHeaderDownUids;
00143 TQMap<TQString, bool> mHeaderLaterUids;
00144
00145 TQStringList idsOfMsgs;
00146 TQValueList<int> lensOfMsgs;
00147 TQMap<TQString, TQString> mUidForIdMap;
00148 TQDict<int> mUidsOfSeenMsgsDict;
00149 TQDict<int> mUidsOfNextSeenMsgsDict;
00150 TQValueVector<int> mTimeOfSeenMsgsVector;
00151 TQMap<TQString, int> mTimeOfNextSeenMsgsMap;
00152 TQDict<int> mSizeOfNextSeenMsgsDict;
00153 TQStringList idsOfMsgsToDelete;
00154 TQStringList idsOfForcedDeletes;
00155 int indexOfCurrentMsg;
00156
00157 TQValueList<KMMessage*> msgsAwaitingProcessing;
00158 TQStringList msgIdsAwaitingProcessing;
00159 TQStringList msgUidsAwaitingProcessing;
00160
00161 TQByteArray curMsgData;
00162 TQDataStream *curMsgStrm;
00163
00164 int curMsgLen;
00165 Stage stage;
00166 TQTimer processMsgsTimer;
00167 int processingDelay;
00168 int numMsgs, numBytes, numBytesToRead, numBytesRead, numMsgBytesRead;
00169 bool interactive;
00170 bool mProcessing;
00171 bool mUidlFinished;
00172 int dataCounter;
00173
00174 protected slots:
00185 void slotProcessPendingMsgs();
00186
00191 void slotGetNextMsg();
00192
00197 void slotMsgRetrieved(TDEIO::Job*, const TQString &);
00198
00202 void slotData( TDEIO::Job*, const TQByteArray &);
00203
00209 void slotResult( TDEIO::Job* );
00210
00214 void slotCancel();
00215
00219 void slotAbortRequested();
00220
00225 void slotJobFinished();
00226
00230 void slotSlaveError(TDEIO::Slave *, int, const TQString &);
00231
00236 void slotGetNextHdr();
00237 };
00238
00239 }
00240
00241
00242
00243 #endif