[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kmail-devel
Subject:    [KROUPWARE MERGE] Sieve vacation support
From:       Marc Mutz <mutz () kde ! org>
Date:       2002-12-25 15:10:49
[Download RAW message or body]

[Attachment #2 (multipart/mixed)]


Hi!

[ If you want, I can break it up into smaller pieces. ]

This patch adds vacation editing support through Sieve. It's quite 
Kroupware-centric, but shouls work with any managesieve-capable IMAP 
server (tested with cyrus).

This patch depends on the new files sieve{config,job}.{h,cpp} and 
vacation{,dialog}.{h,cpp}, already in HEAD. Plus, you need a KIO::Slave 
for the managesieve protocol. You'll find that in 
kdenetwork/kioslaves/sieve.

The code should work with every KIO-slaved-enabled protocol, so you can 
test the code with file: URLs locally, if you like.

Marc

-- 
If privacy is outlawed, only outlaws will have privacy.
                                                    -- Phil Zimmermann

["sieve-vacation.diff" (text/x-diff)]

Index: Makefile.am
===================================================================
RCS file: /home/kde/kdenetwork/kmail/Makefile.am,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -3 -p -r1.166 -r1.167
--- Makefile.am	13 Nov 2002 14:47:31 -0000	1.166
+++ Makefile.am	27 Nov 2002 21:27:08 -0000	1.167
@@ -37,6 +37,7 @@ kmail_SOURCES = kmmessage.cpp kmmainwin.
                 kmkernel.cpp kmailIface.skel kmailIface.stub 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 adddirectoryservicedialogimpl.cpp kmmimeparttree.cpp \
Index: accountdialog.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/accountdialog.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -3 -p -r1.99 -r1.100
--- accountdialog.cpp	11 Oct 2002 22:36:18 -0000	1.99
+++ accountdialog.cpp	27 Nov 2002 21:27:09 -0000	1.100
@@ -33,6 +33,7 @@
 
 #include <kfiledialog.h>
 #include <klocale.h>
+#include <kdebug.h>
 #include <kmessagebox.h>
 #include <knuminput.h>
 #include <kseparator.h>
@@ -42,6 +43,9 @@
 #include <netinet/in.h>
 
 #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 <cassert>
+
 #include "accountdialog.moc"
 #undef None
 
@@ -227,7 +233,7 @@ ProcmailRCParser::expandVars(const QStri
 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" )
   {
Index: accountdialog.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/accountdialog.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -p -r1.32 -r1.33
--- accountdialog.h	8 Jul 2002 11:13:52 -0000	1.32
+++ accountdialog.h	27 Nov 2002 21:27:09 -0000	1.33
@@ -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<QGuardedPtr<KMFolder> > mFolderList;
     QStringList  mFolderNames;
     KMServerTest *mServerTest;
+    KMail::SieveConfigEditor *mSieveConfigEditor;
 };
 
 
Index: kmacctimap.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmacctimap.cpp,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -3 -p -r1.111 -r1.112
--- kmacctimap.cpp	7 Nov 2002 15:33:56 -0000	1.111
+++ kmacctimap.cpp	27 Nov 2002 21:27:09 -0000	1.112
@@ -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*
   setPasswd(acct->passwd(), acct->storePasswd());
   setUseSSL(acct->useSSL());
   setUseTLS(acct->useTLS());
+  setSieveConfig(acct->sieveConfig());
 }
 
 //-----------------------------------------------------------------------------
@@ -162,6 +164,7 @@ void KMAcctImap::readConfig(KConfig& con
   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& co
   config.writeEntry("subscribed-folders", mOnlySubscribedFolders);
   config.writeEntry("use-ssl", mUseSSL);
   config.writeEntry("use-tls", mUseTLS);
+
+  mSieveConfig.writeConfig( config );
 }
 
 
Index: kmacctimap.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmacctimap.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -p -r1.49 -r1.50
--- kmacctimap.h	30 Oct 2002 22:38:57 -0000	1.49
+++ kmacctimap.h	27 Nov 2002 21:27:09 -0000	1.50
@@ -23,6 +23,7 @@
 #define KMAcctImap_h
 
 #include "kmaccount.h"
+#include "sieveconfig.h"
 #include <qdialog.h>
 #include <kio/global.h>
 #include <kio/job.h>
@@ -125,6 +126,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.
    */
@@ -239,6 +245,7 @@ protected:
   int mCountUnread, mCountLastUnread;
   int mCountRemainChecks;
   QPtrList<QGuardedPtr<KMFolder> > mOpenFolders;
+  KMail::SieveConfig mSieveConfig;
 
 protected slots:
   /**
Index: kmmainwin.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmmainwin.cpp,v
retrieving revision 1.541
retrieving revision 1.542
diff -u -3 -p -r1.541 -r1.542
--- kmmainwin.cpp	13 Nov 2002 00:16:05 -0000	1.541
+++ kmmainwin.cpp	27 Nov 2002 21:27:09 -0000	1.542
@@ -15,6 +15,7 @@
 #include <qvaluelist.h>
 #include <qtextcodec.h>
 #include <qheader.h>
+#include <qguardedptr.h>
 
 #include <kopenwith.h>
 
@@ -62,6 +63,8 @@
 #include "kmacctfolder.h"
 #include "kmmimeparttree.h"
 #include "kmundostack.h"
+#include "vacation.h"
+using KMail::Vacation;
 
 #include <assert.h>
 #include <kstatusbar.h>
@@ -1417,6 +1420,24 @@ void KMMainWin::slotApplyFilters()
   mHeaders->applyFiltersOnMsg();
 }
 
+void KMMainWin::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 KMMainWin::slotCopyMsg()
@@ -2230,6 +2251,10 @@ void KMMainWin::setupMenuBar()
 
   (void) new KAction( i18n("&Import..."), "fileopen", 0, this,
 		      SLOT(slotImport()), actionCollection(), "import" );
+
+  (void) new KAction( i18n("Edit \"Out of Office\" Replies..."),
+		      "configure", 0, this, SLOT(slotEditVacation()),
+		      actionCollection(), "tools_edit_vacation" );
 
   //----- Edit Menu
   KStdAction::undo( this, SLOT(slotUndo()), actionCollection(), "edit_undo");
Index: kmmainwin.h
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmmainwin.h,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -3 -p -r1.148 -r1.149
--- kmmainwin.h	29 Oct 2002 08:35:06 -0000	1.148
+++ kmmainwin.h	27 Nov 2002 21:27:09 -0000	1.149
@@ -33,10 +33,14 @@ class KRadioAction;
 class KProgressDialog;
 template <typename T> class QValueList;
 template <typename T, typename S> class QMap;
+template <typename T> class QGuardedPtr;
 
-namespace KIO
-{
+namespace KIO {
   class Job;
+};
+
+namespace KMail {
+  class Vacation;
 }
 
 #define KMMainWinInherited KMTopLevelWidget
@@ -200,6 +204,7 @@ protected slots:
   void slotCopyMsgToFolder( KMFolder *dest);
   void slotCopyMsg();
   void slotResendMsg();
+  void slotEditVacation();
   void slotApplyFilters();
   void slotSubjectFilter();
   void slotMailingListFilter();
@@ -380,6 +385,8 @@ protected:
   int mCountJobs, mCountMsgs;
 
   QPtrList<KMMessage> mSelectedMsgs;
+
+  QGuardedPtr<KMail::Vacation> mVacation;
 
 signals:
   void messagesTransfered(bool);
Index: kmmainwin.rc
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmmainwin.rc,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -3 -p -r1.45 -r1.46
--- kmmainwin.rc	12 Oct 2002 10:12:44 -0000	1.45
+++ kmmainwin.rc	27 Nov 2002 21:27:09 -0000	1.46
@@ -1,5 +1,5 @@
 <!DOCTYPE kpartgui>
-<kpartgui version="44" name="kmmainwin" >
+<kpartgui version="45" name="kmmainwin" >
  <MenuBar>
   <Menu noMerge="1" name="file" >
    <text>&amp;File</text>
@@ -101,6 +101,8 @@
    <Separator/>
    <Action name="addressbook"/>
    <Action name="import"/>
+   <Separator/>
+   <Action name="tools_edit_vacation"/>
    <Separator/>
    <Action name="create_filter"/>
   </Menu>

[Attachment #6 (application/pgp-signature)]
_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic