Index: libksieve/ksieveui/vacation/tests/main.cpp =================================================================== --- libksieve/ksieveui/vacation/tests/main.cpp +++ libksieve/ksieveui/vacation/tests/main.cpp @@ -29,7 +29,7 @@ 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); Index: libksieve/ksieveui/vacation/tests/vacationutilstest.cpp =================================================================== --- libksieve/ksieveui/vacation/tests/vacationutilstest.cpp +++ libksieve/ksieveui/vacation/tests/vacationutilstest.cpp @@ -27,18 +27,35 @@ 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; - 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() @@ -65,21 +82,10 @@ QFile file(QLatin1String(VACATIONTESTDATADIR)+filename); QVERIFY(file.open(QIODevice::ReadOnly)); 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 +109,18 @@ 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 +129,96 @@ 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@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@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@test.de"); - QList 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(), 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(), 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() Index: libksieve/ksieveui/vacation/vacation.cpp =================================================================== --- libksieve/ksieveui/vacation/vacation.cpp +++ libksieve/ksieveui/vacation/vacation.cpp @@ -107,40 +107,34 @@ 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 @@ 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; Index: libksieve/ksieveui/vacation/vacationcheckjob.h =================================================================== --- libksieve/ksieveui/vacation/vacationcheckjob.h +++ libksieve/ksieveui/vacation/vacationcheckjob.h @@ -52,7 +52,6 @@ void emitError(const QString &errorMessage); void searchVacationScript(); void getNextScript(); - bool isVacationScipt(const QString &script) const; bool isLastScript() const; private: Index: libksieve/ksieveui/vacation/vacationcheckjob.cpp =================================================================== --- libksieve/ksieveui/vacation/vacationcheckjob.cpp +++ libksieve/ksieveui/vacation/vacationcheckjob.cpp @@ -85,9 +85,10 @@ 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 @@ return mScriptPos >= mAvailableScripts.count(); } -bool VacationCheckJob::isVacationScipt(const QString &script) const -{ - return KSieveUi::VacationUtils::foundVacationScript(script); -} - bool VacationCheckJob::noScriptFound() { return mNoScriptFound; Index: libksieve/ksieveui/vacation/vacationeditwidget.cpp =================================================================== --- libksieve/ksieveui/vacation/vacationeditwidget.cpp +++ libksieve/ksieveui/vacation/vacationeditwidget.cpp @@ -316,7 +316,7 @@ 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 ); Index: libksieve/ksieveui/vacation/vacationpagewidget.cpp =================================================================== --- libksieve/ksieveui/vacation/vacationpagewidget.cpp +++ libksieve/ksieveui/vacation/vacationpagewidget.cpp @@ -123,37 +123,27 @@ // 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.trimmed().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 @@ 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); Index: libksieve/ksieveui/vacation/vacationutils.h =================================================================== --- libksieve/ksieveui/vacation/vacationutils.h +++ libksieve/ksieveui/vacation/vacationutils.h @@ -19,43 +19,39 @@ #define VACATIONUTILS_H #include #include - -namespace KMime { -namespace Types { -struct AddrSpec; -typedef QList AddrSpecList; -} -} - -class QDate; +#include +#include 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 ); - -//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); +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); QString mergeRequireLine(const QString &script1, const QString script2); Index: libksieve/ksieveui/vacation/vacationutils.cpp =================================================================== --- libksieve/ksieveui/vacation/vacationutils.cpp +++ libksieve/ksieveui/vacation/vacationutils.cpp @@ -64,17 +64,24 @@ 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 @@ } -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,41 @@ 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; -} - -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(); -} - -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(); + vacation.sendForSpam = !sdx.found(); + vacation.excludeDomain = drdx.domainName(); + vacation.startDate = dx.startDate(); + vacation.endDate = dx.endDate(); + return vacation; } QString composeOldScript( const QString & messageText, @@ -246,82 +227,77 @@ 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 +381,6 @@ int startOld(0); - int startNew(vdxNew.lineStart()); - int endNew(vdxNew.lineEnd()); - QStringList lines = oldScript.split(QLatin1Char('\n')); QString script;