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