00001
00002
#ifndef KMAcctExpPop_h
00003
#define KMAcctExpPop_h
00004
00005
#include "networkaccount.h"
00006
00007
#include <qvaluelist.h>
00008
#include <qstringlist.h>
00009
#include <qtimer.h>
00010
#include <qdict.h>
00011
00012
class KMPopHeaders;
00013
class KMMessage;
00014
class QDataStream;
00015
namespace KIO {
00016
class MetaData;
00017
class Slave;
00018
class SimpleJob;
00019
class Job;
00020 }
00021
00026 class KMAcctExpPop:
public KMail::NetworkAccount {
00027 Q_OBJECT
00028
00029
public:
00030
virtual ~
KMAcctExpPop();
00031
virtual void init(
void);
00032
00033
virtual KIO::MetaData slaveConfig()
const;
00034
00036
virtual void pseudoAssign(
const KMAccount * a );
00037
00038
virtual QString protocol()
const;
00039
virtual unsigned short int defaultPort()
const;
00040
00044 bool usePipelining(
void)
const {
return mUsePipelining; }
00045
virtual void setUsePipelining(
bool);
00046
00051 bool leaveOnServer(
void)
const {
return mLeaveOnServer; }
00052
virtual void setLeaveOnServer(
bool);
00053
00058 bool filterOnServer(
void)
const {
return mFilterOnServer; }
00059
virtual void setFilterOnServer(
bool);
00060
00065 unsigned int filterOnServerCheckSize(
void)
const {
return mFilterOnServerCheckSize; }
00066
virtual void setFilterOnServerCheckSize(
unsigned int);
00067
00071
virtual QString type(
void) const;
00072 virtual
void readConfig(KConfig&);
00073 virtual
void writeConfig(KConfig&);
00074 virtual
void processNewMail(
bool _interactive);
00075
00076 virtual
void killAllJobs(
bool disconnectSlave=false );
00077
00078 protected:
00079 enum Stage { Idle, List, Uidl, Head, Retr, Dele, Quit };
00080
friend class KMAcctMgr;
00081
friend class KMPasswdDialog;
00082
KMAcctExpPop(KMAcctMgr* owner,
const QString& accountName, uint
id);
00083
00087
void startJob();
00088
00092
void connectJob();
00093
00097
void processRemainingQueuedMessages();
00098
00102
void saveUidList();
00103
00104
bool mUsePipelining;
00105
bool mLeaveOnServer;
00106
bool gotMsgs;
00107
bool mFilterOnServer;
00108
unsigned int mFilterOnServerCheckSize;
00109
00110 KIO::SimpleJob *job;
00111
00112
QMap<QString, int> mMsgsPendingDownload;
00113
00114
QPtrList<KMPopHeaders> headersOnServer;
00115
QPtrListIterator<KMPopHeaders> headerIt;
00116
bool headers;
00117
00118
QMap<QString, bool> mHeaderDeleteUids;
00119
QMap<QString, bool> mHeaderDownUids;
00120
QMap<QString, bool> mHeaderLaterUids;
00121
00122
00123
QStringList idsOfMsgs;
00124
QValueList<int> lensOfMsgs;
00125
QMap<QString, QString> mUidForIdMap;
00126
QDict<int> mUidsOfSeenMsgsDict;
00127
QDict<int> mUidsOfNextSeenMsgsDict;
00128
QStringList idsOfMsgsToDelete;
00129
int indexOfCurrentMsg;
00130
00131
QValueList<KMMessage*> msgsAwaitingProcessing;
00132
QStringList msgIdsAwaitingProcessing;
00133
QStringList msgUidsAwaitingProcessing;
00134
00135
QByteArray curMsgData;
00136
QDataStream *curMsgStrm;
00137
00138
int curMsgLen;
00139
int stage;
00140
QTimer processMsgsTimer;
00141
int processingDelay;
00142
int numMsgs, numBytes, numBytesToRead, numBytesRead, numMsgBytesRead;
00143
bool interactive;
00144
bool mProcessing;
00145
bool mUidlFinished;
00146
int dataCounter;
00147
00148
protected slots:
00159
void slotProcessPendingMsgs();
00160
00165
void slotGetNextMsg();
00166
00171
void slotMsgRetrieved(KIO::Job*,
const QString &);
00172
00176
void slotData( KIO::Job*,
const QByteArray &);
00177
00183
void slotResult( KIO::Job* );
00184
00188
void slotCancel();
00189
00193
void slotAbortRequested();
00194
00199
void slotJobFinished();
00200
00204
void slotSlaveError(KIO::Slave *,
int,
const QString &);
00205
00210
void slotGetNextHdr();
00211 };
00212
00213
00214
00215
#endif