You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1504 lines
58 KiB
1504 lines
58 KiB
/* |
|
* kmail: KDE mail client |
|
* Copyright (C) 2000 Espen Sand, espen@kde.org |
|
* |
|
* This program is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation; either version 2 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License along |
|
* with this program; if not, write to the Free Software Foundation, Inc., |
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
* |
|
*/ |
|
#include "accountdialog.h" |
|
#include "sieveconfig.h" |
|
#include "kmacctmaildir.h" |
|
#include "kmacctlocal.h" |
|
#include "accountmanager.h" |
|
#include "popaccount.h" |
|
#include "kmacctimap.h" |
|
#include "kmacctcachedimap.h" |
|
#include "kmfoldermgr.h" |
|
#include "protocols.h" |
|
#include "folderrequester.h" |
|
#include "mainfolderview.h" |
|
#include "kmmainwidget.h" |
|
#include "kmfolder.h" |
|
#include <kpimidentities/identitymanager.h> |
|
#include <kpimidentities/identitycombo.h> |
|
#include <kpimidentities/identity.h> |
|
#include <mailtransport/servertest.h> |
|
using namespace MailTransport; |
|
#include "globalsettings.h" |
|
#include "procmailparser.h" |
|
|
|
#include <KComboBox> |
|
#include <KGlobalSettings> |
|
#include <KFileDialog> |
|
#include <KLocale> |
|
#include <KDebug> |
|
#include <KMessageBox> |
|
#include <KNumInput> |
|
#include <KSeparator> |
|
#include <KProtocolInfo> |
|
#include <KIconLoader> |
|
#include <KMenu> |
|
|
|
#include <QButtonGroup> |
|
#include <QCheckBox> |
|
#include <QLayout> |
|
#include <QRadioButton> |
|
#include <QValidator> |
|
#include <QLabel> |
|
#include <QPushButton> |
|
#include <QToolButton> |
|
#include <QGroupBox> |
|
#include <QGridLayout> |
|
#include <QVBoxLayout> |
|
#include <QHBoxLayout> |
|
|
|
namespace { |
|
|
|
class BusyCursorHelper : public QObject |
|
{ |
|
public: |
|
inline BusyCursorHelper( QObject *parent ) |
|
: QObject( parent ) |
|
{ |
|
qApp->setOverrideCursor( Qt::BusyCursor ); |
|
} |
|
|
|
inline ~BusyCursorHelper() |
|
{ |
|
qApp->restoreOverrideCursor(); |
|
} |
|
}; |
|
|
|
} |
|
|
|
namespace KMail { |
|
|
|
|
|
AccountDialog::AccountDialog( const QString & caption, KMAccount *account, |
|
QWidget *parent ) |
|
: KDialog( parent ), |
|
mAccount( account ), |
|
mServerTest( 0 ), |
|
mSieveConfigEditor( 0 ) |
|
{ |
|
setCaption( caption ); |
|
setButtons( Ok|Cancel|Help ); |
|
mValidator = new QRegExpValidator( QRegExp( "[A-Za-z0-9-_:.]*" ), 0 ); |
|
setHelp("receiving-mail"); |
|
|
|
KAccount::Type accountType = mAccount->type(); |
|
|
|
if( accountType == KAccount::Local ) |
|
{ |
|
makeLocalAccountPage(); |
|
} |
|
else if( accountType == KAccount::Maildir ) |
|
{ |
|
makeMaildirAccountPage(); |
|
} |
|
else if( accountType == KAccount::Pop ) |
|
{ |
|
makePopAccountPage(); |
|
} |
|
else if( accountType == KAccount::Imap ) |
|
{ |
|
makeImapAccountPage(); |
|
} |
|
else if( accountType == KAccount::DImap ) |
|
{ |
|
makeImapAccountPage(true); |
|
} |
|
else |
|
{ |
|
QString msg = i18n( "Account type is not supported." ); |
|
KMessageBox::information( topLevelWidget(),msg,i18n("Configure Account") ); |
|
return; |
|
} |
|
|
|
setupSettings(); |
|
connect(this,SIGNAL(okClicked()),this,SLOT(slotOk())); |
|
} |
|
|
|
AccountDialog::~AccountDialog() |
|
{ |
|
delete mValidator; |
|
mValidator = 0; |
|
delete mServerTest; |
|
mServerTest = 0; |
|
} |
|
|
|
void AccountDialog::makeLocalAccountPage() |
|
{ |
|
QWidget *page = new QWidget( this ); |
|
mLocal.ui.setupUi( page ); |
|
setMainWidget( page ); |
|
|
|
ProcmailRCParser procmailrcParser; |
|
mLocal.ui.locationEdit->addItems( procmailrcParser.getSpoolFilesList() ); |
|
mLocal.ui.choose->setAutoDefault( false ); |
|
mLocal.ui.procmailLockFileName->addItems( procmailrcParser.getLockFilesList() ); |
|
mLocal.ui.intervalSpin->setRange( GlobalSettings::self()->minimumCheckInterval(), 10000, 1 ); |
|
|
|
connect( mLocal.ui.choose, SIGNAL(clicked()), this, SLOT(slotLocationChooser()) ); |
|
connect( mLocal.ui.lockProcmail, SIGNAL(toggled(bool)), |
|
mLocal.ui.procmailLockFileName, SLOT(setEnabled(bool)) ); |
|
connect( mLocal.ui.intervalCheck, SIGNAL(toggled(bool)), |
|
this, SLOT(slotEnableLocalInterval(bool)) ); |
|
connect( KGlobalSettings::self(),SIGNAL(kdisplayFontChanged()), |
|
SLOT(slotFontChanged()) ); |
|
} |
|
|
|
void AccountDialog::makeMaildirAccountPage() |
|
{ |
|
QWidget *page = new QWidget( this ); |
|
mMaildir.ui.setupUi( page ); |
|
setMainWidget( page ); |
|
ProcmailRCParser procmailrcParser; |
|
|
|
mMaildir.ui.locationEdit->addItems( procmailrcParser.getSpoolFilesList() ); |
|
mMaildir.ui.choose->setAutoDefault( false ); |
|
mMaildir.ui.intervalSpin->setRange( GlobalSettings::self()->minimumCheckInterval(), 10000, 1 ); |
|
|
|
connect( mMaildir.ui.choose, SIGNAL(clicked()), |
|
this, SLOT(slotMaildirChooser()) ); |
|
connect( mMaildir.ui.intervalCheck, SIGNAL(toggled(bool)), |
|
this, SLOT(slotEnableMaildirInterval(bool)) ); |
|
connect( KGlobalSettings::self(),SIGNAL(kdisplayFontChanged()), |
|
SLOT(slotFontChanged()) ); |
|
} |
|
|
|
|
|
void AccountDialog::makePopAccountPage() |
|
{ |
|
QWidget *page = new QWidget( this ); |
|
mPop.ui.setupUi( page ); |
|
setMainWidget( page ); |
|
|
|
connect( mPop.ui.passwordEdit, SIGNAL( textEdited( const QString& ) ), |
|
this, SLOT( slotPopPasswordChanged( const QString& ) ) ); |
|
|
|
// only letters, digits, '-', '.', ':' (IPv6) and '_' (for Windows |
|
// compatibility) are allowed |
|
mPop.ui.hostEdit->setValidator( mValidator ); |
|
|
|
connect( mPop.ui.leaveOnServerCheck, SIGNAL( clicked() ), |
|
this, SLOT( slotLeaveOnServerClicked() ) ); |
|
connect( mPop.ui.leaveOnServerDaysCheck, SIGNAL( toggled(bool) ), |
|
this, SLOT( slotEnableLeaveOnServerDays(bool)) ); |
|
connect( mPop.ui.leaveOnServerDaysSpin, SIGNAL(valueChanged(int)), |
|
SLOT(slotLeaveOnServerDaysChanged(int))); |
|
connect( mPop.ui.leaveOnServerCountCheck, SIGNAL( toggled(bool) ), |
|
this, SLOT( slotEnableLeaveOnServerCount(bool)) ); |
|
connect( mPop.ui.leaveOnServerCountSpin, SIGNAL(valueChanged(int)), |
|
SLOT(slotLeaveOnServerCountChanged(int))); |
|
connect( mPop.ui.leaveOnServerSizeCheck, SIGNAL( toggled(bool) ), |
|
this, SLOT( slotEnableLeaveOnServerSize(bool)) ); |
|
|
|
connect(mPop.ui.filterOnServerSizeSpin, SIGNAL(valueChanged(int)), |
|
SLOT(slotFilterOnServerSizeChanged(int))); |
|
connect( mPop.ui.filterOnServerCheck, SIGNAL(toggled(bool)), |
|
mPop.ui.filterOnServerSizeSpin, SLOT(setEnabled(bool)) ); |
|
connect( mPop.ui.filterOnServerCheck, SIGNAL( clicked() ), |
|
this, SLOT( slotFilterOnServerClicked() ) ); |
|
|
|
connect( mPop.ui.intervalCheck, SIGNAL(toggled(bool)), |
|
this, SLOT(slotEnablePopInterval(bool)) ); |
|
mPop.ui.intervalSpin->setRange( GlobalSettings::self()->minimumCheckInterval(), |
|
10000, 1 ); |
|
|
|
// Page 2 |
|
connect( mPop.ui.checkCapabilities, SIGNAL(clicked()), |
|
SLOT(slotCheckPopCapabilities()) ); |
|
mPop.encryptionButtonGroup = new QButtonGroup(); |
|
mPop.encryptionButtonGroup->addButton( mPop.ui.encryptionNone, |
|
Transport::EnumEncryption::None ); |
|
mPop.encryptionButtonGroup->addButton( mPop.ui.encryptionSSL, |
|
Transport::EnumEncryption::SSL ); |
|
mPop.encryptionButtonGroup->addButton( mPop.ui.encryptionTLS, |
|
Transport::EnumEncryption::TLS ); |
|
|
|
connect( mPop.encryptionButtonGroup, SIGNAL(buttonClicked(int)), |
|
SLOT(slotPopEncryptionChanged(int)) ); |
|
|
|
if ( KProtocolInfo::capabilities("pop3").contains("SASL") == 0 ) |
|
{ |
|
mPop.ui.authNTLM->hide(); |
|
mPop.ui.authGSSAPI->hide(); |
|
} |
|
mPop.authButtonGroup = new QButtonGroup(); |
|
mPop.authButtonGroup->addButton( mPop.ui.authUser ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authLogin ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authPlain ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authCRAM_MD5 ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authDigestMd5 ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authNTLM ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authGSSAPI ); |
|
mPop.authButtonGroup->addButton( mPop.ui.authAPOP ); |
|
|
|
connect( mPop.ui.usePipeliningCheck, SIGNAL(clicked()), |
|
SLOT(slotPipeliningClicked()) ); |
|
|
|
connect(KGlobalSettings::self(),SIGNAL(kdisplayFontChanged()), |
|
SLOT(slotFontChanged())); |
|
} |
|
|
|
|
|
void AccountDialog::makeImapAccountPage( bool connected ) |
|
{ |
|
QWidget *page = new QWidget( this ); |
|
mImap.ui.setupUi( page ); |
|
setMainWidget( page ); |
|
if( connected ) |
|
mImap.ui.titleLabel->setText( i18n("Account Type: Disconnected IMAP Account") ); |
|
else |
|
mImap.ui.titleLabel->setText( i18n("Account Type: IMAP Account") ); |
|
|
|
// only letters, digits, '-', '.', ':' (IPv6) and '_' (for Windows |
|
// compatibility) are allowed |
|
mImap.ui.hostEdit->setValidator( mValidator ); |
|
|
|
mImap.ui.button->setAutoRaise( true ); |
|
mImap.ui.button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); |
|
mImap.ui.button->setFixedSize( 22, 22 ); |
|
mImap.ui.button->setIcon( KIcon("view-refresh") ); |
|
mImap.ui.editPNS->setIcon( KIcon("document-properties") ); |
|
mImap.ui.editPNS->setFixedSize( 22, 22 ); |
|
mImap.ui.editONS->setIcon( KIcon("document-properties") ); |
|
mImap.ui.editONS->setFixedSize( 22, 22 ); |
|
mImap.ui.editSNS->setIcon( KIcon("document-properties") ); |
|
mImap.ui.editSNS->setFixedSize( 22, 22 ); |
|
|
|
if( connected ) { |
|
// not implemented for disconnected yet |
|
mImap.ui.autoExpungeCheck->hide(); |
|
mImap.ui.loadOnDemandCheck->hide(); |
|
mImap.ui.listOnlyOpenCheck->hide(); |
|
} |
|
|
|
mImap.trashCombo = new FolderRequester( page, |
|
kmkernel->getKMMainWidget()->mainFolderView() ); |
|
mImap.trashCombo->setShowOutbox( false ); |
|
mImap.ui.trashLabel->setBuddy( mImap.trashCombo ); |
|
mImap.ui.trashLayout->addWidget( mImap.trashCombo, 1 ); |
|
mImap.ui.trashLabel->setBuddy( mImap.trashCombo ); |
|
|
|
mImap.identityCombo = new KPIMIdentities::IdentityCombo( kmkernel->identityManager(), page ); |
|
mImap.ui.identityLabel->setBuddy( mImap.identityCombo ); |
|
mImap.ui.identityLayout->addWidget( mImap.identityCombo, 1 ); |
|
mImap.ui.identityLabel->setBuddy( mImap.identityCombo ); |
|
|
|
mImap.encryptionButtonGroup = new QButtonGroup(); |
|
mImap.encryptionButtonGroup->addButton( mImap.ui.encryptionNone, |
|
Transport::EnumEncryption::None ); |
|
mImap.encryptionButtonGroup->addButton( mImap.ui.encryptionSSL, |
|
Transport::EnumEncryption::SSL ); |
|
mImap.encryptionButtonGroup->addButton( mImap.ui.encryptionTLS, |
|
Transport::EnumEncryption::TLS ); |
|
|
|
mImap.authButtonGroup = new QButtonGroup(); |
|
mImap.authButtonGroup->addButton( mImap.ui.authUser ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authLogin ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authPlain ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authCramMd5 ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authDigestMd5 ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authNTLM ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authGSSAPI ); |
|
mImap.authButtonGroup->addButton( mImap.ui.authAnonymous ); |
|
|
|
// Connect all slots. |
|
connect( mImap.ui.button, SIGNAL(clicked()), this, SLOT(slotReloadNamespaces()) ); |
|
connect( mImap.ui.editPNS, SIGNAL(clicked()), this, SLOT(slotEditPersonalNamespace()) ); |
|
connect( mImap.ui.editONS, SIGNAL(clicked()), this, SLOT(slotEditOtherUsersNamespace()) ); |
|
connect( mImap.ui.editSNS, SIGNAL(clicked()), this, SLOT(slotEditSharedNamespace()) ); |
|
connect( mImap.ui.intervalCheck, SIGNAL(toggled(bool)), this, SLOT(slotEnableImapInterval(bool)) ); |
|
connect( mImap.ui.useDefaultIdentityCheck, SIGNAL( toggled(bool) ), this, SLOT( slotIdentityCheckboxChanged() ) ); |
|
connect( mImap.ui.checkCapabilities, SIGNAL(clicked()), SLOT(slotCheckImapCapabilities())); |
|
connect( mImap.encryptionButtonGroup, SIGNAL(buttonClicked(int)), SLOT(slotImapEncryptionChanged(int)) ); |
|
|
|
// TODO (marc/bo): Test this |
|
mSieveConfigEditor = new SieveConfigEditor( mImap.ui.tabWidget ); |
|
mSieveConfigEditor->layout()->setMargin( KDialog::marginHint() ); |
|
mImap.ui.tabWidget->addTab( mSieveConfigEditor, i18n("Filtering") ); |
|
|
|
connect( KGlobalSettings::self(),SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged()) ); |
|
} |
|
|
|
|
|
void AccountDialog::setupSettings() |
|
{ |
|
KComboBox *folderCombo = 0; |
|
bool intervalCheckingEnabled = ( mAccount->checkInterval() > 0 ); |
|
int interval = mAccount->checkInterval(); |
|
if ( !intervalCheckingEnabled ) // Default to 5 minutes when the user enables |
|
interval = 5; // interval checking for the first time |
|
|
|
KAccount::Type accountType = mAccount->type(); |
|
if( accountType == KAccount::Local ) |
|
{ |
|
ProcmailRCParser procmailrcParser; |
|
KMAcctLocal *acctLocal = static_cast<KMAcctLocal*>(mAccount); |
|
|
|
if ( acctLocal->location().isEmpty() ) |
|
acctLocal->setLocation( procmailrcParser.getSpoolFilesList().first() ); |
|
else |
|
mLocal.ui.locationEdit->addItem( acctLocal->location() ); |
|
|
|
if ( acctLocal->procmailLockFileName().isEmpty() ) |
|
acctLocal->setProcmailLockFileName( procmailrcParser.getLockFilesList().first() ); |
|
else |
|
mLocal.ui.procmailLockFileName->addItem( acctLocal->procmailLockFileName() ); |
|
|
|
mLocal.ui.nameEdit->setText( mAccount->name() ); |
|
mLocal.ui.nameEdit->setFocus(); |
|
mLocal.ui.locationEdit->setEditText( acctLocal->location() ); |
|
if (acctLocal->lockType() == mutt_dotlock) |
|
mLocal.ui.lockMutt->setChecked(true); |
|
else if (acctLocal->lockType() == mutt_dotlock_privileged) |
|
mLocal.ui.lockMuttPriv->setChecked(true); |
|
else if (acctLocal->lockType() == procmail_lockfile) { |
|
mLocal.ui.lockProcmail->setChecked(true); |
|
mLocal.ui.procmailLockFileName->setEditText(acctLocal->procmailLockFileName()); |
|
} else if (acctLocal->lockType() == FCNTL) |
|
mLocal.ui.lockFcntl->setChecked(true); |
|
else if (acctLocal->lockType() == lock_none) |
|
mLocal.ui.lockNone->setChecked(true); |
|
|
|
mLocal.ui.intervalSpin->setValue( interval ); |
|
mLocal.ui.intervalCheck->setChecked( intervalCheckingEnabled ); |
|
mLocal.ui.includeInCheck->setChecked( !mAccount->checkExclude() ); |
|
mLocal.ui.precommand->setText( mAccount->precommand() ); |
|
|
|
slotEnableLocalInterval( intervalCheckingEnabled ); |
|
folderCombo = mLocal.ui.folderCombo; |
|
} |
|
else if( accountType == KAccount::Pop ) |
|
{ |
|
PopAccount &ap = *(PopAccount*)mAccount; |
|
mPop.ui.nameEdit->setText( mAccount->name() ); |
|
mPop.ui.nameEdit->setFocus(); |
|
mPop.ui.loginEdit->setText( ap.login() ); |
|
mPop.ui.passwordEdit->setText( ap.passwd()); |
|
mPop.ui.hostEdit->setText( ap.host() ); |
|
mPop.ui.portEdit->setValue( ap.port() ); |
|
mPop.ui.usePipeliningCheck->setChecked( ap.usePipelining() ); |
|
mPop.ui.storePasswordCheck->setChecked( ap.storePasswd() ); |
|
mPop.ui.leaveOnServerCheck->setChecked( ap.leaveOnServer() ); |
|
mPop.ui.leaveOnServerDaysCheck->setEnabled( ap.leaveOnServer() ); |
|
mPop.ui.leaveOnServerDaysCheck->setChecked( ap.leaveOnServerDays() >= 1 ); |
|
mPop.ui.leaveOnServerDaysSpin->setValue( ap.leaveOnServerDays() >= 1 ? |
|
ap.leaveOnServerDays() : 7 ); |
|
mPop.ui.leaveOnServerCountCheck->setEnabled( ap.leaveOnServer() ); |
|
mPop.ui.leaveOnServerCountCheck->setChecked( ap.leaveOnServerCount() >= 1 ); |
|
mPop.ui.leaveOnServerCountSpin->setValue( ap.leaveOnServerCount() >= 1 ? |
|
ap.leaveOnServerCount() : 100 ); |
|
mPop.ui.leaveOnServerSizeCheck->setEnabled( ap.leaveOnServer() ); |
|
mPop.ui.leaveOnServerSizeCheck->setChecked( ap.leaveOnServerSize() >= 1 ); |
|
mPop.ui.leaveOnServerSizeSpin->setValue( ap.leaveOnServerSize() >= 1 ? |
|
ap.leaveOnServerSize() : 10 ); |
|
mPop.ui.filterOnServerCheck->setChecked( ap.filterOnServer() ); |
|
mPop.ui.filterOnServerSizeSpin->setValue( ap.filterOnServerCheckSize() ); |
|
mPop.ui.intervalCheck->setChecked( intervalCheckingEnabled ); |
|
mPop.ui.intervalSpin->setValue( interval ); |
|
mPop.ui.includeInCheck->setChecked( !mAccount->checkExclude() ); |
|
mPop.ui.precommand->setText( ap.precommand() ); |
|
if (ap.useSSL()) |
|
mPop.ui.encryptionSSL->setChecked( true ); |
|
else if (ap.useTLS()) |
|
mPop.ui.encryptionTLS->setChecked( true ); |
|
else mPop.ui.encryptionNone->setChecked( true ); |
|
if (ap.auth() == "LOGIN") |
|
mPop.ui.authLogin->setChecked( true ); |
|
else if (ap.auth() == "PLAIN") |
|
mPop.ui.authPlain->setChecked( true ); |
|
else if (ap.auth() == "CRAM-MD5") |
|
mPop.ui.authCRAM_MD5->setChecked( true ); |
|
else if (ap.auth() == "DIGEST-MD5") |
|
mPop.ui.authDigestMd5->setChecked( true ); |
|
else if (ap.auth() == "NTLM") |
|
mPop.ui.authNTLM->setChecked( true ); |
|
else if (ap.auth() == "GSSAPI") |
|
mPop.ui.authGSSAPI->setChecked( true ); |
|
else if (ap.auth() == "APOP") |
|
mPop.ui.authAPOP->setChecked( true ); |
|
else mPop.ui.authUser->setChecked( true ); |
|
|
|
slotEnableLeaveOnServerDays( mPop.ui.leaveOnServerDaysCheck->isEnabled() ? |
|
ap.leaveOnServerDays() >= 1 : 0); |
|
slotEnableLeaveOnServerCount( mPop.ui.leaveOnServerCountCheck->isEnabled() ? |
|
ap.leaveOnServerCount() >= 1 : 0); |
|
slotEnableLeaveOnServerSize( mPop.ui.leaveOnServerSizeCheck->isEnabled() ? |
|
ap.leaveOnServerSize() >= 1 : 0); |
|
slotEnablePopInterval( intervalCheckingEnabled ); |
|
folderCombo = mPop.ui.folderCombo; |
|
} |
|
else if( accountType == KAccount::Imap ) |
|
{ |
|
KMAcctImap &ai = *(KMAcctImap*)mAccount; |
|
mImap.ui.nameEdit->setText( mAccount->name() ); |
|
mImap.ui.nameEdit->setFocus(); |
|
mImap.ui.loginEdit->setText( ai.login() ); |
|
mImap.ui.passwordEdit->setText( ai.passwd()); |
|
mImap.ui.hostEdit->setText( ai.host() ); |
|
mImap.ui.portEdit->setValue( ai.port() ); |
|
mImap.ui.autoExpungeCheck->setChecked( ai.autoExpunge() ); |
|
mImap.ui.hiddenFoldersCheck->setChecked( ai.hiddenFolders() ); |
|
mImap.ui.subscribedFoldersCheck->setChecked( ai.onlySubscribedFolders() ); |
|
mImap.ui.locallySubscribedFoldersCheck->setChecked( ai.onlyLocallySubscribedFolders() ); |
|
mImap.ui.loadOnDemandCheck->setChecked( ai.loadOnDemand() ); |
|
mImap.ui.listOnlyOpenCheck->setChecked( ai.listOnlyOpenFolders() ); |
|
mImap.ui.storePasswordCheck->setChecked( ai.storePasswd() ); |
|
mImap.ui.intervalCheck->setChecked( intervalCheckingEnabled ); |
|
mImap.ui.intervalSpin->setValue( interval); |
|
mImap.ui.includeInCheck->setChecked( !ai.checkExclude() ); |
|
QString trashfolder = ai.trash(); |
|
if (trashfolder.isEmpty()) |
|
trashfolder = kmkernel->trashFolder()->idString(); |
|
mImap.trashCombo->setFolder( trashfolder ); |
|
slotEnableImapInterval( intervalCheckingEnabled ); |
|
mImap.identityCombo->setCurrentIdentity( mAccount->identityId() ); |
|
mImap.ui.useDefaultIdentityCheck->setChecked( mAccount->useDefaultIdentity() ); |
|
//mImap.identityCombo->insertStringList( kmkernel->identityManager()->shadowIdentities() ); |
|
if (ai.useSSL()) |
|
mImap.ui.encryptionSSL->setChecked( true ); |
|
else if (ai.useTLS()) |
|
mImap.ui.encryptionTLS->setChecked( true ); |
|
else mImap.ui.encryptionNone->setChecked( true ); |
|
if (ai.auth() == "CRAM-MD5") |
|
mImap.ui.authCramMd5->setChecked( true ); |
|
else if (ai.auth() == "DIGEST-MD5") |
|
mImap.ui.authDigestMd5->setChecked( true ); |
|
else if (ai.auth() == "NTLM") |
|
mImap.ui.authNTLM->setChecked( true ); |
|
else if (ai.auth() == "GSSAPI") |
|
mImap.ui.authGSSAPI->setChecked( true ); |
|
else if (ai.auth() == "ANONYMOUS") |
|
mImap.ui.authAnonymous->setChecked( true ); |
|
else if (ai.auth() == "PLAIN") |
|
mImap.ui.authPlain->setChecked( true ); |
|
else if (ai.auth() == "LOGIN") |
|
mImap.ui.authLogin->setChecked( true ); |
|
else mImap.ui.authUser->setChecked( true ); |
|
if ( mSieveConfigEditor ) |
|
mSieveConfigEditor->setConfig( ai.sieveConfig() ); |
|
} |
|
else if( accountType == KAccount::DImap ) |
|
{ |
|
KMAcctCachedImap &ai = *(KMAcctCachedImap*)mAccount; |
|
mImap.ui.nameEdit->setText( mAccount->name() ); |
|
mImap.ui.nameEdit->setFocus(); |
|
mImap.ui.loginEdit->setText( ai.login() ); |
|
mImap.ui.passwordEdit->setText( ai.passwd()); |
|
mImap.ui.hostEdit->setText( ai.host() ); |
|
mImap.ui.portEdit->setValue( ai.port() ); |
|
mImap.ui.hiddenFoldersCheck->setChecked( ai.hiddenFolders() ); |
|
mImap.ui.subscribedFoldersCheck->setChecked( ai.onlySubscribedFolders() ); |
|
mImap.ui.locallySubscribedFoldersCheck->setChecked( ai.onlyLocallySubscribedFolders() ); |
|
mImap.ui.storePasswordCheck->setChecked( ai.storePasswd() ); |
|
mImap.ui.intervalCheck->setChecked( intervalCheckingEnabled ); |
|
mImap.ui.intervalSpin->setValue( interval ); |
|
mImap.ui.includeInCheck->setChecked( !ai.checkExclude() ); |
|
QString trashfolder = ai.trash(); |
|
if (trashfolder.isEmpty()) |
|
trashfolder = kmkernel->trashFolder()->idString(); |
|
mImap.trashCombo->setFolder( trashfolder ); |
|
slotEnableImapInterval( intervalCheckingEnabled ); |
|
mImap.identityCombo->setCurrentIdentity( mAccount->identityId() ); |
|
mImap.ui.useDefaultIdentityCheck->setChecked( mAccount->useDefaultIdentity() ); |
|
//mImap.identityCombo->insertStringList( kmkernel->identityManager()->shadowIdentities() ); |
|
if (ai.useSSL()) |
|
mImap.ui.encryptionSSL->setChecked( true ); |
|
else if (ai.useTLS()) |
|
mImap.ui.encryptionTLS->setChecked( true ); |
|
else mImap.ui.encryptionNone->setChecked( true ); |
|
if (ai.auth() == "CRAM-MD5") |
|
mImap.ui.authCramMd5->setChecked( true ); |
|
else if (ai.auth() == "DIGEST-MD5") |
|
mImap.ui.authDigestMd5->setChecked( true ); |
|
else if (ai.auth() == "GSSAPI") |
|
mImap.ui.authGSSAPI->setChecked( true ); |
|
else if (ai.auth() == "NTLM") |
|
mImap.ui.authNTLM->setChecked( true ); |
|
else if (ai.auth() == "ANONYMOUS") |
|
mImap.ui.authAnonymous->setChecked( true ); |
|
else if (ai.auth() == "PLAIN") |
|
mImap.ui.authPlain->setChecked( true ); |
|
else if (ai.auth() == "LOGIN") |
|
mImap.ui.authLogin->setChecked( true ); |
|
else mImap.ui.authUser->setChecked( true ); |
|
if ( mSieveConfigEditor ) |
|
mSieveConfigEditor->setConfig( ai.sieveConfig() ); |
|
} |
|
else if( accountType == KAccount::Maildir ) |
|
{ |
|
KMAcctMaildir *acctMaildir = dynamic_cast<KMAcctMaildir*>(mAccount); |
|
|
|
mMaildir.ui.nameEdit->setText( mAccount->name() ); |
|
mMaildir.ui.nameEdit->setFocus(); |
|
mMaildir.ui.locationEdit->setEditText( acctMaildir->location() ); |
|
|
|
mMaildir.ui.intervalSpin->setValue( interval ); |
|
mMaildir.ui.intervalCheck->setChecked( intervalCheckingEnabled ); |
|
mMaildir.ui.includeInCheck->setChecked( !mAccount->checkExclude() ); |
|
mMaildir.ui.precommand->setText( mAccount->precommand() ); |
|
slotEnableMaildirInterval( intervalCheckingEnabled ); |
|
folderCombo = mMaildir.ui.folderCombo; |
|
} |
|
else // Unknown account type |
|
return; |
|
|
|
if ( accountType == KAccount::Imap || |
|
accountType == KAccount::DImap ) |
|
{ |
|
// settings for imap in general |
|
ImapAccountBase &ai = *(ImapAccountBase*)mAccount; |
|
// namespaces |
|
if ( ( ai.namespaces().isEmpty() || ai.namespaceToDelimiter().isEmpty() ) && |
|
!ai.login().isEmpty() && !ai.passwd().isEmpty() && !ai.host().isEmpty() ) |
|
{ |
|
slotReloadNamespaces(); |
|
} else { |
|
slotSetupNamespaces( ai.namespacesWithDelimiter() ); |
|
} |
|
} |
|
|
|
if (!folderCombo) return; |
|
|
|
KMFolderDir *fdir = (KMFolderDir*)&kmkernel->folderMgr()->dir(); |
|
KMFolder *acctFolder = mAccount->folder(); |
|
if( acctFolder == 0 ) |
|
{ |
|
acctFolder = (KMFolder*)fdir->first(); |
|
} |
|
if( acctFolder == 0 ) |
|
{ |
|
folderCombo->addItem( i18nc("Placeholder for the case that there is no folder." |
|
, "<placeholder>none</placeholder>") ); |
|
} |
|
else |
|
{ |
|
int i = 0; |
|
int curIndex = -1; |
|
kmkernel->folderMgr()->createI18nFolderList(&mFolderNames, &mFolderList); |
|
while (i < mFolderNames.count()) |
|
{ |
|
//QList<QPointer<KMFolder> >::Iterator it = mFolderList.at(i); |
|
KMFolder *folder = mFolderList.at(i); |
|
if (folder->isSystemFolder()) |
|
{ |
|
mFolderList.removeAll(folder); |
|
mFolderNames.removeAt(i); |
|
} else { |
|
if (folder == acctFolder) curIndex = i; |
|
i++; |
|
} |
|
} |
|
mFolderNames.prepend(i18n("inbox")); |
|
mFolderList.prepend(kmkernel->inboxFolder()); |
|
folderCombo->addItems(mFolderNames); |
|
folderCombo->setCurrentIndex(curIndex + 1); |
|
|
|
// -sanders hack for startup users. Must investigate this properly |
|
if (folderCombo->count() == 0) |
|
folderCombo->addItem( i18n("inbox") ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotLeaveOnServerClicked() |
|
{ |
|
bool state = mPop.ui.leaveOnServerCheck->isChecked(); |
|
mPop.ui.leaveOnServerDaysCheck->setEnabled( state ); |
|
mPop.ui.leaveOnServerCountCheck->setEnabled( state ); |
|
mPop.ui.leaveOnServerSizeCheck->setEnabled( state ); |
|
if ( state ) { |
|
if ( mPop.ui.leaveOnServerDaysCheck->isChecked() ) { |
|
slotEnableLeaveOnServerDays( state ); |
|
} |
|
if ( mPop.ui.leaveOnServerCountCheck->isChecked() ) { |
|
slotEnableLeaveOnServerCount( state ); |
|
} |
|
if ( mPop.ui.leaveOnServerSizeCheck->isChecked() ) { |
|
slotEnableLeaveOnServerSize( state ); |
|
} |
|
} else { |
|
slotEnableLeaveOnServerDays( state ); |
|
slotEnableLeaveOnServerCount( state ); |
|
slotEnableLeaveOnServerSize( state ); |
|
} |
|
if ( mServerTest && !mServerTest->capabilities().contains( ServerTest::UIDL ) && |
|
mPop.ui.leaveOnServerCheck->isChecked() ) { |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("The server does not seem to support unique " |
|
"message numbers, but this is a " |
|
"requirement for leaving messages on the " |
|
"server.\n" |
|
"Since some servers do not correctly " |
|
"announce their capabilities you still " |
|
"have the possibility to turn leaving " |
|
"fetched messages on the server on.") ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotFilterOnServerClicked() |
|
{ |
|
if ( mServerTest && !mServerTest->capabilities().contains( ServerTest::Top ) && |
|
mPop.ui.filterOnServerCheck->isChecked() ) { |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("The server does not seem to support " |
|
"fetching message headers, but this is a " |
|
"requirement for filtering messages on the " |
|
"server.\n" |
|
"Since some servers do not correctly " |
|
"announce their capabilities you still " |
|
"have the possibility to turn filtering " |
|
"messages on the server on.") ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotPipeliningClicked() |
|
{ |
|
if (mPop.ui.usePipeliningCheck->isChecked()) |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("Please note that this feature can cause some POP3 servers " |
|
"that do not support pipelining to send corrupted mail;\n" |
|
"this is configurable, though, because some servers support pipelining " |
|
"but do not announce their capabilities. To check whether your POP3 server " |
|
"announces pipelining support use the \"Check What the Server " |
|
"Supports\" button at the bottom of the dialog;\n" |
|
"if your server does not announce it, but you want more speed, then " |
|
"you should do some testing first by sending yourself a batch " |
|
"of mail and downloading it."), QString(), |
|
"pipelining"); |
|
} |
|
|
|
|
|
void AccountDialog::slotPopEncryptionChanged( int id ) |
|
{ |
|
kDebug(5006) << "ID:" << id; |
|
// adjust port |
|
if ( id == Transport::EnumEncryption::SSL || mPop.ui.portEdit->value() == 995 ) |
|
mPop.ui.portEdit->setValue( ( id == Transport::EnumEncryption::SSL ) ? 995 : 110 ); |
|
|
|
enablePopFeatures(); |
|
const QAbstractButton *old = mPop.authButtonGroup->checkedButton(); |
|
if ( old && !old->isEnabled() ) |
|
checkHighest( mPop.authButtonGroup ); |
|
} |
|
|
|
void AccountDialog::slotPopPasswordChanged(const QString& text) |
|
{ |
|
if ( text.isEmpty() ) |
|
mPop.ui.storePasswordCheck->setCheckState( Qt::Unchecked ); |
|
else |
|
mPop.ui.storePasswordCheck->setCheckState( Qt::Checked ); |
|
} |
|
|
|
void AccountDialog::slotImapEncryptionChanged( int id ) |
|
{ |
|
kDebug(5006) << id; |
|
// adjust port |
|
if ( id == Transport::EnumEncryption::SSL || mImap.ui.portEdit->value() == 993 ) |
|
mImap.ui.portEdit->setValue( ( id == Transport::EnumEncryption::SSL ) ? 993 : 143 ); |
|
|
|
enableImapAuthMethods(); |
|
QAbstractButton *old = mImap.authButtonGroup->checkedButton(); |
|
if ( !old->isEnabled() ) |
|
checkHighest( mImap.authButtonGroup ); |
|
} |
|
|
|
|
|
void AccountDialog::slotCheckPopCapabilities() |
|
{ |
|
if ( mPop.ui.hostEdit->text().isEmpty() ) |
|
{ |
|
KMessageBox::sorry( this, i18n( "Please specify a server and port on " |
|
"the General tab first." ) ); |
|
return; |
|
} |
|
delete mServerTest; |
|
mServerTest = new ServerTest( this ); |
|
BusyCursorHelper *busyCursorHelper = new BusyCursorHelper( mServerTest ); |
|
mServerTest->setProgressBar( mPop.ui.checkCapabilitiesProgress ); |
|
mPop.ui.checkCapabilitiesStack->setCurrentIndex( 1 ); |
|
Transport::EnumEncryption::type encryptionType; |
|
if ( mPop.ui.encryptionSSL->isChecked() ) |
|
encryptionType = Transport::EnumEncryption::SSL; |
|
else |
|
encryptionType = Transport::EnumEncryption::None; |
|
mServerTest->setPort( encryptionType, mPop.ui.portEdit->value() ); |
|
mServerTest->setServer( mPop.ui.hostEdit->text() ); |
|
mServerTest->setProtocol( "pop" ); |
|
connect( mServerTest, SIGNAL( finished(QList<int>) ), |
|
this, SLOT( slotPopCapabilities(QList<int>) ) ); |
|
connect( mServerTest, SIGNAL( finished(QList<int>) ), |
|
busyCursorHelper, SLOT( deleteLater() ) ); |
|
mServerTest->start(); |
|
mServerTestFailed = false; |
|
} |
|
|
|
|
|
void AccountDialog::slotCheckImapCapabilities() |
|
{ |
|
if ( mImap.ui.hostEdit->text().isEmpty() ) |
|
{ |
|
KMessageBox::sorry( this, i18n( "Please specify a server and port on " |
|
"the General tab first." ) ); |
|
return; |
|
} |
|
delete mServerTest; |
|
mServerTest = new ServerTest( this ); |
|
BusyCursorHelper *busyCursorHelper = new BusyCursorHelper( mServerTest ); |
|
mServerTest->setProgressBar( mImap.ui.checkCapabilitiesProgress ); |
|
mImap.ui.checkCapabilitiesStack->setCurrentIndex( 1 ); |
|
Transport::EnumEncryption::type encryptionType; |
|
if ( mImap.ui.encryptionSSL->isChecked() ) |
|
encryptionType = Transport::EnumEncryption::SSL; |
|
else |
|
encryptionType = Transport::EnumEncryption::None; |
|
mServerTest->setPort( encryptionType, mImap.ui.portEdit->value() ); |
|
mServerTest->setServer( mImap.ui.hostEdit->text() ); |
|
mServerTest->setProtocol( "imap" ); |
|
connect( mServerTest, SIGNAL( finished(QList<int>) ), |
|
this, SLOT( slotImapCapabilities(QList<int>) ) ); |
|
connect( mServerTest, SIGNAL( finished(QList<int>) ), |
|
busyCursorHelper, SLOT( deleteLater() ) ); |
|
mServerTest->start(); |
|
mServerTestFailed = false; |
|
} |
|
|
|
void AccountDialog::slotPopCapabilities( QList<int> encryptionTypes ) |
|
{ |
|
mPop.ui.checkCapabilitiesStack->setCurrentIndex( 0 ); |
|
|
|
// If the servertest did not find any useable authentication modes, assume the |
|
// connection failed and don't disable any of the radioboxes. |
|
if ( encryptionTypes.isEmpty() ) { |
|
mServerTestFailed = true; |
|
return; |
|
} |
|
|
|
mPop.ui.encryptionNone->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::None ) ); |
|
mPop.ui.encryptionSSL->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::SSL ) ); |
|
mPop.ui.encryptionTLS->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::TLS ) ); |
|
checkHighest( mPop.encryptionButtonGroup ); |
|
} |
|
|
|
|
|
void AccountDialog::enablePopFeatures() |
|
{ |
|
kDebug(5006); |
|
if ( !mServerTest || mServerTestFailed ) |
|
return; |
|
|
|
QList<int> supportedAuths; |
|
if ( mPop.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::None ) |
|
supportedAuths = mServerTest->normalProtocols(); |
|
if ( mPop.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::SSL ) |
|
supportedAuths = mServerTest->secureProtocols(); |
|
if ( mPop.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::TLS ) |
|
supportedAuths = mServerTest->tlsProtocols(); |
|
|
|
mPop.ui.authPlain->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::PLAIN ) ); |
|
mPop.ui.authLogin->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::LOGIN ) ); |
|
mPop.ui.authCRAM_MD5->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::CRAM_MD5 ) ); |
|
mPop.ui.authDigestMd5->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::DIGEST_MD5 ) ); |
|
mPop.ui.authNTLM->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::NTLM ) ); |
|
mPop.ui.authGSSAPI->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::GSSAPI ) ); |
|
mPop.ui.authAPOP->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::APOP ) ); |
|
|
|
if ( mServerTest && !mServerTest->capabilities().contains( ServerTest::Pipelining ) && |
|
mPop.ui.usePipeliningCheck->isChecked() ) { |
|
mPop.ui.usePipeliningCheck->setChecked( false ); |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("The server does not seem to support " |
|
"pipelining; therefore, this option has " |
|
"been disabled.\n" |
|
"Since some servers do not correctly " |
|
"announce their capabilities you still " |
|
"have the possibility to turn pipelining " |
|
"on. But please note that this feature can " |
|
"cause some POP servers that do not " |
|
"support pipelining to send corrupt " |
|
"messages. So before using this feature " |
|
"with important mail you should first " |
|
"test it by sending yourself a larger " |
|
"number of test messages which you all " |
|
"download in one go from the POP " |
|
"server.") ); |
|
} |
|
|
|
if ( mServerTest && !mServerTest->capabilities().contains( ServerTest::UIDL ) && |
|
mPop.ui.leaveOnServerCheck->isChecked() ) { |
|
mPop.ui.leaveOnServerCheck->setChecked( false ); |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("The server does not seem to support unique " |
|
"message numbers, but this is a " |
|
"requirement for leaving messages on the " |
|
"server; therefore, this option has been " |
|
"disabled.\n" |
|
"Since some servers do not correctly " |
|
"announce their capabilities you still " |
|
"have the possibility to turn leaving " |
|
"fetched messages on the server on.") ); |
|
} |
|
|
|
if ( mServerTest && !mServerTest->capabilities().contains( ServerTest::Top ) && |
|
mPop.ui.filterOnServerCheck->isChecked() ) { |
|
mPop.ui.filterOnServerCheck->setChecked( false ); |
|
KMessageBox::information( topLevelWidget(), |
|
i18n("The server does not seem to support " |
|
"fetching message headers, but this is a " |
|
"requirement for filtering messages on the " |
|
"server; therefore, this option has been " |
|
"disabled.\n" |
|
"Since some servers do not correctly " |
|
"announce their capabilities you still " |
|
"have the possibility to turn filtering " |
|
"messages on the server on.") ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotImapCapabilities( QList<int> encryptionTypes ) |
|
{ |
|
mImap.ui.checkCapabilitiesStack->setCurrentIndex( 0 ); |
|
|
|
// If the servertest did not find any useable authentication modes, assume the |
|
// connection failed and don't disable any of the radioboxes. |
|
if ( encryptionTypes.isEmpty() ) { |
|
mServerTestFailed = true; |
|
return; |
|
} |
|
|
|
mImap.ui.encryptionNone->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::None ) ); |
|
mImap.ui.encryptionSSL->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::SSL ) ); |
|
mImap.ui.encryptionTLS->setEnabled( encryptionTypes.contains( Transport::EnumEncryption::TLS ) ); |
|
checkHighest( mImap.encryptionButtonGroup ); |
|
} |
|
|
|
void AccountDialog::slotLeaveOnServerDaysChanged ( int value ) |
|
{ |
|
mPop.ui.leaveOnServerDaysSpin->setSuffix( i18np(" day", " days", value) ); |
|
} |
|
|
|
|
|
void AccountDialog::slotLeaveOnServerCountChanged ( int value ) |
|
{ |
|
mPop.ui.leaveOnServerCountSpin->setSuffix( i18np(" message", " messages", value) ); |
|
} |
|
|
|
|
|
void AccountDialog::slotFilterOnServerSizeChanged ( int value ) |
|
{ |
|
mPop.ui.filterOnServerSizeSpin->setSuffix( i18np(" byte", " bytes", value) ); |
|
} |
|
|
|
void AccountDialog::slotIdentityCheckboxChanged() |
|
{ |
|
if ( mAccount->type() == KAccount::Imap || |
|
mAccount->type() == KAccount::DImap ) { |
|
mImap.identityCombo->setEnabled( !mImap.ui.useDefaultIdentityCheck->isChecked() ); |
|
} |
|
else |
|
assert( false ); |
|
} |
|
|
|
void AccountDialog::enableImapAuthMethods() |
|
{ |
|
kDebug(5006); |
|
if ( !mServerTest || mServerTestFailed ) |
|
return; |
|
|
|
QList<int> supportedAuths; |
|
if ( mImap.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::None ) |
|
supportedAuths = mServerTest->normalProtocols(); |
|
if ( mImap.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::SSL ) |
|
supportedAuths = mServerTest->secureProtocols(); |
|
if ( mImap.encryptionButtonGroup->checkedId() == Transport::EnumEncryption::TLS ) |
|
supportedAuths = mServerTest->tlsProtocols(); |
|
|
|
mImap.ui.authPlain->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::PLAIN ) ); |
|
mImap.ui.authLogin->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::LOGIN ) ); |
|
mImap.ui.authCramMd5->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::CRAM_MD5 ) ); |
|
mImap.ui.authDigestMd5->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::DIGEST_MD5 ) ); |
|
mImap.ui.authNTLM->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::NTLM ) ); |
|
mImap.ui.authGSSAPI->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::GSSAPI ) ); |
|
mImap.ui.authAnonymous->setEnabled( supportedAuths.contains( Transport::EnumAuthenticationType::ANONYMOUS ) ); |
|
} |
|
|
|
|
|
void AccountDialog::checkHighest( QButtonGroup *btnGroup ) |
|
{ |
|
kDebug(5006) << btnGroup; |
|
QListIterator<QAbstractButton*> it( btnGroup->buttons() ); |
|
it.toBack(); |
|
while ( it.hasPrevious() ) { |
|
QAbstractButton *btn = it.previous(); |
|
if ( btn && btn->isEnabled() ) { |
|
btn->animateClick(); |
|
return; |
|
} |
|
} |
|
} |
|
|
|
|
|
void AccountDialog::slotOk() |
|
{ |
|
saveSettings(); |
|
accept(); |
|
} |
|
|
|
|
|
void AccountDialog::saveSettings() |
|
{ |
|
KAccount::Type accountType = mAccount->type(); |
|
if( accountType == KAccount::Local ) |
|
{ |
|
KMAcctLocal *acctLocal = dynamic_cast<KMAcctLocal*>(mAccount); |
|
|
|
if (acctLocal) { |
|
mAccount->setName( mLocal.ui.nameEdit->text() ); |
|
acctLocal->setLocation( mLocal.ui.locationEdit->currentText() ); |
|
if (mLocal.ui.lockMutt->isChecked()) |
|
acctLocal->setLockType(mutt_dotlock); |
|
else if (mLocal.ui.lockMuttPriv->isChecked()) |
|
acctLocal->setLockType(mutt_dotlock_privileged); |
|
else if (mLocal.ui.lockProcmail->isChecked()) { |
|
acctLocal->setLockType(procmail_lockfile); |
|
acctLocal->setProcmailLockFileName(mLocal.ui.procmailLockFileName->currentText()); |
|
} |
|
else if (mLocal.ui.lockNone->isChecked()) |
|
acctLocal->setLockType(lock_none); |
|
else acctLocal->setLockType(FCNTL); |
|
} |
|
|
|
mAccount->setCheckInterval( mLocal.ui.intervalCheck->isChecked() ? |
|
mLocal.ui.intervalSpin->value() : 0 ); |
|
mAccount->setCheckExclude( !mLocal.ui.includeInCheck->isChecked() ); |
|
|
|
mAccount->setPrecommand( mLocal.ui.precommand->text() ); |
|
|
|
mAccount->setFolder( mFolderList.at(mLocal.ui.folderCombo->currentIndex()) ); |
|
} |
|
else if( accountType == KAccount::Pop ) |
|
{ |
|
mAccount->setName( mPop.ui.nameEdit->text() ); |
|
mAccount->setCheckInterval( mPop.ui.intervalCheck->isChecked() ? |
|
mPop.ui.intervalSpin->value() : 0 ); |
|
mAccount->setCheckExclude( !mPop.ui.includeInCheck->isChecked() ); |
|
|
|
mAccount->setFolder( mFolderList.at(mPop.ui.folderCombo->currentIndex()) ); |
|
|
|
initAccountForConnect(); |
|
PopAccount &epa = *(PopAccount*)mAccount; |
|
epa.setUsePipelining( mPop.ui.usePipeliningCheck->isChecked() ); |
|
epa.setLeaveOnServer( mPop.ui.leaveOnServerCheck->isChecked() ); |
|
epa.setLeaveOnServerDays( mPop.ui.leaveOnServerCheck->isChecked() ? |
|
( mPop.ui.leaveOnServerDaysCheck->isChecked() ? |
|
mPop.ui.leaveOnServerDaysSpin->value() : -1 ) : 0); |
|
epa.setLeaveOnServerCount( mPop.ui.leaveOnServerCheck->isChecked() ? |
|
( mPop.ui.leaveOnServerCountCheck->isChecked() ? |
|
mPop.ui.leaveOnServerCountSpin->value() : -1 ) : 0 ); |
|
epa.setLeaveOnServerSize( mPop.ui.leaveOnServerCheck->isChecked() ? |
|
( mPop.ui.leaveOnServerSizeCheck->isChecked() ? |
|
mPop.ui.leaveOnServerSizeSpin->value() : -1 ) : 0 ); |
|
epa.setFilterOnServer( mPop.ui.filterOnServerCheck->isChecked() ); |
|
epa.setFilterOnServerCheckSize (mPop.ui.filterOnServerSizeSpin->value() ); |
|
epa.setPrecommand( mPop.ui.precommand->text() ); |
|
|
|
} |
|
else if( accountType == KAccount::Imap ) |
|
{ |
|
mAccount->setName( mImap.ui.nameEdit->text() ); |
|
mAccount->setCheckInterval( mImap.ui.intervalCheck->isChecked() ? |
|
mImap.ui.intervalSpin->value() : 0 ); |
|
mAccount->setIdentityId( mImap.identityCombo->currentIdentity() ); |
|
mAccount->setUseDefaultIdentity( mImap.ui.useDefaultIdentityCheck->isChecked() ); |
|
mAccount->setCheckExclude( !mImap.ui.includeInCheck->isChecked() ); |
|
mAccount->setFolder( kmkernel->imapFolderMgr()->findById(mAccount->id()) ); |
|
|
|
initAccountForConnect(); |
|
KMAcctImap &epa = *(KMAcctImap*)mAccount; |
|
epa.setAutoExpunge( mImap.ui.autoExpungeCheck->isChecked() ); |
|
epa.setHiddenFolders( mImap.ui.hiddenFoldersCheck->isChecked() ); |
|
epa.setOnlySubscribedFolders( mImap.ui.subscribedFoldersCheck->isChecked() ); |
|
epa.setOnlyLocallySubscribedFolders( mImap.ui.locallySubscribedFoldersCheck->isChecked() ); |
|
epa.setLoadOnDemand( mImap.ui.loadOnDemandCheck->isChecked() ); |
|
epa.setListOnlyOpenFolders( mImap.ui.listOnlyOpenCheck->isChecked() ); |
|
KMFolder *t = mImap.trashCombo->folder(); |
|
if ( t ) |
|
epa.setTrash( mImap.trashCombo->folder()->idString() ); |
|
else |
|
epa.setTrash( kmkernel->trashFolder()->idString() ); |
|
epa.setCheckExclude( !mImap.ui.includeInCheck->isChecked() ); |
|
if ( mSieveConfigEditor ) |
|
epa.setSieveConfig( mSieveConfigEditor->config() ); |
|
} |
|
else if( accountType == KAccount::DImap ) |
|
{ |
|
mAccount->setName( mImap.ui.nameEdit->text() ); |
|
mAccount->setCheckInterval( mImap.ui.intervalCheck->isChecked() ? |
|
mImap.ui.intervalSpin->value() : 0 ); |
|
mAccount->setIdentityId( mImap.identityCombo->currentIdentity() ); |
|
mAccount->setUseDefaultIdentity( mImap.ui.useDefaultIdentityCheck->isChecked() ); |
|
mAccount->setCheckExclude( !mImap.ui.includeInCheck->isChecked() ); |
|
//mAccount->setFolder( NULL ); |
|
mAccount->setFolder( kmkernel->dimapFolderMgr()->findById(mAccount->id()) ); |
|
//kDebug(5006) <<"account for folder" << mAccount->folder()->name(); |
|
|
|
initAccountForConnect(); |
|
KMAcctCachedImap &epa = *(KMAcctCachedImap*)mAccount; |
|
epa.setHiddenFolders( mImap.ui.hiddenFoldersCheck->isChecked() ); |
|
epa.setOnlySubscribedFolders( mImap.ui.subscribedFoldersCheck->isChecked() ); |
|
epa.setOnlyLocallySubscribedFolders( mImap.ui.locallySubscribedFoldersCheck->isChecked() ); |
|
epa.setStorePasswd( mImap.ui.storePasswordCheck->isChecked() ); |
|
epa.setPasswd( mImap.ui.passwordEdit->text(), epa.storePasswd() ); |
|
KMFolder *t = mImap.trashCombo->folder(); |
|
if ( t ) |
|
epa.setTrash( mImap.trashCombo->folder()->idString() ); |
|
else |
|
epa.setTrash( kmkernel->trashFolder()->idString() ); |
|
epa.setCheckExclude( !mImap.ui.includeInCheck->isChecked() ); |
|
if ( mSieveConfigEditor ) |
|
epa.setSieveConfig( mSieveConfigEditor->config() ); |
|
} |
|
else if( accountType == KAccount::Maildir ) |
|
{ |
|
KMAcctMaildir *acctMaildir = dynamic_cast<KMAcctMaildir*>(mAccount); |
|
|
|
if (acctMaildir) { |
|
mAccount->setName( mMaildir.ui.nameEdit->text() ); |
|
acctMaildir->setLocation( mMaildir.ui.locationEdit->currentText() ); |
|
|
|
KMFolder *targetFolder = mFolderList.at(mMaildir.ui.folderCombo->currentIndex()); |
|
if ( targetFolder->location() == acctMaildir->location() ) { |
|
/* |
|
Prevent data loss if the user sets the destination folder to be the same as the |
|
source account maildir folder by setting the target folder to the inbox. |
|
### FIXME post 3.2: show dialog and let the user chose another target folder |
|
*/ |
|
targetFolder = kmkernel->inboxFolder(); |
|
} |
|
mAccount->setFolder( targetFolder ); |
|
} |
|
mAccount->setCheckInterval( mMaildir.ui.intervalCheck->isChecked() ? |
|
mMaildir.ui.intervalSpin->value() : 0 ); |
|
mAccount->setCheckExclude( !mMaildir.ui.includeInCheck->isChecked() ); |
|
|
|
mAccount->setPrecommand( mMaildir.ui.precommand->text() ); |
|
} |
|
|
|
if ( accountType == KAccount::Imap || |
|
accountType == KAccount::DImap ) |
|
{ |
|
// settings for imap in general |
|
ImapAccountBase &ai = *(ImapAccountBase*)mAccount; |
|
// namespace |
|
ImapAccountBase::nsMap map; |
|
ImapAccountBase::namespaceDelim delimMap; |
|
ImapAccountBase::nsDelimMap::Iterator it; |
|
ImapAccountBase::namespaceDelim::Iterator it2; |
|
for ( it = mImap.nsMap.begin(); it != mImap.nsMap.end(); ++it ) { |
|
QStringList list; |
|
for ( it2 = it.value().begin(); it2 != it.value().end(); ++it2 ) { |
|
list << it2.key(); |
|
delimMap[it2.key()] = it2.value(); |
|
} |
|
map[it.key()] = list; |
|
} |
|
ai.setNamespaces( map ); |
|
ai.setNamespaceToDelimiter( delimMap ); |
|
} |
|
|
|
kmkernel->acctMgr()->writeConfig(true); |
|
// get the new account and register the new destination folder |
|
// this is the target folder for local or pop accounts and the root folder |
|
// of the account for (d)imap |
|
KMAccount* newAcct = kmkernel->acctMgr()->find(mAccount->id()); |
|
if (newAcct) |
|
{ |
|
if( accountType == KAccount::Local ) { |
|
newAcct->setFolder( mFolderList.at(mLocal.ui.folderCombo->currentIndex()), true ); |
|
} else if ( accountType == KAccount::Pop ) { |
|
newAcct->setFolder( mFolderList.at(mPop.ui.folderCombo->currentIndex()), true ); |
|
} else if ( accountType == KAccount::Maildir ) { |
|
newAcct->setFolder( mFolderList.at(mMaildir.ui.folderCombo->currentIndex()), true ); |
|
} else if ( accountType == KAccount::Imap ) { |
|
newAcct->setFolder( kmkernel->imapFolderMgr()->findById(mAccount->id()), true ); |
|
} else if ( accountType == KAccount::DImap ) { |
|
newAcct->setFolder( kmkernel->dimapFolderMgr()->findById(mAccount->id()), true ); |
|
} |
|
} |
|
} |
|
|
|
|
|
void AccountDialog::slotLocationChooser() |
|
{ |
|
static QString directory( QDir::rootPath() ); |
|
|
|
KFileDialog dialog( directory, QString(), this ); |
|
dialog.setCaption( i18n("Choose Location") ); |
|
dialog.setMode( KFile::LocalOnly ); |
|
|
|
if( dialog.exec() != QDialog::Accepted ) |
|
{ |
|
return; |
|
} |
|
|
|
KUrl url = dialog.selectedUrl(); |
|
if( url.isEmpty() ) |
|
{ |
|
return; |
|
} |
|
if( url.isLocalFile() == false ) |
|
{ |
|
KMessageBox::sorry( 0, i18n( "Only local files are currently supported." ) ); |
|
return; |
|
} |
|
|
|
mLocal.ui.locationEdit->setEditText( url.path() ); |
|
directory = url.directory(); |
|
} |
|
|
|
void AccountDialog::slotMaildirChooser() |
|
{ |
|
static QString directory( QDir::rootPath() ); |
|
|
|
QString dir = KFileDialog::getExistingDirectory(directory, this, i18n("Choose Location")); |
|
|
|
if( dir.isEmpty() ) |
|
return; |
|
|
|
mMaildir.ui.locationEdit->setEditText( dir ); |
|
directory = dir; |
|
} |
|
|
|
void AccountDialog::slotEnableLeaveOnServerDays( bool state ) |
|
{ |
|
if ( state && !mPop.ui.leaveOnServerDaysCheck->isEnabled()) return; |
|
mPop.ui.leaveOnServerDaysSpin->setEnabled( state ); |
|
} |
|
|
|
void AccountDialog::slotEnableLeaveOnServerCount( bool state ) |
|
{ |
|
if ( state && !mPop.ui.leaveOnServerCountCheck->isEnabled()) return; |
|
mPop.ui.leaveOnServerCountSpin->setEnabled( state ); |
|
return; |
|
} |
|
|
|
void AccountDialog::slotEnableLeaveOnServerSize( bool state ) |
|
{ |
|
if ( state && !mPop.ui.leaveOnServerSizeCheck->isEnabled()) return; |
|
mPop.ui.leaveOnServerSizeSpin->setEnabled( state ); |
|
return; |
|
} |
|
|
|
void AccountDialog::slotEnablePopInterval( bool state ) |
|
{ |
|
mPop.ui.intervalSpin->setEnabled( state ); |
|
mPop.ui.intervalLabel->setEnabled( state ); |
|
} |
|
|
|
void AccountDialog::slotEnableImapInterval( bool state ) |
|
{ |
|
mImap.ui.intervalSpin->setEnabled( state ); |
|
mImap.ui.intervalLabel->setEnabled( state ); |
|
} |
|
|
|
void AccountDialog::slotEnableLocalInterval( bool state ) |
|
{ |
|
mLocal.ui.intervalSpin->setEnabled( state ); |
|
mLocal.ui.intervalLabel->setEnabled( state ); |
|
} |
|
|
|
void AccountDialog::slotEnableMaildirInterval( bool state ) |
|
{ |
|
mMaildir.ui.intervalSpin->setEnabled( state ); |
|
mMaildir.ui.intervalLabel->setEnabled( state ); |
|
} |
|
|
|
void AccountDialog::slotFontChanged( void ) |
|
{ |
|
KAccount::Type accountType = mAccount->type(); |
|
if( accountType == KAccount::Local ) |
|
{ |
|
QFont titleFont( mLocal.ui.titleLabel->font() ); |
|
titleFont.setBold( true ); |
|
mLocal.ui.titleLabel->setFont(titleFont); |
|
} |
|
else if( accountType == KAccount::Pop ) |
|
{ |
|
QFont titleFont( mPop.ui.titleLabel->font() ); |
|
titleFont.setBold( true ); |
|
mPop.ui.titleLabel->setFont(titleFont); |
|
} |
|
else if( accountType == KAccount::Imap ) |
|
{ |
|
QFont titleFont( mImap.ui.titleLabel->font() ); |
|
titleFont.setBold( true ); |
|
mImap.ui.titleLabel->setFont(titleFont); |
|
} |
|
} |
|
|
|
void AccountDialog::slotReloadNamespaces() |
|
{ |
|
if ( mAccount->type() == KAccount::Imap || |
|
mAccount->type() == KAccount::DImap ) |
|
{ |
|
initAccountForConnect(); |
|
mImap.ui.personalNS->setText( i18n("Fetching Namespaces...") ); |
|
mImap.ui.otherUsersNS->setText( QString() ); |
|
mImap.ui.sharedNS->setText( QString() ); |
|
ImapAccountBase* ai = static_cast<ImapAccountBase*>( mAccount ); |
|
connect( ai, SIGNAL( namespacesFetched( const ImapAccountBase::nsDelimMap& ) ), |
|
this, SLOT( slotSetupNamespaces( const ImapAccountBase::nsDelimMap& ) ) ); |
|
connect( ai, SIGNAL( connectionResult(int, const QString&) ), |
|
this, SLOT( slotConnectionResult(int, const QString&) ) ); |
|
ai->getNamespaces(); |
|
} |
|
} |
|
|
|
void AccountDialog::slotConnectionResult( int errorCode, const QString& ) |
|
{ |
|
if ( errorCode > 0 ) { |
|
ImapAccountBase* ai = static_cast<ImapAccountBase*>( mAccount ); |
|
disconnect( ai, SIGNAL( namespacesFetched( const ImapAccountBase::nsDelimMap& ) ), |
|
this, SLOT( slotSetupNamespaces( const ImapAccountBase::nsDelimMap& ) ) ); |
|
disconnect( ai, SIGNAL( connectionResult(int, const QString&) ), |
|
this, SLOT( slotConnectionResult(int, const QString&) ) ); |
|
mImap.ui.personalNS->setText( QString() ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotSetupNamespaces( const ImapAccountBase::nsDelimMap& map ) |
|
{ |
|
disconnect( this, SLOT( slotSetupNamespaces( const ImapAccountBase::nsDelimMap& ) ) ); |
|
mImap.ui.personalNS->setText( QString() ); |
|
mImap.ui.otherUsersNS->setText( QString() ); |
|
mImap.ui.sharedNS->setText( QString() ); |
|
mImap.nsMap = map; |
|
|
|
ImapAccountBase::namespaceDelim ns = map[ImapAccountBase::PersonalNS]; |
|
ImapAccountBase::namespaceDelim::ConstIterator it; |
|
if ( !ns.isEmpty() ) { |
|
mImap.ui.personalNS->setText( namespaceListToString( ns.keys() ) ); |
|
mImap.ui.editPNS->setEnabled( true ); |
|
} else { |
|
mImap.ui.editPNS->setEnabled( false ); |
|
} |
|
ns = map[ImapAccountBase::OtherUsersNS]; |
|
if ( !ns.isEmpty() ) { |
|
mImap.ui.otherUsersNS->setText( namespaceListToString( ns.keys() ) ); |
|
mImap.ui.editONS->setEnabled( true ); |
|
} else { |
|
mImap.ui.editONS->setEnabled( false ); |
|
} |
|
ns = map[ImapAccountBase::SharedNS]; |
|
if ( !ns.isEmpty() ) { |
|
mImap.ui.sharedNS->setText( namespaceListToString( ns.keys() ) ); |
|
mImap.ui.editSNS->setEnabled( true ); |
|
} else { |
|
mImap.ui.editSNS->setEnabled( false ); |
|
} |
|
} |
|
|
|
const QString AccountDialog::namespaceListToString( const QStringList& list ) |
|
{ |
|
QStringList myList = list; |
|
for ( QStringList::Iterator it = myList.begin(); it != myList.end(); ++it ) { |
|
if ( (*it).isEmpty() ) { |
|
(*it) = '<' + i18nc("Empty namespace string.", "Empty") + '>'; |
|
} |
|
} |
|
return myList.join(","); |
|
} |
|
|
|
void AccountDialog::initAccountForConnect() |
|
{ |
|
KAccount::Type type = mAccount->type(); |
|
if ( type == KAccount::Local ) |
|
return; |
|
|
|
NetworkAccount &na = *(NetworkAccount*)mAccount; |
|
|
|
if ( type == KAccount::Pop ) { |
|
na.setHost( mPop.ui.hostEdit->text().trimmed() ); |
|
na.setPort( mPop.ui.portEdit->value() ); |
|
na.setLogin( mPop.ui.loginEdit->text().trimmed() ); |
|
na.setStorePasswd( mPop.ui.storePasswordCheck->isChecked() ); |
|
na.setPasswd( mPop.ui.passwordEdit->text(), na.storePasswd() ); |
|
na.setUseSSL( mPop.ui.encryptionSSL->isChecked() ); |
|
na.setUseTLS( mPop.ui.encryptionTLS->isChecked() ); |
|
if (mPop.ui.authUser->isChecked()) |
|
na.setAuth("USER"); |
|
else if (mPop.ui.authLogin->isChecked()) |
|
na.setAuth("LOGIN"); |
|
else if (mPop.ui.authPlain->isChecked()) |
|
na.setAuth("PLAIN"); |
|
else if (mPop.ui.authCRAM_MD5->isChecked()) |
|
na.setAuth("CRAM-MD5"); |
|
else if (mPop.ui.authDigestMd5->isChecked()) |
|
na.setAuth("DIGEST-MD5"); |
|
else if (mPop.ui.authNTLM->isChecked()) |
|
na.setAuth("NTLM"); |
|
else if (mPop.ui.authGSSAPI->isChecked()) |
|
na.setAuth("GSSAPI"); |
|
else if (mPop.ui.authAPOP->isChecked()) |
|
na.setAuth("APOP"); |
|
else na.setAuth("AUTO"); |
|
} |
|
else if ( type == KAccount::Imap || |
|
type == KAccount::DImap ) { |
|
na.setHost( mImap.ui.hostEdit->text().trimmed() ); |
|
na.setPort( mImap.ui.portEdit->value() ); |
|
na.setLogin( mImap.ui.loginEdit->text().trimmed() ); |
|
na.setStorePasswd( mImap.ui.storePasswordCheck->isChecked() ); |
|
na.setPasswd( mImap.ui.passwordEdit->text(), na.storePasswd() ); |
|
na.setUseSSL( mImap.ui.encryptionSSL->isChecked() ); |
|
na.setUseTLS( mImap.ui.encryptionTLS->isChecked() ); |
|
if (mImap.ui.authCramMd5->isChecked()) |
|
na.setAuth("CRAM-MD5"); |
|
else if (mImap.ui.authDigestMd5->isChecked()) |
|
na.setAuth("DIGEST-MD5"); |
|
else if (mImap.ui.authNTLM->isChecked()) |
|
na.setAuth("NTLM"); |
|
else if (mImap.ui.authGSSAPI->isChecked()) |
|
na.setAuth("GSSAPI"); |
|
else if (mImap.ui.authAnonymous->isChecked()) |
|
na.setAuth("ANONYMOUS"); |
|
else if (mImap.ui.authLogin->isChecked()) |
|
na.setAuth("LOGIN"); |
|
else if (mImap.ui.authPlain->isChecked()) |
|
na.setAuth("PLAIN"); |
|
else na.setAuth("*"); |
|
} |
|
} |
|
|
|
void AccountDialog::slotEditPersonalNamespace() |
|
{ |
|
NamespaceEditDialog dialog( this, ImapAccountBase::PersonalNS, &mImap.nsMap ); |
|
if ( dialog.exec() == QDialog::Accepted ) { |
|
slotSetupNamespaces( mImap.nsMap ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotEditOtherUsersNamespace() |
|
{ |
|
NamespaceEditDialog dialog( this, ImapAccountBase::OtherUsersNS, &mImap.nsMap ); |
|
if ( dialog.exec() == QDialog::Accepted ) { |
|
slotSetupNamespaces( mImap.nsMap ); |
|
} |
|
} |
|
|
|
void AccountDialog::slotEditSharedNamespace() |
|
{ |
|
NamespaceEditDialog dialog( this, ImapAccountBase::SharedNS, &mImap.nsMap ); |
|
if ( dialog.exec() == QDialog::Accepted ) { |
|
slotSetupNamespaces( mImap.nsMap ); |
|
} |
|
} |
|
|
|
NamespaceLineEdit::NamespaceLineEdit( QWidget* parent ) |
|
: KLineEdit( parent ) |
|
{ |
|
} |
|
|
|
void NamespaceLineEdit::setText( const QString& text ) |
|
{ |
|
mLastText = text; |
|
KLineEdit::setText( text ); |
|
} |
|
|
|
NamespaceEditDialog::NamespaceEditDialog( QWidget *parent, |
|
ImapAccountBase::imapNamespace type, ImapAccountBase::nsDelimMap* map ) |
|
: KDialog( parent ), mType( type ), mNamespaceMap( map ) |
|
{ |
|
setButtons( Ok|Cancel ); |
|
setObjectName( "edit_namespace" ); |
|
setModal( false ); |
|
QWidget *page = new QWidget( this ); |
|
setMainWidget( page ); |
|
|
|
QString ns; |
|
if ( mType == ImapAccountBase::PersonalNS ) { |
|
ns = i18nc("Personal namespace", "Personal"); |
|
} else if ( mType == ImapAccountBase::OtherUsersNS ) { |
|
ns = i18nc("Namespace accessible for others.", "Other Users"); |
|
} else { |
|
ns = i18n("Shared"); |
|
} |
|
setCaption( i18n("Edit Namespace '%1'", ns) ); |
|
QGridLayout *layout = new QGridLayout; |
|
|
|
mBg = new QButtonGroup( 0 ); |
|
connect( mBg, SIGNAL( buttonClicked( int ) ), this, SLOT( slotRemoveEntry( int ) ) ); |
|
connect( this, SIGNAL( okClicked() ), SLOT( slotOk() ) ); |
|
mDelimMap = mNamespaceMap->find( mType ).value(); |
|
ImapAccountBase::namespaceDelim::Iterator it; |
|
int row = 0; |
|
for ( it = mDelimMap.begin(); it != mDelimMap.end(); ++it ) { |
|
NamespaceLineEdit* edit = new NamespaceLineEdit( page ); |
|
edit->setText( it.key() ); |
|
QToolButton* button = new QToolButton( page ); |
|
button->setIcon( KIcon("edit-delete") ); |
|
button->setAutoRaise( true ); |
|
button->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); |
|
button->setFixedSize( 22, 22 ); |
|
mBg->addButton( button, row ); |
|
mLineEditMap[ mBg->id( button ) ] = edit; |
|
|
|
layout->addWidget( edit, row, 0 ); |
|
layout->addWidget( button, row, 1 ); |
|
++row; |
|
} |
|
|
|
page->setLayout( layout ); |
|
} |
|
|
|
void NamespaceEditDialog::slotRemoveEntry( int id ) |
|
{ |
|
if ( mLineEditMap.contains( id ) ) { |
|
// delete the lineedit and remove namespace from map |
|
NamespaceLineEdit* edit = mLineEditMap[id]; |
|
mDelimMap.remove( edit->text() ); |
|
if ( edit->isModified() ) { |
|
mDelimMap.remove( edit->lastText() ); |
|
} |
|
mLineEditMap.remove( id ); |
|
mainWidget()->layout()->removeWidget( edit ); |
|
edit->close(); |
|
} |
|
if ( mBg->button( id ) ) { |
|
mainWidget()->layout()->removeWidget( mBg->button( id ) ); |
|
mBg->button( id )->close(); |
|
} |
|
adjustSize(); |
|
} |
|
|
|
void NamespaceEditDialog::slotOk() |
|
{ |
|
QMap<int, NamespaceLineEdit*>::Iterator it; |
|
for ( it = mLineEditMap.begin(); it != mLineEditMap.end(); ++it ) { |
|
NamespaceLineEdit* edit = it.value(); |
|
if ( edit->isModified() ) { |
|
// register delimiter for new namespace |
|
mDelimMap[edit->text()] = mDelimMap[edit->lastText()]; |
|
mDelimMap.remove( edit->lastText() ); |
|
} |
|
} |
|
mNamespaceMap->insert( mType, mDelimMap ); |
|
} |
|
|
|
} // namespace KMail |
|
|
|
#include "accountdialog.moc"
|
|
|