diff --git a/resources/imap/setupserver.h b/resources/imap/setupserver.h
--- a/resources/imap/setupserver.h
+++ b/resources/imap/setupserver.h
@@ -93,6 +93,7 @@
KPIMIdentities::IdentityCombo *m_identityCombobox;
QString m_oldResourceName;
QRegExpValidator mValidator;
+ QRegExpValidator mSieveUrlValidator;
Akonadi::Collection mOldTrash;
FolderArchiveSettingPage *m_folderArchiveSettingPage;
diff --git a/resources/imap/setupserver.cpp b/resources/imap/setupserver.cpp
--- a/resources/imap/setupserver.cpp
+++ b/resources/imap/setupserver.cpp
@@ -149,6 +149,10 @@
mValidator.setRegExp( QRegExp( QLatin1String("[A-Za-z0-9-_:.]*") ) );
m_ui->imapServer->setValidator( &mValidator );
+ // regex for evaluating a valid sieve url
+ mSieveUrlValidator.setRegExp(QRegExp(QLatin1String("(sieve://)?[A-Za-z0-9-_.]*(:[0-9]+)?(/.*)?")));
+ m_ui->alternateURL->setValidator(&mSieveUrlValidator);
+
m_ui->folderRequester->setMimeTypeFilter(
QStringList() << KMime::Message::mimeType() );
m_ui->folderRequester->setAccessRightsFilter( Akonadi::Collection::CanChangeItem | Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanDeleteItem );
@@ -187,6 +191,7 @@
slotTestChanged();
slotComplete();
slotCustomSieveChanged();
+ slotEnableWidgets();
#ifndef IMAPRESOURCE_NO_SOLID
connect( Solid::Networking::notifier(),
SIGNAL(statusChanged(Solid::Networking::Status)),
@@ -290,7 +295,19 @@
m_parentResource->settings()->setSieveSupport( m_ui->managesieveCheck->isChecked() );
m_parentResource->settings()->setSieveReuseConfig( m_ui->sameConfigCheck->isChecked() );
m_parentResource->settings()->setSievePort( m_ui->sievePortSpin->value() );
- m_parentResource->settings()->setSieveAlternateUrl( m_ui->alternateURL->text() );
+ if (!m_ui->alternateURL->text().isEmpty()) {
+ QRegExp sieveurl(QLatin1String("(sieve://)?([A-Za-z0-9-_.]+)(:[0-9]+)?((/|\\?).*)?"));
+ sieveurl.exactMatch(m_ui->alternateURL->text());
+ QString server = sieveurl.cap(2);
+ QString port = sieveurl.cap(3);
+ QString localPart = sieveurl.cap(4);
+ if (port.isEmpty()) {
+ port = QLatin1String(":4190");
+ }
+ m_parentResource->settings()->setSieveAlternateUrl(QLatin1String("sieve://")+server+port+localPart);
+ } else {
+ m_parentResource->settings()->setSieveAlternateUrl(QString());
+ }
m_parentResource->settings()->setSieveVacationFilename( m_vacationFileName );
m_parentResource->settings()->setTrashCollection( m_ui->folderRequester->collection().id() );
diff --git a/resources/imap/setupserverview_desktop.ui b/resources/imap/setupserverview_desktop.ui
--- a/resources/imap/setupserverview_desktop.ui
+++ b/resources/imap/setupserverview_desktop.ui
@@ -231,6 +231,9 @@
-
+
+ sieve://server:port
+
true
diff --git a/resources/kolab/setupserver.h b/resources/kolab/setupserver.h
--- a/resources/kolab/setupserver.h
+++ b/resources/kolab/setupserver.h
@@ -93,6 +93,7 @@
KPIMIdentities::IdentityCombo *m_identityCombobox;
QString m_oldResourceName;
QRegExpValidator mValidator;
+ QRegExpValidator mSieveUrlValidator;
Akonadi::Collection mOldTrash;
FolderArchiveSettingPage *m_folderArchiveSettingPage;
diff --git a/resources/kolab/setupserver.cpp b/resources/kolab/setupserver.cpp
--- a/resources/kolab/setupserver.cpp
+++ b/resources/kolab/setupserver.cpp
@@ -153,6 +153,10 @@
mValidator.setRegExp( QRegExp( QLatin1String("[A-Za-z0-9-_:.]*") ) );
m_ui->imapServer->setValidator( &mValidator );
+ // regex for evaluating a valid sieve url
+ mSieveUrlValidator.setRegExp(QRegExp(QLatin1String("(sieve://)?[A-Za-z0-9-_.]*(:[0-9]+)?((/|\\?).*)?")));
+ m_ui->alternateURL->setValidator(&mSieveUrlValidator);
+
m_ui->folderRequester->setMimeTypeFilter(
QStringList() << KMime::Message::mimeType() );
m_ui->folderRequester->setAccessRightsFilter( Akonadi::Collection::CanChangeItem | Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanDeleteItem );
@@ -191,6 +195,7 @@
slotTestChanged();
slotComplete();
slotCustomSieveChanged();
+ slotEnableWidgets();
#ifndef IMAPRESOURCE_NO_SOLID
connect( Solid::Networking::notifier(),
SIGNAL(statusChanged(Solid::Networking::Status)),
@@ -294,7 +299,19 @@
m_parentResource->settings()->setSieveSupport( m_ui->managesieveCheck->isChecked() );
m_parentResource->settings()->setSieveReuseConfig( m_ui->sameConfigCheck->isChecked() );
m_parentResource->settings()->setSievePort( m_ui->sievePortSpin->value() );
- m_parentResource->settings()->setSieveAlternateUrl( m_ui->alternateURL->text() );
+ if (!m_ui->alternateURL->text().isEmpty()) {
+ QRegExp sieveurl(QLatin1String("(sieve://)?([A-Za-z0-9-_.]+)(:[0-9]+)?((/|\\?).*)?"));
+ sieveurl.exactMatch(m_ui->alternateURL->text());
+ QString server = sieveurl.cap(2);
+ QString port = sieveurl.cap(3);
+ QString localPart = sieveurl.cap(4);
+ if (port.isEmpty()) {
+ port = QLatin1String(":4190");
+ }
+ m_parentResource->settings()->setSieveAlternateUrl(QLatin1String("sieve://")+server+port+localPart);
+ } else {
+ m_parentResource->settings()->setSieveAlternateUrl(QString());
+ }
m_parentResource->settings()->setSieveVacationFilename( m_vacationFileName );
m_parentResource->settings()->setTrashCollection( m_ui->folderRequester->collection().id() );
diff --git a/resources/kolab/setupserverview_desktop.ui b/resources/kolab/setupserverview_desktop.ui
--- a/resources/kolab/setupserverview_desktop.ui
+++ b/resources/kolab/setupserverview_desktop.ui
@@ -245,6 +245,9 @@
-
+
+ sieve://server:port
+
true