You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
5.9 KiB
216 lines
5.9 KiB
/* KMail account for experimental pop mail account |
|
* |
|
*/ |
|
#ifndef KMAcctExpPop_h |
|
#define KMAcctExpPop_h |
|
|
|
#include "kmaccount.h" |
|
#include <kapp.h> |
|
#include <qdialog.h> |
|
#include "kio/job.h" |
|
#include "kio/global.h" |
|
#include <qvaluelist.h> |
|
#include <qstringlist.h> |
|
#include <qcstring.h> |
|
#include <qtimer.h> |
|
|
|
class QLineEdit; |
|
class QPushButton; |
|
class DwPopClient; |
|
class KApplication; |
|
class DwPopClient; |
|
class KMMessage; |
|
class QTimer; |
|
class KURL::List; |
|
class QDataStream; |
|
|
|
#define KMAcctExpPopInherited KMAccount |
|
|
|
class KMAcctExpPop: public KMAccount |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
virtual ~KMAcctExpPop(); |
|
virtual void init(void); |
|
|
|
/** Pop user login name */ |
|
QString login(void) const { return mLogin; } |
|
virtual void setLogin(const QString&); |
|
|
|
/** Pop user password */ |
|
QString passwd(void) const; |
|
virtual void setPasswd(const QString&, bool storeInConfig=FALSE); |
|
|
|
/** Set the password to "" (empty string) */ |
|
virtual void clearPasswd(); |
|
|
|
/** Use SSL? */ |
|
bool useSSL(void) const { return mUseSSL; } |
|
virtual void setUseSSL(bool); |
|
|
|
/** Use TLS? */ |
|
bool useTLS(void) const { return mUseTLS; } |
|
virtual void setUseTLS(bool); |
|
|
|
/** Authentification method */ |
|
QString auth(void) const { return mAuth; } |
|
virtual void setAuth(const QString &); |
|
|
|
/** Will the password be stored in the config file ? */ |
|
bool storePasswd(void) const { return mStorePasswd; } |
|
virtual void setStorePasswd(bool); |
|
|
|
/** Pop host */ |
|
const QString& host(void) const { return mHost; } |
|
virtual void setHost(const QString&); |
|
|
|
/** Port on pop host */ |
|
unsigned short int port(void) { return mPort; } |
|
virtual void setPort(unsigned short int); |
|
|
|
/** Pop protocol: shall be 2 or 3 */ |
|
short protocol(void) { return mProtocol; } |
|
virtual bool setProtocol(short); |
|
|
|
/** Shall messages be left on the server upon retreival (TRUE) |
|
or deleted (FALSE). */ |
|
bool leaveOnServer(void) const { return mLeaveOnServer; } |
|
virtual void setLeaveOnServer(bool); |
|
|
|
/** Inherited methods. */ |
|
virtual const char* type(void) const; |
|
virtual void readConfig(KConfig&); |
|
virtual void writeConfig(KConfig&); |
|
virtual void processNewMail(bool _interactive); |
|
virtual void pseudoAssign(KMAccount*); |
|
|
|
protected: |
|
enum Stage { Idle, List, Uidl, Retr, Dele, Quit }; |
|
friend class KMAcctMgr; |
|
friend class KMPasswdDialog; |
|
KMAcctExpPop(KMAcctMgr* owner, const char* accountName); |
|
|
|
/** Very primitive en/de-cryption so that the password is not |
|
readable in the config file. But still very easy breakable. */ |
|
QString encryptStr(const QString& inStr) const; |
|
QString decryptStr(const QString& inStr) const; |
|
|
|
/** Start a KIO Job to get a list of messages on the pop server */ |
|
void startJob(); |
|
|
|
/** Connect up the standard signals/slots for the KIO Jobs */ |
|
void connectJob(); |
|
|
|
/** Get an URL for the account */ |
|
KURL getUrl(); |
|
|
|
/** Process any queued messages and save the list of seen uids |
|
for this user/server */ |
|
void processRemainingQueuedMessagesAndSaveUidList(); |
|
|
|
QString mLogin, mPasswd; |
|
QString mHost; |
|
unsigned short int mPort; |
|
short mProtocol; |
|
bool mUseSSL; |
|
bool mUseTLS; |
|
QString mAuth; |
|
bool mStorePasswd; |
|
bool mLeaveOnServer; |
|
bool gotMsgs; |
|
|
|
KIO::SimpleJob *job; |
|
KIO::Slave *slave; |
|
KIO::MetaData mSlaveConfig; |
|
QStringList idsOfMsgsPendingDownload; |
|
QValueList<int> lensOfMsgsPendingDownload; |
|
|
|
QStringList idsOfMsgs; |
|
QValueList<int> lensOfMsgs; |
|
QStringList uidsOfMsgs; |
|
QStringList uidsOfSeenMsgs; |
|
QStringList uidsOfNextSeenMsgs; |
|
KURL::List idsOfMsgsToDelete; |
|
int indexOfCurrentMsg; |
|
|
|
QValueList<KMMessage*> msgsAwaitingProcessing; |
|
QStringList msgIdsAwaitingProcessing; |
|
QStringList msgUidsAwaitingProcessing; |
|
|
|
QByteArray curMsgData; |
|
QDataStream *curMsgStrm; |
|
|
|
int curMsgLen; |
|
int stage; |
|
QTimer processMsgsTimer; |
|
QTimer *ss; |
|
int processingDelay; |
|
int numMsgs, numBytes, numBytesToRead, numBytesRead, numMsgBytesRead; |
|
bool interactive; |
|
bool mProcessing; |
|
bool mUidlFinished; |
|
int dataCounter; |
|
|
|
protected slots: |
|
/** Messages are downloaded in the background and then once every x seconds |
|
a batch of messages are processed. Messages are processed in batches to |
|
reduce flicker (multiple refreshes of the qlistview of messages headers |
|
in a single second causes flicker) when using a fast pop server such as |
|
one on a lan. |
|
|
|
Processing a message means applying KMAccount::processNewMsg to it and |
|
adding its UID to the list of seen UIDs */ |
|
void slotProcessPendingMsgs(); |
|
|
|
/** If there are more messages to be downloaded then start a new kio job |
|
to get the message whose id is at the head of the queue */ |
|
void slotGetNextMsg(); |
|
|
|
/** New data has arrived append it to the end of the current message */ |
|
void slotData( KIO::Job*, const QByteArray &); |
|
|
|
/** Finished downloading the current kio job, either due to an error |
|
or because the job has been cancelled or because the complete message |
|
has been downloaded */ |
|
void slotResult( KIO::Job* ); |
|
|
|
/** Cleans up after a user cancels the current job */ |
|
void slotCancel(); |
|
|
|
/** Kills the job if still stage == List */ |
|
void slotAbortRequested(); |
|
|
|
/* Called when a job is finished. Basically a finite state machine for |
|
cycling through the Idle, List, Uidl, Retr, Quit stages */ |
|
void slotJobFinished(); |
|
|
|
/** Slave error handling */ |
|
void slotSlaveError(KIO::Slave *, int, const QString &); |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
class KMExpPasswdDialog : public QDialog |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
KMExpPasswdDialog(QWidget *parent = 0,const char *name= 0, |
|
KMAcctExpPop *act=0, const QString &caption=QString::null, |
|
const QString &login=QString::null, |
|
const QString &passwd=QString::null); |
|
|
|
private: |
|
QLineEdit *usernameLEdit; |
|
QLineEdit *passwdLEdit; |
|
QPushButton *ok; |
|
QPushButton *cancel; |
|
KMAcctExpPop *act; |
|
|
|
private slots: |
|
void slotOkPressed(); |
|
void slotCancelPressed(); |
|
|
|
}; |
|
#endif /*KMAcctExpPop_h*/
|
|
|