Branch 'dev/sieve_kep14' - 5 commits - libksieve/ksieveui

Sandro Knauß knauss at kolabsys.com
Thu Mar 26 12:46:03 CET 2015


 libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.cpp |   25 +-
 libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.h   |    3 
 libksieve/ksieveui/managescriptsjob/parseuserscriptjob.cpp      |   12 -
 libksieve/ksieveui/managescriptsjob/parseuserscriptjob.h        |    1 
 libksieve/ksieveui/vacation/tests/main.cpp                      |    2 
 libksieve/ksieveui/vacation/vacationcheckjob.cpp                |   17 +
 libksieve/ksieveui/vacation/vacationcheckjob.h                  |    1 
 libksieve/ksieveui/vacation/vacationcreatescriptjob.cpp         |  114 +++++++---
 libksieve/ksieveui/vacation/vacationcreatescriptjob.h           |   19 +
 libksieve/ksieveui/vacation/vacationmanager.cpp                 |    3 
 10 files changed, 154 insertions(+), 43 deletions(-)

New commits:
commit 3722b09a0ab6b84ed12a850692a24480b3559823
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 12:44:55 2015 +0100

    Small cleanup in destructure.

diff --git a/libksieve/ksieveui/vacation/vacationmanager.cpp b/libksieve/ksieveui/vacation/vacationmanager.cpp
index becf6f2..32c92ea 100644
--- a/libksieve/ksieveui/vacation/vacationmanager.cpp
+++ b/libksieve/ksieveui/vacation/vacationmanager.cpp
@@ -40,7 +40,8 @@ VacationManager::VacationManager(QWidget *parent)
 
 VacationManager::~VacationManager()
 {
-    delete mCheckVacation;
+    mCheckVacation = 0;
+    mMultiImapVacationDialog = 0;
 }
 
 void VacationManager::checkVacation()


commit f88e7a91b88d32bc13bd2c28e37fa8b6406281a4
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 12:44:16 2015 +0100

    Make VacationCreateScriptJob work together with KEP:14

diff --git a/libksieve/ksieveui/vacation/vacationcreatescriptjob.cpp b/libksieve/ksieveui/vacation/vacationcreatescriptjob.cpp
index 1ccd9c1..4e76bd5 100644
--- a/libksieve/ksieveui/vacation/vacationcreatescriptjob.cpp
+++ b/libksieve/ksieveui/vacation/vacationcreatescriptjob.cpp
@@ -17,6 +17,8 @@
 
 #include "vacationcreatescriptjob.h"
 #include "vacationutils.h"
+#include <managescriptsjob/parseuserscriptjob.h>
+#include <managescriptsjob/generateglobalscriptjob.h>
 #include <kmanagesieve/sievejob.h>
 
 #include <KMessageBox>
@@ -28,22 +30,46 @@ using namespace KSieveUi;
 VacationCreateScriptJob::VacationCreateScriptJob(QObject *parent)
     : QObject(parent),
       mActivate(false),
-      mWasActive(false),
-      mSieveJob(0)
+      mScriptActive(false)
     , mKep14Support(false)
+    , mUserJobRunning(false)
+    , mScriptJobRunning(false)
+    , mSuccess(true)
+    , mSieveJob(0)
+    , mParseUserJob(0)
+    , mCreateJob(0)
 {
 
 }
 
 VacationCreateScriptJob::~VacationCreateScriptJob()
 {
+    kill();
+}
+
+void VacationCreateScriptJob::kill()
+{
+    if (mSieveJob) {
+        mSieveJob->kill();
+    }
+    mSieveJob = 0;
 
+    if (mParseUserJob) {
+        mParseUserJob->kill();
+    }
+    mParseUserJob = 0;
+
+    if (mCreateJob) {
+        mCreateJob->kill();
+    }
+    mParseUserJob = 0;
 }
 
+
 void VacationCreateScriptJob::setStatus(bool activate, bool wasActive)
 {
     mActivate = activate;
-    mWasActive = wasActive;
+    mScriptActive = wasActive;
 }
 
 void VacationCreateScriptJob::setServerName(const QString &servername)
@@ -78,14 +104,27 @@ void VacationCreateScriptJob::start()
         deleteLater();
         return;
     }
+
+    mUserJobRunning = false;
+    mScriptJobRunning = true;
     mSieveJob = KManageSieve::SieveJob::get(mUrl);
     mSieveJob->setInteractive(false);
     connect(mSieveJob, SIGNAL(gotScript(KManageSieve::SieveJob*,bool,QString,bool)),
             SLOT(slotGetScript(KManageSieve::SieveJob*,bool,QString,bool)));
+
+    if (mKep14Support && mActivate && !mScriptActive) {
+        mUserJobRunning = true;
+        KUrl url = mUrl;
+        url.setFileName(QLatin1String("USER"));
+        mParseUserJob = new ParseUserScriptJob(url, this);
+        connect(mParseUserJob, SIGNAL(finished(ParseUserScriptJob*)), SLOT(slotGotActiveScripts(ParseUserScriptJob*)));
+        mParseUserJob->start();
+    }
 }
 
 void VacationCreateScriptJob::slotGetScript(KManageSieve::SieveJob *job, bool success, const QString &oldScript, bool active)
 {
+    mSieveJob = 0;
     QString script = mScript;
     if (success || !oldScript.trimmed().isEmpty()) {
         script = VacationUtils::mergeRequireLine(oldScript, mScript);
@@ -96,37 +135,66 @@ void VacationCreateScriptJob::slotGetScript(KManageSieve::SieveJob *job, bool su
     } else {
         mSieveJob = KManageSieve::SieveJob::put( mUrl, mScript, mActivate, false );         //Never deactivate
     }
-    if ( mActivate )
-        connect( mSieveJob, SIGNAL(gotScript(KManageSieve::SieveJob*,bool,QString,bool)),
-                 SLOT(slotPutActiveResult(KManageSieve::SieveJob*,bool)) );
-    else
-        connect( mSieveJob, SIGNAL(gotScript(KManageSieve::SieveJob*,bool,QString,bool)),
-                 SLOT(slotPutInactiveResult(KManageSieve::SieveJob*,bool)) );
+    connect( mSieveJob, SIGNAL(gotScript(KManageSieve::SieveJob*,bool,QString,bool)),
+             SLOT(slotPutResult(KManageSieve::SieveJob*,bool)) );
 }
 
-
-void VacationCreateScriptJob::slotPutActiveResult( KManageSieve::SieveJob * job, bool success )
+void VacationCreateScriptJob::slotPutResult( KManageSieve::SieveJob * job, bool success )
 {
-    handlePutResult( job, success, true );
+    mSieveJob = 0;
+    mScriptJobRunning = false;
+    if (!success) {
+        mSuccess = false;
+    }
+    handleResult();
 }
 
-void VacationCreateScriptJob::slotPutInactiveResult( KManageSieve::SieveJob * job, bool success )
+void VacationCreateScriptJob::handleResult()
 {
-    handlePutResult( job, success, false );
-}
+    if (mUserJobRunning || mScriptJobRunning) {                 // Not both jobs are done
+        return;
+    }
 
-void VacationCreateScriptJob::handlePutResult( KManageSieve::SieveJob *, bool success, bool activated )
-{
-    if ( success )
-        KMessageBox::information( 0, activated
+    if ( mSuccess )
+        KMessageBox::information( 0, mActivate
                                   ? i18n("Sieve script installed successfully on the server \'%1\'.\n"
                                          "Out of Office reply is now active.", mServerName)
                                   : i18n("Sieve script installed successfully on the server \'%1\'.\n"
                                          "Out of Office reply has been deactivated.", mServerName) );
 
-    kDebug() << "( ???," << success << ", ? )";
-    mSieveJob = 0; // job deletes itself after returning from this slot!
-    Q_EMIT result( success );
-    Q_EMIT scriptActive( activated, mServerName );
+    kDebug() << "( ???," << mSuccess << ", ? )";
+    Q_EMIT result( mSuccess );
+    Q_EMIT scriptActive( mActivate, mServerName );
     deleteLater();
 }
+
+void VacationCreateScriptJob::slotGotActiveScripts(ParseUserScriptJob *job)
+{
+    mParseUserJob = 0;
+    if (!job->error().isEmpty()) {
+        slotGenerateDone(job->error());
+        return;
+    }
+
+    QStringList list = job->activeScriptList();
+
+    if (!list.contains(mUrl.fileName())) {
+        list.prepend(mUrl.fileName());
+        mCreateJob = new GenerateGlobalScriptJob(mUrl, this);
+        mCreateJob->addUserActiveScripts(list);
+        connect( mCreateJob, SIGNAL(success()), SLOT(slotGenerateDone()));
+        connect( mCreateJob, SIGNAL(error(QString)), SLOT(slotGenerateDone(QString)));
+        mCreateJob->start();
+    }
+}
+
+void VacationCreateScriptJob::slotGenerateDone(const QString &error)
+{
+    mCreateJob = 0;
+    mUserJobRunning = false;
+    if (!error.isEmpty()) {
+        qWarning() << error;
+        mSuccess = false;
+    }
+    handleResult();
+}
diff --git a/libksieve/ksieveui/vacation/vacationcreatescriptjob.h b/libksieve/ksieveui/vacation/vacationcreatescriptjob.h
index 0172d63..d5109c6 100644
--- a/libksieve/ksieveui/vacation/vacationcreatescriptjob.h
+++ b/libksieve/ksieveui/vacation/vacationcreatescriptjob.h
@@ -29,6 +29,8 @@ class SieveJob;
 }
 
 namespace KSieveUi {
+class ParseUserScriptJob;
+class GenerateGlobalScriptJob;
 class KSIEVEUI_EXPORT VacationCreateScriptJob : public QObject
 {
     Q_OBJECT
@@ -37,6 +39,7 @@ public:
     ~VacationCreateScriptJob();
 
     void start();
+    void kill();
 
     void setServerUrl(const KUrl &url);
     void setScript(const QString &script);
@@ -44,27 +47,31 @@ public:
     const QString &serverName() const;
     void setStatus(bool activate, bool wasActive);
     void setKep14Support(bool kep14Support);
-    QString updateVacationBlock(QString oldScript, QString mScript);
-    QString mergeRequireLine(QString oldScript, QString mScript);
 
 Q_SIGNALS:
     void result(bool);
     void scriptActive(bool activated, const QString &serverName);
 
 private slots:
-    void slotPutActiveResult(KManageSieve::SieveJob *job, bool success);
-    void slotPutInactiveResult(KManageSieve::SieveJob *job, bool success);
+    void slotPutResult(KManageSieve::SieveJob *job, bool success);
     void slotGetScript(KManageSieve::SieveJob *job, bool success, const QString &oldScript, bool active);
+    void slotGotActiveScripts(ParseUserScriptJob *job);
+    void slotGenerateDone(const QString &error=QString());
 
 private:
-    void handlePutResult(KManageSieve::SieveJob *, bool success, bool activated);
+    void handleResult();
     KUrl mUrl;
     QString mScript;
     QString mServerName;
     bool mActivate;
-    bool mWasActive;
+    bool mScriptActive;
     bool mKep14Support;
+    bool mUserJobRunning;
+    bool mScriptJobRunning;
+    bool mSuccess;
     KManageSieve::SieveJob *mSieveJob;
+    ParseUserScriptJob *mParseUserJob;
+    GenerateGlobalScriptJob *mCreateJob;
 };
 }
 


commit d8975cdf2fe110a337b719875890903de2e5e585
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 12:43:01 2015 +0100

    Added kill feature to VacationCheckJob

diff --git a/libksieve/ksieveui/vacation/vacationcheckjob.cpp b/libksieve/ksieveui/vacation/vacationcheckjob.cpp
index b323e96..6f594db 100644
--- a/libksieve/ksieveui/vacation/vacationcheckjob.cpp
+++ b/libksieve/ksieveui/vacation/vacationcheckjob.cpp
@@ -38,11 +38,22 @@ VacationCheckJob::VacationCheckJob(const KUrl &url, const QString &serverName, Q
 
 VacationCheckJob::~VacationCheckJob()
 {
+    kill();
+}
+
+void VacationCheckJob::kill()
+{
     if ( mSieveJob )
         mSieveJob->kill();
     mSieveJob = 0;
+
+    if (mParseJob) {
+        mParseJob->kill();
+    }
+    mParseJob = 0;
 }
 
+
 void VacationCheckJob::setKep14Support(bool kep14Support)
 {
   mKep14Support = kep14Support;
@@ -86,9 +97,13 @@ void VacationCheckJob::slotGetResult(KManageSieve::SieveJob */*job*/, bool succe
             getNextScript();
         }
     } else {
-        if ( !success )
+        if ( !success ) {
             active = false; // default to inactive
             mNoScriptFound = true;
+        }
+        if (active) {
+            mActiveScripts << mUrl.fileName();
+        }
         emit scriptActive(this, mUrl.fileName(), active);
     }
 }
diff --git a/libksieve/ksieveui/vacation/vacationcheckjob.h b/libksieve/ksieveui/vacation/vacationcheckjob.h
index b862822..4596d9a 100644
--- a/libksieve/ksieveui/vacation/vacationcheckjob.h
+++ b/libksieve/ksieveui/vacation/vacationcheckjob.h
@@ -36,6 +36,7 @@ public:
     ~VacationCheckJob();
     void setKep14Support(bool kep14Support);
     void start();
+    void kill();
     bool noScriptFound();
     QString script();
     QStringList sieveCapabilities();


commit fcdf6e84454f48da3a52e38407e7b9039859b845
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 12:41:33 2015 +0100

    Make test shutdown.
    
    Because the VacationManager is in place, this needs to be shutdown too.

diff --git a/libksieve/ksieveui/vacation/tests/main.cpp b/libksieve/ksieveui/vacation/tests/main.cpp
index 9320f19..2b8a6dc 100644
--- a/libksieve/ksieveui/vacation/tests/main.cpp
+++ b/libksieve/ksieveui/vacation/tests/main.cpp
@@ -29,7 +29,7 @@ int main( int argc, char** argv )
     KCmdLineArgs::init(argc, argv, "vacationmultiscripttest", 0, ki18n("VacationMultiScriptTest_Gui"),
                        "1.0", ki18n("Test for dialog when server has multiscript"));
     KApplication app;
-    app.setQuitOnLastWindowClosed( false );
+    app.setQuitOnLastWindowClosed( true );
 
     KSieveUi::MultiImapVacationManager manager;
     KSieveUi::MultiImapVacationDialog dlg(&manager);


commit 4b8ef8e80984284e0d1f48d8579fbb82f7eaa9e5
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 12:40:29 2015 +0100

    Added kill feature to managescriptsjobs

diff --git a/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.cpp b/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.cpp
index 30e35b8..1803850 100644
--- a/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.cpp
+++ b/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.cpp
@@ -25,19 +25,30 @@ using namespace KSieveUi;
 GenerateGlobalScriptJob::GenerateGlobalScriptJob(const KUrl &url, QObject *parent)
     : QObject(parent),
       mCurrentUrl(url),
-      mMasterjob(0),
+      mMasterJob(0),
       mUserJob(0)
 {
 }
 
 GenerateGlobalScriptJob::~GenerateGlobalScriptJob()
 {
-    if (mMasterjob)
-        mMasterjob->kill();
-    if (mUserJob)
+    kill();
+}
+
+void GenerateGlobalScriptJob::kill()
+{
+    if (mMasterJob) {
+        mMasterJob->kill();
+    }
+    mMasterJob = 0;
+
+    if (mUserJob) {
         mUserJob->kill();
+    }
+    mUserJob = 0;
 }
 
+
 void GenerateGlobalScriptJob::addUserActiveScripts(const QStringList &lstScript)
 {
     mListUserActiveScripts = lstScript;
@@ -80,8 +91,8 @@ void GenerateGlobalScriptJob::writeMasterScript()
 
     KUrl url(mCurrentUrl);
     url.setFileName(QLatin1String("MASTER"));
-    mMasterjob = KManageSieve::SieveJob::put(url, masterScript, true, true );
-    connect( mMasterjob, SIGNAL(result(KManageSieve::SieveJob*,bool,QString,bool)),
+    mMasterJob = KManageSieve::SieveJob::put(url, masterScript, true, true );
+    connect( mMasterJob, SIGNAL(result(KManageSieve::SieveJob*,bool,QString,bool)),
              this, SLOT(slotPutMasterResult(KManageSieve::SieveJob*,bool)) );
 }
 
@@ -91,7 +102,7 @@ void GenerateGlobalScriptJob::slotPutMasterResult( KManageSieve::SieveJob *, boo
         Q_EMIT error(i18n("Error when we wrote \"MASTER\" script on server."));
         return;
     }
-    mMasterjob = 0;
+    mMasterJob = 0;
     writeUserScript();
 }
 
diff --git a/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.h b/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.h
index c09471e..6dc8c1b 100644
--- a/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.h
+++ b/libksieve/ksieveui/managescriptsjob/generateglobalscriptjob.h
@@ -33,6 +33,7 @@ public:
     ~GenerateGlobalScriptJob();
 
     void start();
+    void kill();
 
     void addUserActiveScripts(const QStringList &lstScript);
 
@@ -50,7 +51,7 @@ private:
     void writeUserScript();
     QStringList mListUserActiveScripts;
     KUrl mCurrentUrl;
-    KManageSieve::SieveJob *mMasterjob;
+    KManageSieve::SieveJob *mMasterJob;
     KManageSieve::SieveJob *mUserJob;
 };
 }
diff --git a/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.cpp b/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.cpp
index 6e48743..02de7a4 100644
--- a/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.cpp
+++ b/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.cpp
@@ -33,9 +33,7 @@ ParseUserScriptJob::ParseUserScriptJob(const KUrl &url, QObject *parent)
 
 ParseUserScriptJob::~ParseUserScriptJob()
 {
-    if ( mSieveJob )
-        mSieveJob->kill();
-    mSieveJob = 0;
+    kill();
 }
 
 KUrl ParseUserScriptJob::scriptUrl() const
@@ -105,6 +103,14 @@ QString ParseUserScriptJob::error() const
     return mError;
 }
 
+void ParseUserScriptJob::kill()
+{
+  if ( mSieveJob )
+      mSieveJob->kill();
+  mSieveJob = 0;
+}
+
+
 QStringList ParseUserScriptJob::extractActiveScript(const QDomDocument &doc)
 {
     QStringList lstScript;
diff --git a/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.h b/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.h
index 3fc5053..435ec65 100644
--- a/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.h
+++ b/libksieve/ksieveui/managescriptsjob/parseuserscriptjob.h
@@ -44,6 +44,7 @@ public:
 
     QStringList activeScriptList() const;
     QString error() const;
+    void kill();
 
 private Q_SLOTS:
     void slotGetResult( KManageSieve::SieveJob *, bool, const QString &, bool );




More information about the commits mailing list