summaryrefslogtreecommitdiffstats
path: root/kmail/kmaccount.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmail/kmaccount.h')
-rw-r--r--kmail/kmaccount.h336
1 files changed, 336 insertions, 0 deletions
diff --git a/kmail/kmaccount.h b/kmail/kmaccount.h
new file mode 100644
index 000000000..9a896e198
--- /dev/null
+++ b/kmail/kmaccount.h
@@ -0,0 +1,336 @@
+/* -*- mode: C++ -*-
+ * kmail: KDE mail client
+ * Copyright (c) 1996-1998 Stefan Taferner <taferner@kde.org>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+#ifndef kmaccount_h
+#define kmaccount_h
+
+#include <kprocess.h>
+#include <kaccount.h>
+
+#include <qstring.h>
+#include <qguardedptr.h>
+#include <qvaluelist.h>
+#include <qmap.h>
+
+#include "kmmessage.h"
+class QTimer;
+
+class KMFolder;
+class KMAcctFolder;
+class KConfig;
+class KMFolderJob;
+class KMFolderCachedImap;
+class AccountsPageReceivingTab;
+namespace KMail {
+ class FolderJob;
+ class AccountManager;
+}
+using KMail::AccountManager;
+namespace KPIM { class ProgressItem; }
+using KMail::FolderJob;
+using KPIM::ProgressItem;
+
+class KMAccount;
+typedef QValueList< ::KMAccount* > AccountList;
+
+class KMPrecommand : public QObject
+{
+ Q_OBJECT
+
+public:
+ KMPrecommand(const QString &precommand, QObject *parent = 0);
+ virtual ~KMPrecommand();
+ bool start();
+
+protected slots:
+ void precommandExited(KProcess *);
+
+signals:
+ void finished(bool);
+
+protected:
+ KProcess mPrecommandProcess;
+ QString mPrecommand;
+};
+
+
+class KMAccount: public QObject, public KAccount
+{
+ Q_OBJECT
+ friend class KMail::AccountManager;
+ friend class ::KMail::FolderJob;
+ friend class ::AccountsPageReceivingTab; // part of the config dialog
+ friend class ::KMFolderCachedImap; /* HACK for processNewMSg() */
+
+public:
+ virtual ~KMAccount();
+
+ enum CheckStatus { CheckOK, CheckIgnored, CheckCanceled, CheckAborted,
+ CheckError };
+
+ /** The default check interval */
+ static const int DefaultCheckInterval = 5;
+
+ /**
+ * Returns type of the account
+ */
+ virtual QString type() const { return QString::null; }
+
+ /**
+ * Reimplemented, set account name
+ */
+ virtual void setName(const QString&);
+
+ /**
+ * Account name (reimpl because of ambiguous QObject::name())
+ */
+ virtual QString name() const { return KAccount::name(); }
+
+ /**
+ * Set password to "" (empty string)
+ */
+ virtual void clearPasswd();
+
+ /**
+ * Set intelligent default values to the fields of the account.
+ */
+ virtual void init();
+
+ /**
+ * A weak assignment operator
+ */
+ virtual void pseudoAssign(const KMAccount * a );
+
+ /**
+ * There can be exactly one folder that is fed by messages from an
+ * account. */
+ KMFolder* folder(void) const { return ((KMFolder*)((KMAcctFolder*)mFolder)); }
+ virtual void setFolder(KMFolder*, bool addAccount = false);
+
+ /**
+ * the id of the trash folder (if any) for this account
+ */
+ QString trash() const { return mTrash; }
+ virtual void setTrash(const QString& aTrash) { mTrash = aTrash; }
+
+ /**
+ * Process new mail for this account if one arrived. Returns TRUE if new
+ * mail has been found. Whether the mail is automatically loaded to
+ * an associated folder or not depends on the type of the account.
+ */
+ virtual void processNewMail(bool interactive) = 0;
+
+ /**
+ * Read config file entries. This method is called by the account
+ * manager when a new account is created. The config group is
+ * already properly set by the caller.
+ */
+ virtual void readConfig(KConfig& config);
+ void readTimerConfig();
+
+ /**
+ * Write all account information to given config file. The config group
+ * is already properly set by the caller.
+ */
+ virtual void writeConfig(KConfig& config);
+
+ /**
+ * Set/get interval for checking if new mail arrived (in minutes).
+ * An interval of zero (or less) disables the automatic checking.
+ */
+ virtual void setCheckInterval(int aInterval);
+ int checkInterval() const;
+
+ /**
+ * This can be used to provide a more complex calculation later if we want
+ */
+ inline int defaultCheckInterval(void) const { return DefaultCheckInterval; }
+
+ /**
+ * Deletes the set of FolderJob associated with this account.
+ */
+ void deleteFolderJobs();
+
+ /**
+ * delete jobs associated with this message
+ */
+ virtual void ignoreJobsForMessage( KMMessage* );
+ /**
+ * Set/get whether account should be part of the accounts checked
+ * with "Check Mail".
+ */
+ virtual void setCheckExclude(bool aExclude);
+ bool checkExclude(void) const { return mExclude; }
+
+ /**
+ * Pre command
+ */
+ const QString& precommand(void) const { return mPrecommand; }
+ virtual void setPrecommand(const QString &cmd) { mPrecommand = cmd; }
+
+ /**
+ * Runs the precommand. If the precommand is empty, the method
+ * will just return success and not actually do anything
+ *
+ * @return True if successful, false otherwise
+ */
+ bool runPrecommand(const QString &precommand);
+
+ /**
+ * Very primitive en/de-cryption so that the password is not
+ * readable in the config file. But still very easy breakable.
+ */
+ static QString encryptStr(const QString& inStr);
+ static QString decryptStr(const QString& inStr) { return encryptStr(inStr); }
+
+ static QString importPassword(const QString &);
+
+ /** @return whether this account has an inbox */
+ bool hasInbox() const { return mHasInbox; }
+ virtual void setHasInbox( bool has ) { mHasInbox = has; }
+
+ /**
+ * If this account is a disconnected IMAP account, invalidate it.
+ */
+ virtual void invalidateIMAPFolders();
+
+ /**
+ * Determines whether the account can be checked, currently.
+ * Reimplementations can use this to prevent mailchecks due to
+ * exceeded connection limits, or because a network link iis down.
+ * @return whether mail checks can proceed
+ */
+ virtual bool mailCheckCanProceed() const { return true; }
+
+ /**
+ * Set/Get if this account is currently checking mail
+ */
+ bool checkingMail() { return mCheckingMail; }
+ virtual void setCheckingMail( bool checking ) { mCheckingMail = checking; }
+
+ /**
+ * Call this if the newmail-check ended.
+ * @param newMail true if new mail arrived
+ * @param status the status of the mail check
+ */
+ void checkDone( bool newMail, CheckStatus status );
+
+ /**
+ * Abort all running mail checks. Used when closing the last KMMainWin.
+ * Ensure that mail check can be restarted later, e.g. if reopening a mainwindow
+ * from a composer window.
+ */
+ virtual void cancelMailCheck() {}
+
+ /**
+ * Call ->progress( int foo ) on this to update the account's progress
+ * indicators.
+ */
+ ProgressItem *mailCheckProgressItem() const {
+ return mMailCheckProgressItem;
+ }
+
+ /**
+ * Set/get identity for checking account.
+ */
+ void setIdentityId(uint identityId ) { mIdentityId = identityId; }
+ uint identityId() const{ return mIdentityId; }
+
+signals:
+ /**
+ * Emitted after the mail check is finished.
+ * @param newMail true if there was new mail
+ * @param status the status of the mail check
+ **/
+ virtual void finishedCheck( bool newMail, CheckStatus status );
+
+ /**
+ * Emitted after the mail check is finished.
+ * @param newInFolder number of new messages for each folder
+ **/
+ virtual void newMailsProcessed( const QMap<QString, int> & newInFolder );
+
+protected slots:
+ virtual void mailCheck();
+ virtual void sendReceipts();
+ virtual void precommandExited(bool);
+
+protected:
+ KMAccount( AccountManager* owner, const QString& accountName, uint id);
+
+ /**
+ * Does filtering and storing in a folder for the given message.
+ * Shall be called from within processNewMail() to process the new
+ * messages. Returns false if failed to add new message.
+ */
+ virtual bool processNewMsg(KMMessage* msg);
+
+ /**
+ * Send receipt of message back to sender (confirming
+ * delivery). Checks the config settings, calls
+ * @see KMMessage::createDeliveryReceipt and queues the resulting
+ * message in @p mReceipts.
+ */
+ virtual void sendReceipt(KMMessage* msg);
+
+ /**
+ * Install/deinstall automatic new-mail checker timer.
+ */
+ virtual void installTimer();
+ virtual void deinstallTimer();
+
+ /**
+ * Call this to increase the number of new messages in a folder for
+ * messages which are _not_ processed with processNewMsg().
+ * @param folderId the id of the folder
+ * @param num the number of new message in this folder
+ */
+ void addToNewInFolder( QString folderId, int num );
+
+protected:
+ QString mPrecommand;
+ QString mTrash;
+ AccountManager* mOwner;
+ QGuardedPtr<KMAcctFolder> mFolder;
+ QTimer *mTimer;
+ int mInterval; // this is a switch and a scalar at the same time. If it is 0,
+ // interval mail checking is turned off and the interval spinbox proposes a
+ // default value. If it is non-null, it is the count of minutes between two
+ // automated mail checks. This means that as soon as you disable interval
+ // mail checking, the value in the spin box returns to a default value.
+ bool mExclude;
+ bool mCheckingMail : 1;
+ bool mPrecommandSuccess;
+ QValueList<KMMessage*> mReceipts;
+ QPtrList<FolderJob> mJobList;
+ bool mHasInbox : 1;
+ QGuardedPtr<ProgressItem> mMailCheckProgressItem;
+ uint mIdentityId;
+private:
+ /**
+ * avoid compiler warning about hidden virtual
+ */
+ virtual void setName( const char *name ) { QObject::setName( name ); }
+
+private:
+ // for detailed (per folder) new mail notification
+ QMap<QString, int> mNewInFolder;
+};
+
+#endif /*kmaccount_h*/