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.
1098 lines
33 KiB
1098 lines
33 KiB
/***************************************************************************
|
|
configelem.h - description
|
|
-------------------
|
|
begin : Tue May 9 2000
|
|
copyright : (C) 2000-2001 by Eggert Ehmke
|
|
email : eggert.ehmke@berlin.de
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef CONFIGELEM_H
|
|
#define CONFIGELEM_H
|
|
|
|
//C headers
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
//QT headers
|
|
#include <ntqstring.h>
|
|
#include <ntqlistview.h>
|
|
#include <ntqdom.h>
|
|
#include <ntqobject.h>
|
|
#include <ntqtimer.h>
|
|
#include <ntqregexp.h>
|
|
#include <ntqdir.h>
|
|
#include <ntqfile.h>
|
|
#include <ntqtextstream.h>
|
|
|
|
//KDE headers
|
|
#include <kurl.h>
|
|
#include <tdeconfig.h>
|
|
#include <kdebug.h>
|
|
#include <kpassdlg.h>
|
|
#include <tdeio/job.h>
|
|
#include <tdeio/global.h>
|
|
#include <tdemessagebox.h>
|
|
#include <tdeapplication.h>
|
|
|
|
//KShowmail headers
|
|
#include "showrecord.h"
|
|
#include "constants.h"
|
|
#include "types.h"
|
|
#include "configlist.h"
|
|
#include "showmaildialog.h"
|
|
#include "decodeRFC2047.h"
|
|
#include "kshowmailview.h"
|
|
#include "encryption.h"
|
|
#include "tdewalletaccess.h"
|
|
#include "headerfilter.h"
|
|
#include "filterlog.h"
|
|
|
|
|
|
|
|
using namespace Constants;
|
|
using namespace Types;
|
|
using namespace Encryption;
|
|
|
|
//forward class declarations
|
|
class KshowmailView;
|
|
class ConfigList;
|
|
class ShowRecordElem;
|
|
class ShowRecord;
|
|
|
|
/**
|
|
* @brief Represents a mail account.
|
|
*
|
|
* Contains all datas of the account like server, user password and so on.
|
|
* It also contains the mails read from the server.
|
|
* Used in class ConfigList and ConfigAccounts.
|
|
*
|
|
* @see ShowRecord
|
|
* @see ConfigList
|
|
* @see ConfigAccounts::Accounts
|
|
* @author Eggert Ehmke <eggert.ehmke@berlin.de>
|
|
* @author Ulrich Weigelt <ulrich.weigelt@gmx.de>
|
|
*/
|
|
class ConfigElem : public TQObject {
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
/**
|
|
* Returned by showSelectedHeaders(), if the user has
|
|
* clicked OK.
|
|
*/
|
|
static const int continueShowHeaders;
|
|
|
|
/**
|
|
* Returned by showSelectedHeaders(), if the user has
|
|
* clicked Cancel.
|
|
*/
|
|
static const int cancelShowHeaders;
|
|
|
|
/**
|
|
* General Constructor
|
|
* Warning: The pointer to the application configuration (ConfigList)
|
|
* will not be set.
|
|
*/
|
|
ConfigElem();
|
|
|
|
/**
|
|
* Default Constructor
|
|
* @param config pointer to the general app configuration
|
|
*/
|
|
ConfigElem ( ConfigList* config );
|
|
|
|
/**
|
|
* Copy Constructor.
|
|
* It doesn't copy the mail list but creates a new empty one.
|
|
* The pointer to the appropriate account list view item is set
|
|
* to NULL.The new account is active by default.
|
|
* @param pElem the account which will be copied
|
|
*/
|
|
ConfigElem( ConfigElem* pElem );
|
|
|
|
/**
|
|
* Constructs a account which is called like the given name.
|
|
* Creates a empty mail list. Sets the pointer to the appropriate
|
|
* account list view item to NULL. The account is deactivated by default.
|
|
* The url doesn't contain any server informations.
|
|
* @param config pointer to the general app configuration
|
|
* @param account name of the new account
|
|
*/
|
|
ConfigElem( ConfigList* config, const TQString& account );
|
|
|
|
/**
|
|
* Destructor
|
|
* Does nothing.
|
|
*/
|
|
~ConfigElem();
|
|
|
|
/**
|
|
* Returns whether the account is active.
|
|
* @return TRUE - account is active; FALSE - account is not active
|
|
*/
|
|
bool isActive() const;
|
|
|
|
/**
|
|
* Sets the account active.
|
|
* @param active TRUE - active account; FALSE - deactivate account
|
|
*/
|
|
void setActive( bool active );
|
|
|
|
/**
|
|
* Gets the account name.
|
|
* @return account name
|
|
*/
|
|
TQString getAccountName() const;
|
|
|
|
/**
|
|
* Sets the account name.
|
|
* @param name the account name
|
|
*/
|
|
void setAccountName( TQString name );
|
|
|
|
/**
|
|
* Gets the account password.
|
|
* @return password
|
|
*/
|
|
TQString getPassword() const;
|
|
|
|
/**
|
|
* Sets the account password. To save it in the configuration file
|
|
* call saveOptions().
|
|
* @param password new password
|
|
*/
|
|
void setPassword( const TQString& password );
|
|
|
|
/**
|
|
* Returns whether a password is stored.
|
|
* @return TRUE - there is password stored; FALSE - no password stored
|
|
*/
|
|
bool hasPassword() const;
|
|
|
|
/**
|
|
* Returns the url of this account.
|
|
* @return url
|
|
*/
|
|
KURL getURL() const;
|
|
|
|
/**
|
|
* Sets the pointer to the item in the account list view item.
|
|
* @see m_pViewItem
|
|
* @param item account list view item
|
|
*/
|
|
void setListViewItem( TQListViewItem* item );
|
|
|
|
/**
|
|
* Returns the pointer to the account list view item.
|
|
* @see m_pViewItem
|
|
* @return pointer to the appropriate list view item
|
|
*/
|
|
TQListViewItem* getListViewItem();
|
|
|
|
/**
|
|
* Returns TRUE, if the appropriate list view item is selected.
|
|
* @return TRUE - list view item is selected
|
|
* @return FALSE - list view item is not selected
|
|
*/
|
|
bool isSelected() const;
|
|
|
|
/**
|
|
* Clears the mail list or creates a new one.
|
|
*/
|
|
void clearMailList();
|
|
|
|
/**
|
|
* Sets the host name.
|
|
* @param host host name
|
|
*/
|
|
void setHost( const TQString& host );
|
|
|
|
/**
|
|
* Returns the hostname.
|
|
* @return the name of the host or TQString::null if no host is set
|
|
*/
|
|
TQString getHost() const;
|
|
|
|
/**
|
|
* Sets the protocol.
|
|
* @param protocol the protocol
|
|
*/
|
|
void setProtocol( const TQString& protocol );
|
|
|
|
/**
|
|
* Returns the protocol.
|
|
* @param upperCase TRUE - transforms the protocol string to upper case
|
|
* @return protocol
|
|
*/
|
|
TQString getProtocol( bool upperCase = false ) const;
|
|
|
|
/**
|
|
* Enable or disable TLS.
|
|
* @param tls TRUE: use TLS; FALSE: don't use TLS
|
|
*/
|
|
void setTLS( bool tls );
|
|
|
|
/**
|
|
* Returns whether TLS is enabled.
|
|
* @return TRUE: TLS is enabled
|
|
* @return FALSE: TLS is disabled
|
|
*/
|
|
bool getTLS() const;
|
|
|
|
/**
|
|
* Sets the port.
|
|
* @param port the port
|
|
*/
|
|
void setPort( unsigned short int port );
|
|
|
|
/**
|
|
* Returns the port number.
|
|
* @return port number
|
|
*/
|
|
unsigned short int getPort() const;
|
|
|
|
/**
|
|
* Sets the user.
|
|
* @param user username
|
|
*/
|
|
void setUser( const TQString& user );
|
|
|
|
/**
|
|
* Returns the user name.
|
|
* @return the user name or TQString::null if there is no user name
|
|
*/
|
|
TQString getUser() const;
|
|
|
|
/**
|
|
* Sets the password storage type.
|
|
* The Constants are defined in constants.h
|
|
* @param storage type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET
|
|
*/
|
|
void setPasswordStorage( int storage );
|
|
|
|
/**
|
|
* Returns the password storage type.
|
|
* The Constants are defined in constants.h.
|
|
* @return type of password storage; valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET
|
|
*/
|
|
int getPasswordStorage() const;
|
|
|
|
|
|
/**
|
|
* Saves the stored mails into the given
|
|
* DOM document. It doesn't create a new DOM element but used the given one.
|
|
* Saves the setup into the application config.
|
|
* @param doc DOM document which contains all application settings, mails and account settings
|
|
* @param parent DOM element in which all settings and mails of this account will be saved
|
|
*/
|
|
void saveOptions( TQDomDocument& doc, TQDomElement& parent );
|
|
|
|
/**
|
|
* Gets the stored mails.
|
|
* @param parent DOM element which contains the mails of this account
|
|
*/
|
|
void readStoredMails( TQDomElement& parent );
|
|
|
|
/**
|
|
* Returns the number of stored mails.
|
|
* @return number of mails
|
|
*/
|
|
int count();
|
|
|
|
/**
|
|
* Deletes all selected mails.
|
|
* This just starts the deletion and returns after then.
|
|
* When the deletion is ready the signal sigDeleteReady will be emitted.
|
|
*/
|
|
void deleteSelectedMails();
|
|
|
|
/**
|
|
* Downloads and shows the bodies of all selected mails.
|
|
* This just starts the download and returns after then.
|
|
* When the download is ready and the body is shown the sigShowBodiesReady
|
|
* will be emitted.
|
|
*/
|
|
void showSelectedMails();
|
|
|
|
/**
|
|
* Opens a dialog to ask for a password, stores it temporarily in the account settings and
|
|
* emits the signal sigConfigChanged.
|
|
* Does not open a dialog if a password is already stored in the account settings.
|
|
* @param force ask for a new password even if a password is stored
|
|
* @return TRUE - a password is available
|
|
* @return FALSE - no password is available
|
|
*/
|
|
bool assertPassword( bool force = false );
|
|
|
|
/**
|
|
* Returns the state of the account.
|
|
* @return account state
|
|
*/
|
|
Types::AccountState_Type getState();
|
|
|
|
/**
|
|
* Returns the subjects of the selected mails.
|
|
* @return subjects of selected mails
|
|
*/
|
|
TQStringList getSelectedSubjects() const;
|
|
|
|
/**
|
|
* Returns whether there are mails in the list that are selected
|
|
* in the list view.
|
|
* @return TRUE - there are selected mails
|
|
* @return FALSE - there aren't selected mails
|
|
*/
|
|
bool hasSelectedMails();
|
|
|
|
/**
|
|
* Refreshes the mail list.
|
|
* This just starts the refresh and returns after then.
|
|
* When the refresh is ready, the signal sigRefreshReady
|
|
* will be emitted.
|
|
* @param log Pointer to the filter log
|
|
* @see sigRefreshReady
|
|
*/
|
|
void refreshMailList( FilterLog* log = NULL );
|
|
|
|
/**
|
|
* Returns the number of new mails.
|
|
* @return number of new mails
|
|
*/
|
|
int getNumberNewMails();
|
|
|
|
/**
|
|
* Returns the number of mails.
|
|
* @return number of mails
|
|
*/
|
|
int getNumberMails();
|
|
|
|
/**
|
|
* Returns the total size of all mails.
|
|
* @return total size
|
|
*/
|
|
long getTotalSize();
|
|
|
|
/**
|
|
* Creates for every mail a list view item and insert it
|
|
* into the mail list view.
|
|
* @param view pointer to the application view
|
|
*/
|
|
void fillMailListView( KshowmailView* view );
|
|
|
|
/**
|
|
* Refreshes the appropriate entry of the account list
|
|
* (number of mails and total size)
|
|
* Uses the pointer to the list view item stored in m_pViewItem.
|
|
*/
|
|
void refreshAccountListItem();
|
|
|
|
/**
|
|
* Kills a running pop3 job.
|
|
*/
|
|
void killPOP3Job();
|
|
|
|
/**
|
|
* Shows the headers of all selected mails.
|
|
* @return continueShowHeaders - the user has clicked OK. The invoking function will show the next header
|
|
* @return cancelShowHeaders - the user has clicked Cancel. The invoking function will not show the next header.
|
|
* @return continueShowHeaders - no mails of this account are selected
|
|
*/
|
|
int showSelectedHeaders();
|
|
|
|
/**
|
|
* Prints the setup to stdout.
|
|
*/
|
|
void printSetup() const;
|
|
|
|
/**
|
|
* Reloads the settings of the filters.
|
|
* It just calls the load() methode of the header filter.
|
|
*/
|
|
void reloadFilterSettings();
|
|
|
|
/**
|
|
* Returns the number of deleted mails by last refresh.
|
|
* @return number of deleted mails by last refresh
|
|
*/
|
|
int numberDeletedMailsLastRefresh();
|
|
|
|
/**
|
|
* Returns the number of deleted mails since start.
|
|
* @return number of deleted mails since start
|
|
*/
|
|
int numberDeletedMailsStart();
|
|
|
|
/**
|
|
* Returns the number of moved mails by last refresh.
|
|
* @return number of moved mails by last refresh
|
|
*/
|
|
int numberMovedMailsLastRefresh();
|
|
|
|
/**
|
|
* Returns the number of moved mails since start.
|
|
* @return number of moved mails since start
|
|
*/
|
|
int numberMovedMailsStart();
|
|
|
|
/**
|
|
* Returns the number of ignored mails by last refresh.
|
|
* @return number of ignored mails by last refresh
|
|
*/
|
|
int numberIgnoredMails();
|
|
|
|
/**
|
|
* Returns the senders of the selected mails
|
|
* @return senders of the selected mails
|
|
*/
|
|
TQStringList getSelectedSenders() const;
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
* Pointer to the configuration of the application.
|
|
* Set by the constructors.
|
|
*/
|
|
ConfigList* appConfig;
|
|
|
|
/**
|
|
* Pointer to the filter log.
|
|
* Will be set by refreshMailList() at every refresh.
|
|
*/
|
|
FilterLog* FLog;
|
|
|
|
/**
|
|
* State of the account.
|
|
*/
|
|
Types::AccountState_Type state;
|
|
|
|
/**
|
|
* Type of password storage.
|
|
* valid values are: CONFIG_VALUE_ACCOUNT_PASSWORD_DONT_SAVE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_FILE, CONFIG_VALUE_ACCOUNT_PASSWORD_SAVE_TDEWALLET
|
|
* The Constants are defined in constants.h
|
|
* @see saveOptions()
|
|
* @see setPasswordStorage()
|
|
*/
|
|
int PasswordStorage;
|
|
|
|
/**
|
|
* TRUE - account is active; FALSE - account is not active
|
|
*/
|
|
bool m_bActive;
|
|
|
|
/**
|
|
* Account Name
|
|
*/
|
|
TQString m_strAccount;
|
|
|
|
/**
|
|
* Pointer to the appropriate item in the account list view.
|
|
*/
|
|
TQListViewItem* m_pViewItem;
|
|
|
|
/**
|
|
* List which contains all read mails from the server.
|
|
*/
|
|
ShowRecord* m_pshowrecord;
|
|
|
|
/**
|
|
* Uniform Resource Locator of the account on the pop3 server.
|
|
*/
|
|
KURL m_url;
|
|
|
|
/**
|
|
* Type of secure login.
|
|
* See constants.h for valid values (CONFIG_VALUE_ACCOUNT_SECLOGIN_...)
|
|
*/
|
|
int secureLoginType;
|
|
|
|
/**
|
|
* False: TLS is enabled
|
|
*/
|
|
bool useTLS;
|
|
|
|
/**
|
|
* Contains a downloaded mail body.
|
|
* Will be set by slotDataMailBody() and read by slotBodyDownloaded().
|
|
*/
|
|
TQByteArray mailbody;
|
|
|
|
/**
|
|
* Contains the numbers of mails which will be deleted.
|
|
* Set by deleteSelectedMails() and applyFilters() and used by deleteNextMail() to get
|
|
* the number of the next mail to delete.
|
|
* @see deleteSelectedMails()
|
|
* @see deleteNextMail()
|
|
* @see applyFilters()
|
|
*/
|
|
MailNumberList_Type MailsToDelete;
|
|
|
|
/**
|
|
* Contains the numbers of the mails shall be moved for actions like moving to mailbox or spam check.
|
|
* Contains also some parameters (like mailbox) about the action which have to be performed.
|
|
* Set and used by applyFilters().
|
|
* @see applyFilters()
|
|
*/
|
|
MailToDownloadMap_Type MailsToDownload;
|
|
|
|
/**
|
|
* Contains the numbers of mails for which the bodies will be shown.
|
|
* Set by showSelectedMails() and used by showNextMail() to get
|
|
* the number of the next mail to show.
|
|
* @see showSelectedMails()
|
|
* @see showNextMail()
|
|
*/
|
|
MailNumberList_Type MailsToShow;
|
|
|
|
/**
|
|
* Contains the numbers of new mails.
|
|
* Set by getHeaders() and used by getNextHeader() to download
|
|
* the headers of the new mails.
|
|
* @see getHeaders()
|
|
* @see getNextHeader()
|
|
*/
|
|
MailNumberList_Type newMails;
|
|
|
|
/**
|
|
* Pointer to a launched pop3 job.
|
|
*/
|
|
TDEIO::TransferJob* pop3Job;
|
|
|
|
/**
|
|
* timeout timer. Will be started together with every pop3 job.
|
|
* If it runs down, slotTimeout() will be invoked.
|
|
*/
|
|
TQTimer* pop3Timer;
|
|
|
|
/**
|
|
* While refreshing, this ShowRecord instance will be used to
|
|
* build a new mail list. After that this pointer will be assigned
|
|
* to m_pshowrecord.
|
|
*/
|
|
ShowRecord* tempMailList;
|
|
|
|
/**
|
|
* List of received mail UIDs (unique ID).
|
|
* Used by slotReceiveUID() and slotUIDsReceived().
|
|
*/
|
|
TQStringList receivedUIDs;
|
|
|
|
/**
|
|
* List of received mail sizes.
|
|
* Used by slotReceiveSize() and slotSizesReceived().
|
|
*/
|
|
TQStringList receivedSizes;
|
|
|
|
/**
|
|
* A received mail header.
|
|
* Set by slotReceiveHeader() and used by slotHeaderDownloaded().
|
|
*/
|
|
TQByteArray receivedHeader;
|
|
|
|
/**
|
|
* Every account has is own header filter instance.
|
|
*/
|
|
HeaderFilter headerFilter;
|
|
|
|
/**
|
|
* This is a flag whether the filters was applied during a refresh cycle.
|
|
* If the some mails was deleted (recommend by the filter), we need a actual
|
|
* list of mails from the server. Therefore a second refresh cycle will be started.
|
|
* To avoid a never-ending loop this flag will be set to TRUE by applyFilters().
|
|
* If the second refresh is running this one will not invoke the filters.
|
|
*/
|
|
bool filterApplied;
|
|
|
|
/**
|
|
* This flag is set by applyFilters() to indicate the deletion cycle is performed by filters and not by user.
|
|
* The deletion methodes need it to decide on branch targets
|
|
*/
|
|
bool deletionPerformedByFilters;
|
|
|
|
/**
|
|
* This flag is set by applyFiltersDeleted() to indicate the refresh cycle is the second one after a deletion which was performed by filters.
|
|
* The refresh cycle need it to hold the remaining mails as new.
|
|
*/
|
|
bool refreshPerformedByFilters;
|
|
|
|
/**
|
|
* This flag is set to TRUE by applyFilters() to indicate the mailbodies are downloading and writing to the mailboxes or spam checking.
|
|
* When this is ended, applyFilters() will be called again and it reset this flag
|
|
*/
|
|
bool downloadActionsInvoked;
|
|
|
|
/**
|
|
* Counter for moving to create an unique file name
|
|
*/
|
|
int moveCounter;
|
|
|
|
/**
|
|
* Number of deleted mails by last refresh.
|
|
*/
|
|
int nmbDeletedMailsLastRefresh;
|
|
|
|
/**
|
|
* Number of deleted mails since start.
|
|
*/
|
|
int nmbDeletedMailsLastStart;
|
|
|
|
/**
|
|
* Number of moved mails by last refresh.
|
|
*/
|
|
int nmbMovedMailsLastRefresh;
|
|
|
|
/**
|
|
* Number of moved mails since start.
|
|
*/
|
|
int nmbMovedMailsLastStart;
|
|
|
|
/**
|
|
* Number of ignored mails by last refresh.
|
|
*/
|
|
int nmbIgnoredMails;
|
|
|
|
/**
|
|
* Initializes the account.
|
|
*/
|
|
void init();
|
|
|
|
/**
|
|
* Deletes the first mail of MailsToDelete.
|
|
* After a succesful deletion this mail will be removed from the list
|
|
* by slotMailDeleted() and this method will be invoked again.
|
|
* If the list is empty, it will call commitDelete.
|
|
* @see slotMailDeleted()
|
|
* @see MailsToDelete
|
|
*/
|
|
void deleteNextMail();
|
|
|
|
/**
|
|
* Commits the deletion.
|
|
* Starts a pop3 job that will do the commit. Its signal
|
|
* result is connected with slotFinalizeDeletion().
|
|
* @see slotFinalizeDeletion()
|
|
*/
|
|
void commitDeletion();
|
|
|
|
/**
|
|
* Shows the body of the first mail in MailsToShow.
|
|
* After a succesful download and opening of the window this
|
|
* mail will be removed from the list by slotBodyDownloaded() and this
|
|
* method will be invoked again.
|
|
* If the list is empty, it will call commitDownloading().
|
|
* @see commitDownloading()
|
|
* @see slotBodyDownloaded()
|
|
*/
|
|
void showNextMail();
|
|
|
|
/**
|
|
* Commits the downloading of mail bodies.
|
|
* Starts a pop3 job that will do the commit. Its signal
|
|
* result is connected with slotFinalizeShowMail().
|
|
* @see slotFinalizeShowMail()
|
|
*/
|
|
void commitDownloading();
|
|
|
|
/**
|
|
* Creates a POP3 transfer job (TDEIO Job), which will be stored in pop3Job.
|
|
* @param path command and parameters of the job as URL path
|
|
*/
|
|
void startKIOJob( const TQString& path );
|
|
|
|
/**
|
|
* Returns the timeout time in seconds which is stored in the
|
|
* general configuration of the application.
|
|
* Returns POP3_DEFAULT_TIMEOUT_TIME (defined in constants.h),
|
|
* if no time is available.
|
|
* Returns POP3_MINIMUM_TIMEOUT_TIME (defined in constants.h),
|
|
* if the get time is less than POP3_MINIMUM_TIMEOUT_TIME.
|
|
* @return seconds to timeout
|
|
*/
|
|
unsigned int getTimeoutTime();
|
|
|
|
/**
|
|
* First step of the refresh cycle.
|
|
* Gets the UIDs of the available mails from the server.
|
|
* It starts a TDEIO job to get the UIDs. The UIDs will be stored
|
|
* in receivedUIDs by slotReceiveUID().
|
|
* When the job is ready, it will invoke slotUIDsReceived().
|
|
*/
|
|
void getUIDs();
|
|
|
|
/**
|
|
* Second step of the refresh cycle.
|
|
* Gets the sizes of the available mails from the server.
|
|
* It starts a TDEIO job to get these. The Sizes will be temporarily
|
|
* stored in receivedSizes by slotReceiveSize().
|
|
* When the job is ready, it will invoke slotSizesReceived().
|
|
*/
|
|
void getSizes();
|
|
|
|
/**
|
|
* Third step of the refresh cycle.
|
|
* Gets the header of the new mails from the server.
|
|
*/
|
|
void getHeaders();
|
|
|
|
/**
|
|
* Get the header of the first mail in newMails.
|
|
* After a succesful download this
|
|
* mail will be removed from the list by slotHeaderDownloaded() and this
|
|
* method will be invoked again.
|
|
* If the list is empty, it will call copyHeaders() to get the known
|
|
* headers from the old mail list (m_pshowrecord).
|
|
* @see copyHeaders()
|
|
* @see slotHeaderDownloaded()
|
|
*/
|
|
void getNextHeader();
|
|
|
|
/**
|
|
* Fourth step of the refresh cycle.
|
|
* Copies the known headers of the old mails from the
|
|
* old mail list to the new one.
|
|
* At the end it invokes swapMailLists().
|
|
*/
|
|
void copyHeaders();
|
|
|
|
/**
|
|
* Sixth step of the refresh cycle.
|
|
* Applies the filters to the mails in the mail list.
|
|
* Invoked by swapMailLists().
|
|
* This methode maybe starts a new refresh cycle because after a deletion or moving we need a
|
|
* actual list of mails on the server.
|
|
* To avoid a never-ending loop you must not call this methode during the second refresh cycle.
|
|
* Therefore it sets filterApplied to TRUE.
|
|
* @see filterApplied
|
|
* @see applyFiltersDeleted()
|
|
*/
|
|
void applyFilters();
|
|
|
|
/**
|
|
* If there are mails to delete by filters applyFilters will call the regular deletion cycle of this class with set byFilter-flag.
|
|
* Therefore the deletion will not branch to commitDeletion() but to this methode.
|
|
* This performs a second refresh cycle to get an effective mail list from the server.
|
|
* This new cycle will not apply the filters again, because the flag filterApplied is set to TRUE.
|
|
* @see applyFilters()
|
|
* @see filterApplied
|
|
*/
|
|
void applyFiltersDeleted();
|
|
|
|
/**
|
|
* Cancels the refresh. Will be invoked, when a pop3 job has
|
|
* reported an error.
|
|
*/
|
|
void cancelRefresh();
|
|
|
|
/**
|
|
* Commits the refresh.
|
|
* Starts a pop3 job that will do the commit. Its signal
|
|
* result is connected with slotFinalizeRefresh().
|
|
* Invoked by copyHeaders() if the filters was applied or applyFilters()
|
|
* if not second refresh was necessary.
|
|
* @see slotFinalizeRefresh()
|
|
* @see applyFilters()
|
|
*/
|
|
void commitRefresh();
|
|
|
|
/**
|
|
* Send a commit and restart the refresh cycle
|
|
* We restart the refresh to get a fresh maillist after a deletion performed by the filter.
|
|
* We need a commit before because the mails server only after a commit reorders the mail numbers
|
|
*/
|
|
void commitBeforeRefresh();
|
|
|
|
/**
|
|
* Fifth step of the refresh cycle.
|
|
* Copies the pointer to the temporary list to m_pshowrecord.
|
|
* Invoked by copyHeaders() and slotUIDsReceived().
|
|
* The temporary list will be the current mail list.
|
|
* At the end it invokes commitRefresh() if the filters were applied
|
|
* (filterApplied == TRUE) or deactive or it invokes
|
|
* applyFilters() if the filters were not
|
|
* applied (filterApplied == FALSE).
|
|
* @see m_pshowrecord
|
|
* @see copyHeaders()
|
|
* @see slotUIDsReceived()
|
|
* @see commitRefresh()
|
|
* @see filterApplied
|
|
*/
|
|
void swapMailLists();
|
|
|
|
/**
|
|
* Does all filter actions for which we have to download the mails
|
|
* These are:
|
|
* Moving, spam check
|
|
* It doesn't removes they from the server.
|
|
*/
|
|
void doDownloadActions();
|
|
|
|
/**
|
|
* Gets the body of the first mail in MailsToDownload.
|
|
* After a succesful download and writing into the mailbox this
|
|
* mail will be removed from the list by slotMailDownloadedforDownloadActions() and this
|
|
* method will be invoked again.
|
|
* If the list is empty, it will call applyFilters() to continue the filtering.
|
|
* @see applyFilters()
|
|
* @see slotMailDownloadedforDownloadActions()
|
|
*/
|
|
void getNextMailForDownloadActions();
|
|
|
|
/**
|
|
* Returns whether the given directory is a maildir directory
|
|
* @param path the directory for test
|
|
* @return TRUE - directory is a maildir directory
|
|
*/
|
|
bool isMailDir( const TQDir& path );
|
|
|
|
/**
|
|
* Writes the given mail into the mailbox.
|
|
* @param mail the Mail
|
|
* @param box path to the mailbox
|
|
* @return TRUE - Writing was succesful
|
|
*/
|
|
bool writeToMailBox( const TQString& mail, const TQString& box );
|
|
|
|
private slots:
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job.
|
|
* Removes the deleted mail from the internal mail list (m_pshowrecord).
|
|
* Removes the first mail from MailsToDelete and invokes
|
|
* deleteNextMail() again to delete the next mail.
|
|
* If the list is empty after it has removed the first item, it will call
|
|
* commitDelete().
|
|
* If an error is occured, it will call slotFinalizeDeletion().
|
|
* @param job job which has emit the result signal
|
|
* @see deleteNextMail()
|
|
* @see MailsToDelete
|
|
* @see pop3Job
|
|
* @see slotFinalizeDeletion()
|
|
*/
|
|
void slotMailDeleted( TDEIO::Job* job );
|
|
|
|
/**
|
|
* Connected with the signal result of the job which commits the deletion.
|
|
* Finalizes the deletion of mails.
|
|
* Emits signal sigDeleteReady.
|
|
* @see deleteNextMail()
|
|
* @see slotMailDeleted()
|
|
* @see sigDeleteReady
|
|
*/
|
|
void slotFinalizeDeletion( TDEIO::Job* );
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job to
|
|
* download a mail body.
|
|
* Opens a window (class ShowMailDialog) with the downloaded mail body.
|
|
* Removes the first mail from MailsToShow and invokes showNextMail()
|
|
* again to show the next mail.
|
|
* If the list is empty after it has removed the first item, it will call
|
|
* commitDownloading().
|
|
* If an error is occured, it will call slotFinalizeShowMail().
|
|
* @param job job which has emit the result signal
|
|
* @see showNextMail()
|
|
* @see commitDownloading()
|
|
* @see MailsToShow
|
|
* @see pop3Job
|
|
* @see slotFinalizeShowMail()
|
|
* @see ShowMailDialog
|
|
*/
|
|
void slotBodyDownloaded( TDEIO::Job* job );
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job to
|
|
* download a mail to write it into a mailbox or do a spam check.
|
|
* Maybe it puts the number of the downloaded mail into the list of mails to delete (MailsToDelete).
|
|
* Removes the first mail from MailsToMove and invokes getNextMailForMove()
|
|
* again to get and write the next mail.
|
|
* If the list is empty after it has removed the first item, it will call
|
|
* applyFilters() to continue the filtering.
|
|
* If an error is occured the current mail will not put into MailsToDelete. And it returns
|
|
* to applyFilters() immediately.
|
|
* @param job job which has emit the result signal
|
|
* @see MailsToDownload
|
|
* @see getNextMailForDownloadActions()
|
|
* @see applyFilters()
|
|
*/
|
|
void slotMailDownloadedForAction( TDEIO::Job* job );
|
|
|
|
/**
|
|
* Connected with signal data of the launched pop3 job to
|
|
* download a mail body.
|
|
* Receives the downloaded data from the job. This lot will be called
|
|
* several times during the donwload. At the last one the array is empty.
|
|
* It extracts the body from the downloaded data and stores it in DownloadedMailBody.
|
|
* @param datas the downloaded mail
|
|
*/
|
|
void slotDataMailBody( TDEIO::Job*, const TQByteArray & datas );
|
|
|
|
/**
|
|
* Connected with the signal result of the job which commits the download
|
|
* of the mail bodies.
|
|
* Finalizes the downloading and showing of the selected mails.
|
|
* Emits signal sigShowBodiesReady and sets account state to idle.
|
|
* @see showNextMail()
|
|
* @see slotBodyDownloaded()
|
|
* @see sigShowBodiesReady
|
|
*/
|
|
void slotFinalizeShowMail( TDEIO::Job* );
|
|
|
|
/**
|
|
* Connected with signal timeout() of the timeout timer pop3Timer.
|
|
* Will be called when the timer is run down, if the pop3 job
|
|
* has not ended on time.
|
|
* It kills a running pop3 job and invokes the appropriate finalize slot
|
|
* of the running operation.
|
|
*/
|
|
void slotTimeout();
|
|
|
|
/**
|
|
* Connected with the signal "data" of the pop3 transfer job which gets mail
|
|
* UIDs (Unique ID). Therefore it will be called when the job has received
|
|
* an UIDL from the server. Every received UID causes a call of this slot.
|
|
* When the job ends, it causes a last call but with an empty data array.
|
|
* The UIDs will be stored in receivedUIDs.
|
|
* @param data received data, which contain an uid
|
|
*/
|
|
void slotReceiveUID( TDEIO::Job*, const TQByteArray& data );
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job to get the UIDs.
|
|
* Will be invoked, when all UIDs are received and stored in receivedUIDs.
|
|
* Analyzes the received UID datas and creates new ShowRecordElem instances
|
|
* in the new mail list accordingly.
|
|
* @param job job which has emitted the result signal
|
|
*/
|
|
void slotUIDsReceived( TDEIO::Job* job );
|
|
|
|
/**
|
|
* Connected with the signal "data" of the pop3 transfer job which gets mail
|
|
* Sizes. Therefore it will be called when the job has received
|
|
* a size from the server. Every received size causes a call of this slot.
|
|
* When the job ends, it causes a last call but with an empty data array.
|
|
* The UIDs will be stored in receivedSizes.
|
|
* @param data received data, which contain a size
|
|
*/
|
|
void slotReceiveSize( TDEIO::Job*, const TQByteArray& data );
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job to get the Sizes.
|
|
* Will be invoked, when all Sizes are received and stored in receivedSizes.
|
|
* Analyzes the received datas and writes these in the appropriate mail instances.
|
|
* @param job job which has emitted the result signal
|
|
*/
|
|
void slotSizesReceived( TDEIO::Job* job );
|
|
|
|
|
|
/**
|
|
* Connected with signal result of the job which commits the refresh.
|
|
* Finalizes a succesful refresh.
|
|
* Emits sigRefreshReady and sets account state to idle
|
|
*/
|
|
void slotFinalizeRefresh( TDEIO::Job* );
|
|
|
|
/**
|
|
* Connected with signal result of the launched pop3 job.
|
|
* Stores the received headers into the appropriate instance of the mail list.
|
|
* Removes the first mail from newMails and invokes
|
|
* getNextHeader() again to get the next header.
|
|
* If the list is empty after it has removed the first item, it will call
|
|
* copyHeaders().
|
|
* If an error has occured, it will call cancelRefresh().
|
|
* @param job job which has emit the result signal
|
|
* @see getNextHeader()
|
|
* @see newMails
|
|
* @see pop3Job
|
|
* @see cancelRefresh()
|
|
* @see copyHeaders()
|
|
*/
|
|
void slotHeaderDownloaded( TDEIO::Job* job );
|
|
|
|
/**
|
|
* Connected with the signal "data" of the pop3 transfer job which gets a mail
|
|
* header. Therefore it will be called when the job has received
|
|
* a part of the header from the server.
|
|
* When the job ends, it causes a last call but with an empty data array.
|
|
* The complete header will be stored in receivedHeader.
|
|
* @param data received data, which contains a header part
|
|
*/
|
|
void slotReceiveHeader( TDEIO::Job*, const TQByteArray& data );
|
|
|
|
/**
|
|
* Connected with the result signal of the pop3 job launched by commitBeforeRefresh()
|
|
* Restarts a second refresh cycle after a deletion performed by the filter.
|
|
* @see commitBeforeRefresh
|
|
* @see applyFiltersDeleted
|
|
*/
|
|
void slotCommitBeforeRefreshDone( TDEIO::Job* );
|
|
|
|
|
|
signals:
|
|
|
|
/**
|
|
* Will be emitted when all selected mails are deleted.
|
|
* @param account name of the account, which has emitted this signal
|
|
*/
|
|
void sigDeleteReady( TQString account );
|
|
|
|
/**
|
|
* Will be emitted when the bodies of all selected mails are
|
|
* downloaded and shown.
|
|
* @param account name of the account, which has emitted this signal
|
|
*/
|
|
void sigShowBodiesReady( TQString account );
|
|
|
|
/**
|
|
* Will be emitted when the settings have been changed.
|
|
*/
|
|
void sigConfigChanged();
|
|
|
|
/**
|
|
* Will be emitted, when a window to show a message was opened.
|
|
*/
|
|
void sigMessageWindowOpened();
|
|
|
|
/**
|
|
* Will be emitted, when a window to show a message was closed.
|
|
*/
|
|
void sigMessageWindowClosed();
|
|
|
|
/**
|
|
* Will be emitted, when the mail list was refreshed.
|
|
* @param account name of the account, which has emitted this signal
|
|
*/
|
|
void sigRefreshReady( TQString account );
|
|
|
|
protected:
|
|
|
|
/**
|
|
* Forwards the given mail to SpamAssassin and returns the test result
|
|
* @param mail the mail to test
|
|
* @return TRUE - mail is spam
|
|
*/
|
|
bool isSpam( TQByteArray mail ) const;
|
|
|
|
/**
|
|
* Looks for a running spamd daemon of SpamAssassin.
|
|
* @return TRUE - SpamAssassin is running
|
|
*/
|
|
bool isSpamAssassinRunning() const;
|
|
|
|
|
|
|
|
};
|
|
#endif
|