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