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

Sandro Knauß knauss at kolabsys.com
Thu Mar 26 19:30:10 CET 2015


 libksieve/ksieveui/vacation/tests/vacationutilstest.cpp |  245 +++++++---------
 libksieve/ksieveui/vacation/vacation.cpp                |   62 +---
 libksieve/ksieveui/vacation/vacationcheckjob.cpp        |   10 
 libksieve/ksieveui/vacation/vacationcheckjob.h          |    1 
 libksieve/ksieveui/vacation/vacationeditwidget.cpp      |    2 
 libksieve/ksieveui/vacation/vacationpagewidget.cpp      |   54 +--
 libksieve/ksieveui/vacation/vacationutils.cpp           |  167 ++++------
 libksieve/ksieveui/vacation/vacationutils.h             |   48 +--
 8 files changed, 260 insertions(+), 329 deletions(-)

New commits:
commit 87cdad04fbcc622a789d0a14517edb4711f03787
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 19:29:54 2015 +0100

    Remove some useless functions.

diff --git a/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp b/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
index 61b581d..800bb66 100644
--- a/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
+++ b/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
@@ -47,15 +47,15 @@ void testAliases(KMime::Types::AddrSpecList l1, QStringList l2)
 void VacationUtilsTest::testParseEmptyScript()
 {
     const QString script;
-    QCOMPARE(VacationUtils::foundVacationScript(script), false);
+    QCOMPARE(VacationUtils::parseScript(script).isValid(), false);
 }
 
 void VacationUtilsTest::testParseOnlyComment()
 {
     QString script(QLatin1String("#comment"));
-    QCOMPARE(VacationUtils::foundVacationScript(script), false);
+    QCOMPARE(VacationUtils::parseScript(script).isValid(), false);
     script = QLatin1String("#comment\n\n#comment\n");
-    QCOMPARE(VacationUtils::foundVacationScript(script), false);
+    QCOMPARE(VacationUtils::parseScript(script).isValid(), false);
 }
 
 void VacationUtilsTest::testParseActivate_data()
@@ -82,7 +82,6 @@ void VacationUtilsTest::testParseActivate()
     QFile file(QLatin1String(VACATIONTESTDATADIR)+filename);
     QVERIFY(file.open(QIODevice::ReadOnly));
     QString script = QString::fromUtf8(file.readAll());
-    QCOMPARE(VacationUtils::foundVacationScript(script), found);
 
     VacationUtils::Vacation vacation = VacationUtils::parseScript(script);
     QCOMPARE(vacation.isValid(), found);
diff --git a/libksieve/ksieveui/vacation/vacationcheckjob.cpp b/libksieve/ksieveui/vacation/vacationcheckjob.cpp
index aa5687f..f936be1 100644
--- a/libksieve/ksieveui/vacation/vacationcheckjob.cpp
+++ b/libksieve/ksieveui/vacation/vacationcheckjob.cpp
@@ -85,9 +85,10 @@ void VacationCheckJob::slotGetResult(KManageSieve::SieveJob */*job*/, bool succe
     mSieveJob = 0;
 
     if (mKep14Support) {
-        if (isVacationScipt(script)) {
+        VacationUtils::Vacation vacation = VacationUtils::parseScript(script);
+        if (vacation.isValid()) {
             const QString &scriptName = mAvailableScripts[mScriptPos-1];
-            emit scriptActive(this, scriptName, mActiveScripts.contains(scriptName) && VacationUtils::vacationScriptActive(script));
+            emit scriptActive(this, scriptName, mActiveScripts.contains(scriptName) && vacation.active);
             kDebug() << "vacation script found :)";
         } else if (isLastScript()) {
             mNoScriptFound = true;
@@ -184,11 +185,6 @@ bool VacationCheckJob::isLastScript() const
     return mScriptPos >= mAvailableScripts.count();
 }
 
-bool VacationCheckJob::isVacationScipt(const QString &script) const
-{
-    return KSieveUi::VacationUtils::foundVacationScript(script);
-}
-
 bool VacationCheckJob::noScriptFound()
 {
     return mNoScriptFound;
diff --git a/libksieve/ksieveui/vacation/vacationcheckjob.h b/libksieve/ksieveui/vacation/vacationcheckjob.h
index 4596d9a..3eaa8ce 100644
--- a/libksieve/ksieveui/vacation/vacationcheckjob.h
+++ b/libksieve/ksieveui/vacation/vacationcheckjob.h
@@ -52,7 +52,6 @@ private slots:
     void emitError(const QString &errorMessage);
     void searchVacationScript();
     void getNextScript();
-    bool isVacationScipt(const QString &script) const;
     bool isLastScript() const;
 
 private:
diff --git a/libksieve/ksieveui/vacation/vacationpagewidget.cpp b/libksieve/ksieveui/vacation/vacationpagewidget.cpp
index 638760d..8530620 100644
--- a/libksieve/ksieveui/vacation/vacationpagewidget.cpp
+++ b/libksieve/ksieveui/vacation/vacationpagewidget.cpp
@@ -125,7 +125,7 @@ void VacationPageWidget::slotGetResult(const QString &serverName, const QStringL
 
      KSieveUi::VacationUtils::Vacation vacation = KSieveUi::VacationUtils::parseScript(script);
 
-    if (!vacation.isValid() && !script.timmed().isEmpty() ) {
+    if (!vacation.isValid() && !script.trimmed().isEmpty() ) {
         mVacationWarningWidget->setVisible(true);
     }
 
diff --git a/libksieve/ksieveui/vacation/vacationutils.cpp b/libksieve/ksieveui/vacation/vacationutils.cpp
index 9018c70..8c5633c 100644
--- a/libksieve/ksieveui/vacation/vacationutils.cpp
+++ b/libksieve/ksieveui/vacation/vacationutils.cpp
@@ -172,17 +172,6 @@ KSieveUi::VacationUtils::Vacation KSieveUi::VacationUtils::parseScript(const QSt
     return vacation;
 }
 
-bool KSieveUi::VacationUtils::foundVacationScript(const QString &script)
-{
-    return parseScript(script).isValid();
-}
-
-bool KSieveUi::VacationUtils::vacationScriptActive(const QString &script)
-{
-    const KSieveUi::VacationUtils::Vacation vacation = parseScript(script);
-    return vacation.isValid() && vacation.active;
-}
-
 QString composeOldScript( const QString & messageText,
                                  const QString &subject,
                                  int notificationInterval,
diff --git a/libksieve/ksieveui/vacation/vacationutils.h b/libksieve/ksieveui/vacation/vacationutils.h
index 5179eb2..d326989 100644
--- a/libksieve/ksieveui/vacation/vacationutils.h
+++ b/libksieve/ksieveui/vacation/vacationutils.h
@@ -53,12 +53,6 @@ QString composeScript(const Vacation &vacation);
 
 KSieveUi::VacationUtils::Vacation parseScript(const QString &script);
 
-//returns if a vacation script is found in the sieve script
-bool foundVacationScript(const QString &script);
-
-// returns if the vacation script is active
-bool vacationScriptActive(const QString &script);
-
 QString mergeRequireLine(const QString &script1, const QString script2);
 
 QString updateVacationBlock(const QString &oldScript, const QString &newScript);


commit 4231829ea66c1c6755b46222e75b8d5af048c9b1
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Thu Mar 26 19:22:06 2015 +0100

    Use struct to parse/read vacation script.

diff --git a/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp b/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
index f0cb13d..61b581d 100644
--- a/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
+++ b/libksieve/ksieveui/vacation/tests/vacationutilstest.cpp
@@ -27,6 +27,23 @@ using namespace KSieveUi;
 
 QTEST_KDEMAIN( VacationUtilsTest, NoGUI )
 
+void testAliases(KMime::Types::AddrSpecList l1, KMime::Types::AddrSpecList l2)
+{
+    QCOMPARE(l1.count(),l2.count());
+    for (int i=0; i < l1.count(); i++) {
+        QCOMPARE(l1.at(i).asString(),l2.at(i).asString());
+    }
+}
+
+void testAliases(KMime::Types::AddrSpecList l1, QStringList l2)
+{
+    QCOMPARE(l1.count(),l2.count());
+    for (int i=0;i < l1.count(); i++) {
+        QCOMPARE(l1.at(i).asString(),l2.at(i));
+    }
+}
+
+
 void VacationUtilsTest::testParseEmptyScript()
 {
     const QString script;
@@ -67,19 +84,9 @@ void VacationUtilsTest::testParseActivate()
     QString script = QString::fromUtf8(file.readAll());
     QCOMPARE(VacationUtils::foundVacationScript(script), found);
 
-    QString messageText;
-    QString subject;
-    int notificationInterval;
-    QStringList aliases;
-    bool sendForSpam;
-    QString domainName;
-    QDate startDate;
-    QDate endDate;
-    bool scriptActive = !active;
-
-    bool ret = VacationUtils::parseScript(script, scriptActive, messageText, subject, notificationInterval, aliases, sendForSpam, domainName, startDate, endDate);
-    QCOMPARE(ret, found);
-    QCOMPARE(scriptActive, active);
+    VacationUtils::Vacation vacation = VacationUtils::parseScript(script);
+    QCOMPARE(vacation.isValid(), found);
+    QCOMPARE(vacation.active, active);
 }
 
 void VacationUtilsTest::testParseScript_data()
@@ -103,27 +110,18 @@ void VacationUtilsTest::testParseScript()
     QVERIFY(fileD.open(QIODevice::ReadOnly));
     QString scriptD = QString::fromUtf8(fileD.readAll());
 
-    QString messageTextA, messageTextD;
-    QString subjectA, subjectD;
-    int notificationIntervalA, notificationIntervalD;
-    QStringList aliasesA, aliasesD;
-    bool sendForSpamA, sendForSpamD;
-    QString domainNameA, domainNameD;
-    QDate startDateA, startDateD;
-    QDate endDateA, endDateD;
-    bool scriptActiveA, scriptActiveD;
-    VacationUtils::parseScript(scriptA, scriptActiveA, messageTextA, subjectA, notificationIntervalA, aliasesA, sendForSpamA, domainNameA, startDateA, endDateA);
-    VacationUtils::parseScript(scriptD, scriptActiveD, messageTextD, subjectD, notificationIntervalD, aliasesD, sendForSpamD, domainNameD, startDateD, endDateD);
-    QCOMPARE(scriptActiveA, true);
-    QCOMPARE(scriptActiveD, false);
-    QCOMPARE(messageTextD, messageTextA);
-    QCOMPARE(subjectD, subjectA);
-    QCOMPARE(notificationIntervalD, notificationIntervalA);
-    QCOMPARE(aliasesD, aliasesA);
-    QCOMPARE(sendForSpamD, sendForSpamA);
-    QCOMPARE(domainNameD, domainNameA);
-    QCOMPARE(startDateD, startDateA);
-    QCOMPARE(endDateD, endDateA);
+    VacationUtils::Vacation vacationA = VacationUtils::parseScript(scriptA);
+    VacationUtils::Vacation vacationD = VacationUtils::parseScript(scriptD);
+    QCOMPARE(vacationA.active, true);
+    QCOMPARE(vacationD.active, false);
+    QCOMPARE(vacationD.messageText, vacationA.messageText);
+    QCOMPARE(vacationD.subject, vacationA.subject);
+    QCOMPARE(vacationD.notificationInterval, vacationA.notificationInterval);
+    testAliases(vacationD.aliases, vacationA.aliases);
+    QCOMPARE(vacationD.sendForSpam, vacationA.sendForSpam);
+    QCOMPARE(vacationD.excludeDomain, vacationA.excludeDomain);
+    QCOMPARE(vacationD.startDate, vacationA.startDate);
+    QCOMPARE(vacationD.endDate, vacationA.endDate);
 }
 
 void VacationUtilsTest::testParseScriptComplex()
@@ -132,118 +130,96 @@ void VacationUtilsTest::testParseScriptComplex()
     QVERIFY(file.open(QIODevice::ReadOnly));
     QString script = QString::fromUtf8(file.readAll());
 
-    QString messageText;
-    QString subject;
-    int notificationInterval;
-    QStringList aliases;
-    bool sendForSpam;
-    QString domainName;
-    QDate startDate;
-    QDate endDate;
-    bool scriptActive;
-    VacationUtils::parseScript(script, scriptActive, messageText, subject, notificationInterval, aliases, sendForSpam, domainName, startDate, endDate);
-    QCOMPARE(scriptActive, true);
-    QCOMPARE(messageText, QLatin1String("dsfgsdfgsdfg"));
-    QCOMPARE(subject, QLatin1String("XXX"));
-    QCOMPARE(notificationInterval, 7);
-    QCOMPARE(aliases, QStringList() << QLatin1String("test at test.de"));
-    QCOMPARE(sendForSpam, false);
-    QCOMPARE(domainName, QString());
-    QCOMPARE(startDate, QDate(2015, 01, 02));
-    QCOMPARE(endDate, QDate(2015, 03, 04));
+    VacationUtils::Vacation vacation = VacationUtils::parseScript(script);
+    QCOMPARE(vacation.active, true);
+    QCOMPARE(vacation.messageText, QLatin1String("dsfgsdfgsdfg"));
+    QCOMPARE(vacation.subject, QLatin1String("XXX"));
+    QCOMPARE(vacation.notificationInterval, 7);
+    testAliases(vacation.aliases, QStringList() << QLatin1String("test at test.de"));
+    QCOMPARE(vacation.sendForSpam, false);
+    QCOMPARE(vacation.excludeDomain, QString());
+    QCOMPARE(vacation.startDate, QDate(2015, 01, 02));
+    QCOMPARE(vacation.endDate, QDate(2015, 03, 04));
 }
 
 void VacationUtilsTest::testWriteScript()
 {
-    QString messageText(QLatin1String("dsfgsdfgsdfg"));
-    QString subject(QLatin1String("XXX"));
-    int notificationInterval(7);
+    VacationUtils::Vacation vacation, vacationA;
     QStringList aliases = QStringList() << QLatin1String("test at test.de");
-    QList<KMime::Types::AddrSpec> addesses;
-    bool sendForSpam(false);
-    QString domainName(QLatin1String("example.org"));
-    QDate startDate(2015, 01, 02);
-    QDate endDate(2015, 03, 04);
-    bool scriptActive(true);
-
-    QString messageTextA;
-    QString subjectA;
-    int notificationIntervalA;
-    QStringList aliasesA;
-    bool sendForSpamA;
-    QString domainNameA;
-    QDate startDateA;
-    QDate endDateA;
-    bool scriptActiveA;
+    vacation.valid = true;
+
+    vacation.messageText = QLatin1String("dsfgsdfgsdfg");
+    vacation.subject = QLatin1String("XXX");
+    vacation.notificationInterval = 7;
+    vacation.sendForSpam = false;
+    vacation.excludeDomain = QLatin1String("example.org");
+    vacation.startDate = QDate(2015, 01, 02);
+    vacation.endDate = QDate(2015, 03, 04);
+    vacation.active = true;
 
     foreach(const QString &alias, aliases) {
         KMime::Types::Mailbox a;
         a.fromUnicodeString(alias);
-        addesses.append(a.addrSpec());
+        vacation.aliases.append(a.addrSpec());
     }
 
-    QString script = VacationUtils::composeScript(messageText, scriptActive, subject, notificationInterval, addesses, sendForSpam, domainName, startDate, endDate);
-    bool ret = VacationUtils::parseScript(script, scriptActiveA, messageTextA, subjectA, notificationIntervalA, aliasesA, sendForSpamA, domainNameA, startDateA, endDateA);
-    QCOMPARE(ret, true);
-    QCOMPARE(scriptActiveA, scriptActive);
-    QCOMPARE(messageTextA, messageText);
-    QCOMPARE(subjectA, subject);
-    QCOMPARE(notificationIntervalA, notificationInterval);
-    QCOMPARE(aliasesA, aliases);
-    QCOMPARE(sendForSpamA, sendForSpam);
-    QCOMPARE(domainNameA, domainName);
-    QCOMPARE(startDateA, startDate);
-    QCOMPARE(endDateA, endDate);
-
-    scriptActive = false;
-    script = VacationUtils::composeScript(messageText, scriptActive, subject, notificationInterval, addesses, sendForSpam, domainName, startDate, endDate);
-    ret = VacationUtils::parseScript(script, scriptActiveA, messageTextA, subjectA, notificationIntervalA, aliasesA, sendForSpamA, domainNameA, startDateA, endDateA);
-    QCOMPARE(ret, true);
-    QCOMPARE(scriptActiveA, scriptActive);
-    QCOMPARE(messageTextA, messageText);
-    QCOMPARE(subjectA, subject);
-    QCOMPARE(notificationIntervalA, notificationInterval);
-    QCOMPARE(aliasesA, aliases);
-    QCOMPARE(sendForSpamA, sendForSpam);
-    QCOMPARE(domainNameA, domainName);
-    QCOMPARE(startDateA, startDate);
-    QCOMPARE(endDateA, endDate);
+    QString script = VacationUtils::composeScript(vacation);
+    vacationA = VacationUtils::parseScript(script);
+    QCOMPARE(vacationA.isValid(), true);
+    QCOMPARE(vacationA.active, vacation.active);
+    QCOMPARE(vacationA.messageText, vacation.messageText);
+    QCOMPARE(vacationA.subject, vacation.subject);
+    QCOMPARE(vacationA.notificationInterval, vacation.notificationInterval);
+    kDebug() << "huih";
+    testAliases(vacationA.aliases, vacation.aliases);
+    QCOMPARE(vacationA.sendForSpam, vacation.sendForSpam);
+    QCOMPARE(vacationA.excludeDomain, vacation.excludeDomain);
+    QCOMPARE(vacationA.startDate, vacation.startDate);
+    QCOMPARE(vacationA.endDate, vacation.endDate);
+
+    vacation.active = false;
+    script = VacationUtils::composeScript(vacation);
+    vacationA = VacationUtils::parseScript(script);
+    QCOMPARE(vacationA.isValid(), true);
+    QCOMPARE(vacationA.active, vacation.active);
+    QCOMPARE(vacationA.messageText, vacation.messageText);
+    QCOMPARE(vacationA.subject, vacation.subject);
+    QCOMPARE(vacationA.notificationInterval, vacation.notificationInterval);
+    testAliases(vacationA.aliases, vacation.aliases);
+    QCOMPARE(vacationA.sendForSpam, vacation.sendForSpam);
+    QCOMPARE(vacationA.excludeDomain, vacation.excludeDomain);
+    QCOMPARE(vacationA.startDate, vacation.startDate);
+    QCOMPARE(vacationA.endDate, vacation.endDate);
 }
 
 
 void VacationUtilsTest::testWriteSimpleScript()
 {
-    QString messageText(QLatin1String("dsfgsdfgsdfg"));
-    QString subject(QLatin1String("XXX"));
-    int notificationInterval(7);
-    bool scriptActive(true);
-
-    QString messageTextA;
-    QString subjectA;
-    int notificationIntervalA;
-    QStringList aliasesA;
-    bool sendForSpamA;
-    QString domainNameA;
-    QDate startDateA;
-    QDate endDateA;
-    bool scriptActiveA;
-
-    QString script = VacationUtils::composeScript(messageText, scriptActive, subject, notificationInterval, QList<KMime::Types::AddrSpec>(), true, QString(), QDate(), QDate());
-    bool ret = VacationUtils::parseScript(script, scriptActiveA, messageTextA, subjectA, notificationIntervalA, aliasesA, sendForSpamA, domainNameA, startDateA, endDateA);
-    QCOMPARE(ret, true);
-    QCOMPARE(scriptActiveA, scriptActive);
-    QCOMPARE(messageTextA, messageText);
-    QCOMPARE(subjectA, subject);
-    QCOMPARE(notificationIntervalA, notificationInterval);
-
-    scriptActive = false;
-    script = VacationUtils::composeScript(messageText, scriptActive, subject, notificationInterval, QList<KMime::Types::AddrSpec>(), true, QString(), QDate(), QDate());
-    ret = VacationUtils::parseScript(script, scriptActiveA, messageTextA, subjectA, notificationIntervalA, aliasesA, sendForSpamA, domainNameA, startDateA, endDateA);
-    QCOMPARE(ret, true);
-    QCOMPARE(scriptActiveA, scriptActive);
-    QCOMPARE(messageTextA, messageText);
-    QCOMPARE(subjectA, subject);
-    QCOMPARE(notificationIntervalA, notificationInterval);
+    VacationUtils::Vacation vacation;
+    vacation.valid = true;
+    vacation.messageText = QLatin1String("dsfgsdfgsdfg");
+    vacation.subject = QLatin1String("XXX");
+    vacation.notificationInterval = 7;
+    vacation.active = true;
+    vacation.sendForSpam = true;
+
+    QString script = VacationUtils::composeScript(vacation);
+    VacationUtils::Vacation vacationA = VacationUtils::parseScript(script);
+    QCOMPARE(vacation.isValid(), true);
+    QCOMPARE(vacationA.active, vacation.active);
+    QCOMPARE(vacationA.messageText, vacation.messageText);
+    QCOMPARE(vacationA.subject, vacation.subject);
+    QCOMPARE(vacationA.notificationInterval, vacation.notificationInterval);
+
+    vacation.active = false;
+    script = VacationUtils::composeScript(vacation);
+    vacationA = VacationUtils::parseScript(script);
+    QCOMPARE(vacation.isValid(), true);
+    QCOMPARE(vacationA.active, vacation.active);
+    QCOMPARE(vacationA.messageText, vacation.messageText);
+    QCOMPARE(vacationA.subject, vacation.subject);
+    QCOMPARE(vacationA.notificationInterval, vacation.notificationInterval);
+
 }
 
 void VacationUtilsTest::testUpdateVacationBlock()
diff --git a/libksieve/ksieveui/vacation/vacation.cpp b/libksieve/ksieveui/vacation/vacation.cpp
index 0fe799a..f3fc7b1 100644
--- a/libksieve/ksieveui/vacation/vacation.cpp
+++ b/libksieve/ksieveui/vacation/vacation.cpp
@@ -107,40 +107,34 @@ void Vacation::slotGetResult( KManageSieve::SieveJob * job, bool success,
     if ( !mDialog && !mCheckOnly )
         mDialog = new VacationDialog( i18n("Configure \"Out of Office\" Replies"), 0, false );
 
-    QString messageText = VacationUtils::defaultMessageText();
-    QString subject = VacationUtils::defaultSubject();
-    int notificationInterval = VacationUtils::defaultNotificationInterval();
-    QStringList aliases = VacationUtils::defaultMailAliases();
-    bool sendForSpam = VacationUtils::defaultSendForSpam();
-    QString domainName = VacationUtils::defaultDomainName();
-    QDate startDate = VacationUtils::defaultStartDate();
-    QDate endDate = VacationUtils::defaultEndDate();
-    bool sActive = true;
-
-    if ( !success ) active = false; // default to inactive
-
-    if ( !mCheckOnly && ( !success || !KSieveUi::VacationUtils::parseScript( script, sActive, messageText, subject, notificationInterval, aliases, sendForSpam, domainName, startDate, endDate ) ) )
+    if ( !success ) {
+        active = false; // default to inactive
+    }
+
+    KSieveUi::VacationUtils::Vacation vacation = KSieveUi::VacationUtils::parseScript(script);
+
+    if ( !mCheckOnly && ( !success || (!vacation.isValid()  && !script.trimmed().isEmpty())) ) {
         KMessageBox::information( 0, i18n("Someone (probably you) changed the "
                                           "vacation script on the server.\n"
                                           "KMail is no longer able to determine "
                                           "the parameters for the autoreplies.\n"
                                           "Default values will be used." ) );
-
-    mWasActive = active && sActive;
+    }
+    mWasActive = active;
     if ( mDialog ) {
-        mDialog->setActivateVacation( active && sActive );
-        mDialog->setSubject(subject);
-        mDialog->setMessageText( messageText );
-        mDialog->setNotificationInterval( notificationInterval );
-        mDialog->setMailAliases( aliases.join(QLatin1String(", ")) );
-        mDialog->setSendForSpam( sendForSpam );
-        mDialog->setDomainName( domainName );
+        mDialog->setActivateVacation( active && vacation.active );
+        mDialog->setSubject(vacation.subject);
+        mDialog->setMessageText( vacation.messageText );
+        mDialog->setNotificationInterval( vacation.notificationInterval );
+        mDialog->setMailAliases( vacation.aliases );
+        mDialog->setSendForSpam( vacation.sendForSpam );
+        mDialog->setDomainName( vacation.excludeDomain );
         mDialog->enableDomainAndSendForSpam( !VacationSettings::allowOutOfOfficeUploadButNoSettings() );
 
         if (supportsDate) {
             mDialog->enableDates( supportsDate );
-            mDialog->setStartDate( startDate );
-            mDialog->setEndDate( endDate );
+            mDialog->setStartDate( vacation.startDate );
+            mDialog->setEndDate( vacation.endDate );
         }
 
         connect( mDialog, SIGNAL(okClicked()), SLOT(slotDialogOk()) );
@@ -164,14 +158,18 @@ void Vacation::slotDialogOk() {
     kDebug();
     // compose a new script:
     const bool active = mDialog->activateVacation();
-    const QString script = VacationUtils::composeScript( mDialog->messageText(), active,
-                                          mDialog->subject(),
-                                          mDialog->notificationInterval(),
-                                          mDialog->mailAliases(),
-                                          mDialog->sendForSpam(),
-                                          mDialog->domainName(),
-                                          mDialog->startDate(),
-                                          mDialog->endDate() );
+    VacationUtils::Vacation vacation;
+    vacation.valid = true;
+    vacation.active = active;
+    vacation.messageText = mDialog->messageText();
+    vacation.subject = mDialog->subject();
+    vacation.notificationInterval = mDialog->notificationInterval();
+    vacation.aliases = mDialog->mailAliases();
+    vacation.sendForSpam = mDialog->sendForSpam();
+    vacation.excludeDomain =  mDialog->domainName();
+    vacation.startDate = mDialog->startDate();
+    vacation.endDate = mDialog->endDate();
+    const QString script = VacationUtils::composeScript(vacation);
     emit scriptActive( active, mServerName);
 
     kDebug() << "script:" << endl << script;
diff --git a/libksieve/ksieveui/vacation/vacationeditwidget.cpp b/libksieve/ksieveui/vacation/vacationeditwidget.cpp
index 642f1f2..56a7666 100644
--- a/libksieve/ksieveui/vacation/vacationeditwidget.cpp
+++ b/libksieve/ksieveui/vacation/vacationeditwidget.cpp
@@ -316,7 +316,7 @@ void VacationEditWidget::setDefault()
     setMessageText( VacationUtils::defaultMessageText() );
     setSubject(VacationUtils::defaultSubject());
     setNotificationInterval( VacationUtils::defaultNotificationInterval() );
-    setMailAliases( VacationUtils::defaultMailAliases().join(QLatin1String(", ")) );
+    setMailAliases( VacationUtils::defaultMailAliases() );
     setSendForSpam( VacationUtils::defaultSendForSpam() );
     setDomainName( VacationUtils::defaultDomainName() );
     setDomainCheck( false );
diff --git a/libksieve/ksieveui/vacation/vacationpagewidget.cpp b/libksieve/ksieveui/vacation/vacationpagewidget.cpp
index c26d0f3..638760d 100644
--- a/libksieve/ksieveui/vacation/vacationpagewidget.cpp
+++ b/libksieve/ksieveui/vacation/vacationpagewidget.cpp
@@ -123,37 +123,27 @@ void VacationPageWidget::slotGetResult(const QString &serverName, const QStringL
     // Whether the server supports the "date" extension
     const bool supportsSieveDate = mUrl.protocol() == QLatin1String("sieve") && sieveCapabilities.contains(QLatin1String("date"));
 
-    QString messageText = VacationUtils::defaultMessageText();
-    QString subject = VacationUtils::defaultSubject();
-    int notificationInterval = VacationUtils::defaultNotificationInterval();
-    QStringList aliases = VacationUtils::defaultMailAliases();
-    bool sendForSpam = VacationUtils::defaultSendForSpam();
-    QString domainName = VacationUtils::defaultDomainName();
-    QDate startDate = VacationUtils::defaultStartDate();
-    QDate endDate = VacationUtils::defaultEndDate();
-    bool scriptActive = true;
-
-    const bool bParse = KSieveUi::VacationUtils::parseScript(script, scriptActive, messageText, subject, notificationInterval, aliases, sendForSpam, domainName, startDate, endDate);
-
-    if (!bParse) {
+     KSieveUi::VacationUtils::Vacation vacation = KSieveUi::VacationUtils::parseScript(script);
+
+    if (!vacation.isValid() && !script.timmed().isEmpty() ) {
         mVacationWarningWidget->setVisible(true);
     }
 
     mWasActive = active;
     mVacationEditWidget->setEnabled(true);
-    mVacationEditWidget->setActivateVacation( active && scriptActive );
-    mVacationEditWidget->setMessageText( messageText );
-    mVacationEditWidget->setSubject( subject );
-    mVacationEditWidget->setNotificationInterval( notificationInterval );
-    mVacationEditWidget->setMailAliases( aliases.join(QLatin1String(", ")) );
-    mVacationEditWidget->setSendForSpam( sendForSpam );
-    mVacationEditWidget->setDomainName( domainName );
+    mVacationEditWidget->setActivateVacation( active && vacation.active );
+    mVacationEditWidget->setMessageText( vacation.messageText );
+    mVacationEditWidget->setSubject( vacation.subject );
+    mVacationEditWidget->setNotificationInterval( vacation.notificationInterval );
+    mVacationEditWidget->setMailAliases( vacation.aliases );
+    mVacationEditWidget->setSendForSpam( vacation.sendForSpam );
+    mVacationEditWidget->setDomainName( vacation.excludeDomain );
     mVacationEditWidget->enableDomainAndSendForSpam( !VacationSettings::allowOutOfOfficeUploadButNoSettings() );
 
     mVacationEditWidget->enableDates( supportsSieveDate );
     if ( supportsSieveDate ) {
-        mVacationEditWidget->setStartDate( startDate );
-        mVacationEditWidget->setEndDate( endDate );
+        mVacationEditWidget->setStartDate( vacation.startDate );
+        mVacationEditWidget->setEndDate( vacation.endDate );
     }
 
     //emit scriptActive( mWasActive, mServerName );
@@ -168,14 +158,18 @@ KSieveUi::VacationCreateScriptJob *VacationPageWidget::writeScript()
         createJob->setServerUrl(mUrl);
         createJob->setServerName(mServerName);
         const bool active = mVacationEditWidget->activateVacation();
-        const QString script = VacationUtils::composeScript( mVacationEditWidget->messageText(), active,
-                                                             mVacationEditWidget->subject(),
-                                                             mVacationEditWidget->notificationInterval(),
-                                                             mVacationEditWidget->mailAliases(),
-                                                             mVacationEditWidget->sendForSpam(),
-                                                             mVacationEditWidget->domainName(),
-                                                             mVacationEditWidget->startDate(),
-                                                             mVacationEditWidget->endDate() );
+        VacationUtils::Vacation vacation;
+        vacation.valid = true;
+        vacation.active = active;
+        vacation.messageText = mVacationEditWidget->messageText();
+        vacation.subject = mVacationEditWidget->subject();
+        vacation.notificationInterval = mVacationEditWidget->notificationInterval();
+        vacation.aliases = mVacationEditWidget->mailAliases();
+        vacation.sendForSpam = mVacationEditWidget->sendForSpam();
+        vacation.excludeDomain =  mVacationEditWidget->domainName();
+        vacation.startDate = mVacationEditWidget->startDate();
+        vacation.endDate = mVacationEditWidget->endDate();
+        const QString script = VacationUtils::composeScript(vacation);
         createJob->setStatus(active, mWasActive);
         //Q_EMIT scriptActive( active, mServerName);
         createJob->setScript(script);
diff --git a/libksieve/ksieveui/vacation/vacationutils.cpp b/libksieve/ksieveui/vacation/vacationutils.cpp
index ae01e9d..9018c70 100644
--- a/libksieve/ksieveui/vacation/vacationutils.cpp
+++ b/libksieve/ksieveui/vacation/vacationutils.cpp
@@ -64,17 +64,24 @@ int KSieveUi::VacationUtils::defaultNotificationInterval() {
     return 7; // days
 }
 
-QStringList KSieveUi::VacationUtils::defaultMailAliases()
+KMime::Types::AddrSpecList KSieveUi::VacationUtils::defaultMailAliases()
 {
-    QStringList sl;
+    KMime::Types::AddrSpecList sl;
     KPIMIdentities::IdentityManager manager( true );
     KPIMIdentities::IdentityManager::ConstIterator end(manager.end());
     for ( KPIMIdentities::IdentityManager::ConstIterator it = manager.begin(); it != end ; ++it ) {
         if ( !(*it).primaryEmailAddress().isEmpty() ) {
-            sl.push_back( (*it).primaryEmailAddress() );
+            KMime::Types::Mailbox a;
+            a.fromUnicodeString((*it).primaryEmailAddress());
+            sl.push_back(a.addrSpec());
+        }
+        foreach(const QString &email, (*it).emailAliases()) {
+            KMime::Types::Mailbox a;
+            a.fromUnicodeString(email);
+            sl.push_back(a.addrSpec());
         }
-        sl += (*it).emailAliases();
     }
+
     return sl;
 }
 
@@ -98,21 +105,19 @@ QDate KSieveUi::VacationUtils::defaultEndDate()
 }
 
 
-bool KSieveUi::VacationUtils::parseScript( const QString &script, bool &active, QString &messageText,
-                            QString &subject,
-                            int & notificationInterval, QStringList &aliases,
-                            bool & sendForSpam, QString &domainName,
-                            QDate & startDate, QDate & endDate )
+KSieveUi::VacationUtils::Vacation KSieveUi::VacationUtils::parseScript(const QString &script)
 {
+    KSieveUi::VacationUtils::Vacation vacation;
     if ( script.trimmed().isEmpty() ) {
-        active = false;
-        messageText = VacationUtils::defaultMessageText();
-        subject = VacationUtils::defaultSubject();
-        notificationInterval = VacationUtils::defaultNotificationInterval();
-        aliases = VacationUtils::defaultMailAliases();
-        sendForSpam = VacationUtils::defaultSendForSpam();
-        domainName = VacationUtils::defaultDomainName();
-        return true;
+        vacation.valid = false;
+        vacation.active = false;
+        vacation.messageText = VacationUtils::defaultMessageText();
+        vacation.subject = VacationUtils::defaultSubject();
+        vacation.notificationInterval = VacationUtils::defaultNotificationInterval();
+        vacation.aliases = VacationUtils::defaultMailAliases();
+        vacation.sendForSpam = VacationUtils::defaultSendForSpam();
+        vacation.excludeDomain = VacationUtils::defaultDomainName();
+        return vacation;
     }
 
     // The trimmed() call below prevents parsing errors. The
@@ -130,65 +135,52 @@ bool KSieveUi::VacationUtils::parseScript( const QString &script, bool &active,
     parser.setScriptBuilder( &tsb );
     parser.parse();
     if ( !parser.parse() || !vdx.commandFound() ) {
-        active = false;
-        return false;
+        vacation.active = false;
+        vacation.valid = false;
+        return vacation;
     }
-    active = vdx.active();
-    messageText = vdx.messageText().trimmed();
+    vacation.valid = true;
+    vacation.active = vdx.active();
+    vacation.messageText = vdx.messageText().trimmed();
     if (!vdx.subject().isEmpty()) {
-        subject = vdx.subject().trimmed();
+        vacation.subject = vdx.subject().trimmed();
+    }
+    vacation.notificationInterval = vdx.notificationInterval();
+    vacation.aliases = KMime::Types::AddrSpecList();
+    foreach(const QString &alias, vdx.aliases()) {
+        KMime::Types::Mailbox a;
+        a.fromUnicodeString(alias);
+        vacation.aliases.append(a.addrSpec());
     }
-    notificationInterval = vdx.notificationInterval();
-    aliases = vdx.aliases();
 
-    if (!active && !vdx.ifComment().isEmpty()) {
+    if (!vacation.active && !vdx.ifComment().isEmpty()) {
         const QByteArray newScript = QString::fromAscii("if ").toUtf8() + vdx.ifComment().toUtf8() + QString::fromLatin1("{vacation;}").toUtf8();
         tsb = KSieveExt::MultiScriptBuilder( &sdx, &drdx, &dx );
         KSieve::Parser parser( newScript.begin(),
                            newScript.begin() + newScript.length() );
         parser.setScriptBuilder( &tsb );
         if ( !parser.parse() ) {
-            return false;
+            vacation.valid = false;
+            return vacation;
         }
     }
 
-    sendForSpam = !sdx.found();
-    domainName = drdx.domainName();
-    startDate = dx.startDate();
-    endDate = dx.endDate();
-    return true;
+    vacation.sendForSpam = !sdx.found();
+    vacation.excludeDomain = drdx.domainName();
+    vacation.startDate = dx.startDate();
+    vacation.endDate = dx.endDate();
+    return vacation;
 }
 
 bool KSieveUi::VacationUtils::foundVacationScript(const QString &script)
 {
-    const QByteArray scriptUTF8 = script.trimmed().toUtf8();
-    kDebug() << "scriptUtf8 = \"" + scriptUTF8 +"\"";
-
-    if (scriptUTF8.isEmpty()) {
-      return false;
-    }
-
-    KSieve::Parser parser( scriptUTF8.begin(),
-                           scriptUTF8.begin() + scriptUTF8.length() );
-    VacationDataExtractor vdx;
-    parser.setScriptBuilder(&vdx);
-    return parser.parse() && vdx.commandFound();
+    return parseScript(script).isValid();
 }
 
 bool KSieveUi::VacationUtils::vacationScriptActive(const QString &script)
 {
-    const QByteArray scriptUTF8 = script.trimmed().toUtf8();
-    kDebug() << "scriptUtf8 = \"" + scriptUTF8 +"\"";
-
-    if (scriptUTF8.isEmpty()) {
-      return false;
-    }
-
-    KSieve::Parser parser( scriptUTF8.begin(),
-                           scriptUTF8.begin() + scriptUTF8.length() );
-    VacationDataExtractor vdx;
-    parser.setScriptBuilder(&vdx);
-    return parser.parse() && vdx.commandFound() && vdx.active();
+    const KSieveUi::VacationUtils::Vacation vacation = parseScript(script);
+    return vacation.isValid() && vacation.active;
 }
 
 QString composeOldScript( const QString & messageText,
@@ -246,82 +238,77 @@ QString composeOldScript( const QString & messageText,
     return script;
 }
 
-QString KSieveUi::VacationUtils::composeScript( const QString & messageText, bool active,
-                                 const QString &subject,
-                                 int notificationInterval,
-                                 const AddrSpecList & addrSpecs,
-                                 bool sendForSpam, const QString & domain,
-                                 const QDate & startDate, const QDate & endDate )
+QString KSieveUi::VacationUtils::composeScript(const Vacation &vacation)
 {
     QStringList condition;
 
-    if (startDate.isValid()) {
+    if (vacation.startDate.isValid()) {
         condition.append(QString::fromLatin1("currentdate :value \"ge\" \"date\" \"%1\"")
-            .arg(startDate.toString(Qt::ISODate)));
+            .arg(vacation.startDate.toString(Qt::ISODate)));
     }
 
-    if (endDate.isValid()) {
+    if (vacation.endDate.isValid()) {
         condition.append(QString::fromLatin1("currentdate :value \"le\" \"date\" \"%1\"")
-            .arg(endDate.toString(Qt::ISODate)));
+            .arg(vacation.endDate.toString(Qt::ISODate)));
     }
 
-    if (!sendForSpam) {
+    if (!vacation.sendForSpam) {
         condition.append(QString::fromLatin1("not header :contains \"X-Spam-Flag\" \"YES\""));
     }
 
-    if (!domain.isEmpty()) {
-        condition.append(QString::fromLatin1("address :domain :contains \"from\" \"%1\"").arg( domain ));
+    if (!vacation.excludeDomain.isEmpty()) {
+        condition.append(QString::fromLatin1("address :domain :contains \"from\" \"%1\"").arg( vacation.excludeDomain ));
     }
 
     QString addressesArgument;
     QStringList aliases;
-    if ( !addrSpecs.empty() ) {
+    if ( !vacation.aliases.empty() ) {
         addressesArgument += QLatin1String(":addresses [ ");
         QStringList sl;
-        AddrSpecList::const_iterator end = addrSpecs.constEnd();
-        for ( AddrSpecList::const_iterator it = addrSpecs.begin() ; it != end; ++it ) {
+        AddrSpecList::const_iterator end = vacation.aliases.constEnd();
+        for ( AddrSpecList::const_iterator it = vacation.aliases.begin() ; it != end; ++it ) {
             sl.push_back( QLatin1Char('"') + (*it).asString().replace( QLatin1Char('\\'), QLatin1String("\\\\") ).replace( QLatin1Char('"'), QLatin1String("\\\"") ) + QLatin1Char('"') );
             aliases.push_back( (*it).asString() );
         }
         addressesArgument += sl.join( QLatin1String(", ") ) + QLatin1String(" ] ");
     }
 
-    QString vacation(QLatin1String("vacation "));
-    vacation += addressesArgument;
-    if ( notificationInterval > 0 )
-        vacation += QString::fromLatin1(":days %1 ").arg(notificationInterval);
+    QString sVacation(QLatin1String("vacation "));
+    sVacation += addressesArgument;
+    if ( vacation.notificationInterval > 0 )
+        sVacation += QString::fromLatin1(":days %1 ").arg(vacation.notificationInterval);
 
-    if (!subject.trimmed().isEmpty()) {
-        vacation += QString::fromLatin1(":subject \"%1\" ").arg(stringReplace(subject).trimmed());
+    if (!vacation.subject.trimmed().isEmpty()) {
+        sVacation += QString::fromLatin1(":subject \"%1\" ").arg(stringReplace(vacation.subject).trimmed());
     }
 
-    vacation += QString::fromLatin1("text:\n");
-    vacation += dotstuff( messageText.isEmpty() ? VacationUtils::defaultMessageText() : messageText );
-    vacation += QString::fromLatin1( "\n.\n;" );
+    sVacation += QString::fromLatin1("text:\n");
+    sVacation += dotstuff( vacation.messageText.isEmpty() ? VacationUtils::defaultMessageText() : vacation.messageText );
+    sVacation += QString::fromLatin1( "\n.\n;" );
 
     QString script;
 
-    if ( startDate.isValid() || endDate.isValid() ) {
+    if ( vacation.startDate.isValid() || vacation.endDate.isValid() ) {
         script = QString::fromLatin1("require [\"vacation\", \"relational\", \"date\"];\n\n" );
     } else {
         script = QString::fromLatin1("require \"vacation\";\n\n" );
     }
 
     if (condition.count() == 0) {
-        if (active) {
-            script += vacation;
+        if (vacation.active) {
+            script += sVacation;
         } else {
             script += QString::fromLatin1("if false\n{\n\t");
-            script += vacation;
+            script += sVacation;
             script += QLatin1String("\n}");
         }
     } else {
-        if (active) {
+        if (vacation.active) {
             script += QString::fromLatin1("if allof(%1)\n{\n\t").arg(condition.join(QLatin1String(", ")));
         } else {
             script += QString::fromLatin1("if false # allof(%1)\n{\n\t").arg(condition.join(QLatin1String(", ")));
         }
-        script += vacation;
+        script += sVacation;
         script += QLatin1String("\n}");
     }
 
@@ -405,9 +392,6 @@ QString KSieveUi::VacationUtils::updateVacationBlock(const QString &oldScript, c
 
     int startOld(0);
 
-    int startNew(vdxNew.lineStart());
-    int endNew(vdxNew.lineEnd());
-
     QStringList lines = oldScript.split(QLatin1Char('\n'));
 
     QString script;
diff --git a/libksieve/ksieveui/vacation/vacationutils.h b/libksieve/ksieveui/vacation/vacationutils.h
index daed23e..5179eb2 100644
--- a/libksieve/ksieveui/vacation/vacationutils.h
+++ b/libksieve/ksieveui/vacation/vacationutils.h
@@ -19,37 +19,39 @@
 #define VACATIONUTILS_H
 #include <QStringList>
 #include <QString>
-
-namespace KMime {
-namespace Types {
-struct AddrSpec;
-typedef QList<AddrSpec> AddrSpecList;
-}
-}
-
-class QDate;
+#include <QDate>
+#include <kmime/kmime_header_parsing.h>
 
 namespace KSieveUi {
 namespace VacationUtils {
 QString defaultMessageText();
 QString defaultSubject();
 int defaultNotificationInterval();
-QStringList defaultMailAliases();
+KMime::Types::AddrSpecList defaultMailAliases();
 bool defaultSendForSpam();
 QString defaultDomainName();
 QDate defaultStartDate();
 QDate defaultEndDate();
 
-QString composeScript( const QString & messageText, bool active, const QString &subject,
-                       int notificationInterval,
-                       const KMime::Types::AddrSpecList & aliases,
-                       bool sendForSpam, const QString & excludeDomain,
-                       const QDate & startDate, const QDate & endDate );
-bool parseScript( const QString & script, bool &active, QString & messageText,
-                  QString &subject,
-                  int & notificationInterval, QStringList & aliases,
-                  bool & sendForSpam, QString & domainName,
-                  QDate & startDate, QDate & endDate );
+struct Vacation {
+    Vacation():valid(false), active(false), notificationInterval(1), sendForSpam(true) {}
+    bool isValid() const {return valid;}
+
+    bool valid;
+    QString messageText;
+    QString subject;
+    bool active;
+    int notificationInterval;
+    KMime::Types::AddrSpecList aliases;
+    bool sendForSpam;
+    QString excludeDomain;
+    QDate startDate;
+    QDate endDate;
+};
+
+QString composeScript(const Vacation &vacation);
+
+KSieveUi::VacationUtils::Vacation parseScript(const QString &script);
 
 //returns if a vacation script is found in the sieve script
 bool foundVacationScript(const QString &script);





More information about the commits mailing list