From 7cdddbb8a39ddab31f743727c9c8ef2c7a6e8d0d Mon Sep 17 00:00:00 2001 From: Don Sanders Date: Fri, 27 Dec 2002 17:49:23 +0000 Subject: [PATCH] [KROUPWARE MERGE] Sieve vacation support svn path=/trunk/kdenetwork/kmail/; revision=196030 --- Makefile.am | 1 + accountdialog.cpp | 16 +++++++++++++++- accountdialog.h | 4 ++++ kmacctimap.cpp | 5 +++++ kmacctimap.h | 7 +++++++ kmmainwidget.cpp | 27 +++++++++++++++++++++++++++ kmmainwidget.h | 8 ++++++++ kmmainwin.rc | 4 +++- 8 files changed, 70 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index adc7b03a3..ca3672d30 100644 --- a/Makefile.am +++ b/Makefile.am @@ -52,6 +52,7 @@ libkmailpart_la_SOURCES = kmmessage.cpp kmmainwin.cpp configuredialog.cpp \ kmkernel.cpp kmailpartIface.skel kmailIface.skel main.cpp \ accountdialog.cpp kmfldsearch.cpp \ kmdisplayvcard.cpp vcard.cpp \ + vacationdialog.cpp vacation.cpp sieveconfig.cpp sievejob.cpp \ kmpopheaders.cpp kmpopfiltercnfrmdlg.cpp \ directoryservicesconfigurationdialogimpl.cpp \ adddirectoryservicedialog.ui \ diff --git a/accountdialog.cpp b/accountdialog.cpp index 16cae7d84..640d466b8 100644 --- a/accountdialog.cpp +++ b/accountdialog.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -42,6 +43,9 @@ #include #include "accountdialog.h" +#include "sieveconfig.h" +using KMail::SieveConfig; +using KMail::SieveConfigEditor; #include "kmacctmaildir.h" #include "kmacctlocal.h" #include "kmacctmgr.h" @@ -50,6 +54,8 @@ #include "kmfoldermgr.h" #include "kmservertest.h" +#include + #include "accountdialog.moc" #undef None @@ -227,7 +233,7 @@ ProcmailRCParser::expandVars(const QString &s) AccountDialog::AccountDialog( const QString & caption, KMAccount *account, QWidget *parent, const char *name, bool modal ) : KDialogBase( parent, name, modal, caption, Ok|Cancel|Help, Ok, true ), - mAccount(account) + mAccount(account), mSieveConfigEditor( 0 ) { mServerTest = 0; setHelp("receiving-mail"); @@ -771,6 +777,10 @@ void AccountDialog::makeImapAccountPage() buttonLay->addStretch(); buttonLay->addWidget( mImap.checkCapabilities ); + mSieveConfigEditor = new SieveConfigEditor( tabWidget ); + mSieveConfigEditor->layout()->setMargin( KDialog::marginHint() ); + tabWidget->addTab( mSieveConfigEditor, i18n("&Filtering") ); + connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged())); } @@ -890,6 +900,8 @@ void AccountDialog::setupSettings() else if (ai.auth() == "LOGIN") mImap.authLogin->setChecked( TRUE ); else mImap.authUser->setChecked( TRUE ); + assert( mSieveConfigEditor ); + mSieveConfigEditor->setConfig( ai.sieveConfig() ); } else if( accountType == "maildir" ) { @@ -1170,6 +1182,8 @@ void AccountDialog::saveSettings() else if (mImap.authLogin->isChecked()) epa.setAuth("LOGIN"); else epa.setAuth("*"); + assert( mSieveConfigEditor ); + epa.setSieveConfig( mSieveConfigEditor->config() ); } else if( accountType == "maildir" ) { diff --git a/accountdialog.h b/accountdialog.h index c89941b92..46fff3878 100644 --- a/accountdialog.h +++ b/accountdialog.h @@ -34,6 +34,9 @@ class KMAccount; class KMFolder; class KMServerTest; class QButtonGroup; +namespace KMail { + class SieveConfigEditor; +}; class AccountDialog : public KDialogBase { @@ -180,6 +183,7 @@ class AccountDialog : public KDialogBase QValueList > mFolderList; QStringList mFolderNames; KMServerTest *mServerTest; + KMail::SieveConfigEditor *mSieveConfigEditor; }; diff --git a/kmacctimap.cpp b/kmacctimap.cpp index 4254c89c5..26499772b 100644 --- a/kmacctimap.cpp +++ b/kmacctimap.cpp @@ -99,6 +99,7 @@ void KMAcctImap::init(void) mUseSSL = FALSE; mUseTLS = FALSE; mIdle = TRUE; + mSieveConfig = KMail::SieveConfig(); } //----------------------------------------------------------------------------- @@ -132,6 +133,7 @@ void KMAcctImap::pseudoAssign(KMAccount* account) setPasswd(acct->passwd(), acct->storePasswd()); setUseSSL(acct->useSSL()); setUseTLS(acct->useTLS()); + setSieveConfig(acct->sieveConfig()); } //----------------------------------------------------------------------------- @@ -162,6 +164,7 @@ void KMAcctImap::readConfig(KConfig& config) mOnlySubscribedFolders = config.readBoolEntry("subscribed-folders", FALSE); mUseSSL = config.readBoolEntry("use-ssl", FALSE); mUseTLS = config.readBoolEntry("use-tls", FALSE); + mSieveConfig.readConfig( config ); } @@ -185,6 +188,8 @@ void KMAcctImap::writeConfig(KConfig& config) config.writeEntry("subscribed-folders", mOnlySubscribedFolders); config.writeEntry("use-ssl", mUseSSL); config.writeEntry("use-tls", mUseTLS); + + mSieveConfig.writeConfig( config ); } diff --git a/kmacctimap.h b/kmacctimap.h index 2da74ef52..f0c732c29 100644 --- a/kmacctimap.h +++ b/kmacctimap.h @@ -23,6 +23,7 @@ #define KMAcctImap_h #include "kmaccount.h" +#include "sieveconfig.h" #include #include #include @@ -123,6 +124,11 @@ public: bool useTLS() { return mUseTLS; } virtual void setUseTLS(bool); + KMail::SieveConfig sieveConfig() const { return mSieveConfig; } + void setSieveConfig( const KMail::SieveConfig & sieve ) { + mSieveConfig = sieve; + } + /** * Inherited methods. */ @@ -236,6 +242,7 @@ protected: int mCountUnread, mCountLastUnread; int mCountRemainChecks; QPtrList > mOpenFolders; + KMail::SieveConfig mSieveConfig; protected slots: /** diff --git a/kmmainwidget.cpp b/kmmainwidget.cpp index a70665904..e5ab249cd 100644 --- a/kmmainwidget.cpp +++ b/kmmainwidget.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include @@ -66,6 +67,8 @@ #include "kmmainwidget.h" #include "kmmainwin.h" #include "kmsystemtray.h" +#include "vacation.h" +using KMail::Vacation; #include #include @@ -1299,6 +1302,26 @@ void KMMainWidget::slotApplyFilters() mHeaders->applyFiltersOnMsg(); } +//----------------------------------------------------------------------------- +void KMMainWidget::slotEditVacation() +{ + if ( mVacation ) + return; + + mVacation = new Vacation( this ); + if ( mVacation->isUsable() ) { + connect( mVacation, SIGNAL(result(bool)), mVacation, SLOT(deleteLater()) ); + } else { + QString msg = i18n("KMail's Out of Office Reply functionality relies on " + "server-side filtering. You have not yet configured an " + "IMAP server for this.\n" + "You can do this on the \"Filtering\" tab of the IMAP " + "account configuration."); + KMessageBox::sorry( this, msg, i18n("No Server-Side Filtering Configured") ); + + delete mVacation; // QGuardedPtr sets itself to 0! + } +} //----------------------------------------------------------------------------- void KMMainWidget::slotCopyMsg() @@ -1909,6 +1932,10 @@ void KMMainWidget::setupActions() (void) new KAction( i18n("&Import..."), "fileopen", 0, this, SLOT(slotImport()), mActionCollection, "import" ); + (void) new KAction( i18n("Edit \"Out of Office\" Replies..."), + "configure", 0, this, SLOT(slotEditVacation()), + mActionCollection, "tools_edit_vacation" ); + //----- Edit Menu trashAction = new KAction( KGuiItem( i18n("&Move to Trash"), "edittrash", i18n("Move message to trashcan") ), diff --git a/kmmainwidget.h b/kmmainwidget.h index 4295aceb2..035086f90 100644 --- a/kmmainwidget.h +++ b/kmmainwidget.h @@ -34,12 +34,18 @@ class KRadioAction; class KProgressDialog; template class QValueList; template class QMap; +template class QGuardedPtr; + namespace KIO { class Job; } +namespace KMail { + class Vacation; +} + typedef QMap KMMenuToFolder; @@ -177,6 +183,7 @@ protected slots: void slotCopyMsgToFolder( KMFolder *dest); void slotCopyMsg(); void slotResendMsg(); + void slotEditVacation(); void slotApplyFilters(); void slotExpandThread(); void slotExpandAllThreads(); @@ -321,6 +328,7 @@ protected: int mCountJobs, mCountMsgs; QPtrList mSelectedMsgs; + QGuardedPtr mVacation; KActionCollection *mActionCollection; QVBoxLayout *mTopLayout; bool mDestructed; diff --git a/kmmainwin.rc b/kmmainwin.rc index 9d91627d4..abbaf4f8c 100644 --- a/kmmainwin.rc +++ b/kmmainwin.rc @@ -1,5 +1,5 @@ - + &File @@ -106,6 +106,8 @@ + +