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