00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <config.h>
00021
00022
#include "accountdialog.h"
00023
00024
#include <qbuttongroup.h>
00025
#include <qcheckbox.h>
00026
#include <klineedit.h>
00027
#include <qlayout.h>
00028
#include <qtabwidget.h>
00029
#include <qradiobutton.h>
00030
#include <qvalidator.h>
00031
#include <qlabel.h>
00032
#include <qpushbutton.h>
00033
#include <qwhatsthis.h>
00034
#include <qhbox.h>
00035
00036
#include <kfiledialog.h>
00037
#include <klocale.h>
00038
#include <kdebug.h>
00039
#include <kmessagebox.h>
00040
#include <knuminput.h>
00041
#include <kseparator.h>
00042
#include <kapplication.h>
00043
#include <kmessagebox.h>
00044
00045
#include <netdb.h>
00046
#include <netinet/in.h>
00047
00048
#include "sieveconfig.h"
00049
using KMail::SieveConfig;
00050
using KMail::SieveConfigEditor;
00051
#include "kmacctmaildir.h"
00052
#include "kmacctlocal.h"
00053
#include "kmacctmgr.h"
00054
#include "kmacctexppop.h"
00055
#include "kmacctimap.h"
00056
#include "kmacctcachedimap.h"
00057
#include "kmfoldermgr.h"
00058
#include "kmservertest.h"
00059
#include "protocols.h"
00060
00061
#include <cassert>
00062
#include <stdlib.h>
00063
00064
#ifdef HAVE_PATHS_H
00065
#include <paths.h>
00066
#endif
00067
00068
#ifndef _PATH_MAILDIR
00069
#define _PATH_MAILDIR "/var/spool/mail"
00070
#endif
00071
00072
class ProcmailRCParser
00073 {
00074
public:
00075 ProcmailRCParser(
QString fileName = QString::null);
00076 ~ProcmailRCParser();
00077
00078
QStringList getLockFilesList()
const {
return mLockFiles; }
00079
QStringList getSpoolFilesList()
const {
return mSpoolFiles; }
00080
00081
protected:
00082
void processGlobalLock(
const QString&);
00083
void processLocalLock(
const QString&);
00084
void processVariableSetting(
const QString&,
int);
00085
QString expandVars(
const QString&);
00086
00087
QFile mProcmailrc;
00088
QTextStream *mStream;
00089
QStringList mLockFiles;
00090
QStringList mSpoolFiles;
00091
QAsciiDict<QString> mVars;
00092 };
00093
00094 ProcmailRCParser::ProcmailRCParser(
QString fname)
00095 : mProcmailrc(fname),
00096 mStream(new
QTextStream(&mProcmailrc))
00097 {
00098 mVars.setAutoDelete(
true);
00099
00100
00101 mVars.insert(
"HOME",
new QString( QDir::homeDirPath() ) );
00102
00103
if( !fname || fname.isEmpty() ) {
00104 fname = QDir::homeDirPath() +
"/.procmailrc";
00105 mProcmailrc.setName(fname);
00106 }
00107
00108
QRegExp lockFileGlobal(
"^LOCKFILE=",
true);
00109
QRegExp lockFileLocal(
"^:0",
true);
00110
00111
if( mProcmailrc.open(IO_ReadOnly) ) {
00112
00113
QString s;
00114
00115
while( !mStream->eof() ) {
00116
00117 s = mStream->readLine().stripWhiteSpace();
00118
00119
if( s[0] ==
'#' )
continue;
00120
00121
int commentPos = -1;
00122
00123
if( (commentPos = s.find(
'#')) > -1 ) {
00124
00125 s.truncate(commentPos);
00126 s = s.stripWhiteSpace();
00127 }
00128
00129
if( lockFileGlobal.search(s) != -1 ) {
00130 processGlobalLock(s);
00131 }
else if( lockFileLocal.search(s) != -1 ) {
00132 processLocalLock(s);
00133 }
else if(
int i = s.find(
'=') ) {
00134 processVariableSetting(s,i);
00135 }
00136 }
00137
00138 }
00139
QString default_Location = getenv(
"MAIL");
00140
00141
if (default_Location.isNull()) {
00142 default_Location = _PATH_MAILDIR;
00143 default_Location +=
'/';
00144 default_Location += getenv(
"USER");
00145 }
00146
if ( !mSpoolFiles.contains(default_Location) )
00147 mSpoolFiles << default_Location;
00148
00149 default_Location = default_Location +
".lock";
00150
if ( !mLockFiles.contains(default_Location) )
00151 mLockFiles << default_Location;
00152 }
00153
00154 ProcmailRCParser::~ProcmailRCParser()
00155 {
00156
delete mStream;
00157 }
00158
00159
void
00160 ProcmailRCParser::processGlobalLock(
const QString &s)
00161 {
00162
QString val = expandVars(s.mid(s.find(
'=') + 1).stripWhiteSpace());
00163
if ( !mLockFiles.contains(val) )
00164 mLockFiles << val;
00165 }
00166
00167
void
00168 ProcmailRCParser::processLocalLock(
const QString &s)
00169 {
00170
QString val;
00171
int colonPos = s.findRev(
':');
00172
00173
if (colonPos > 0) {
00174 val = s.mid(colonPos + 1).stripWhiteSpace();
00175
00176
if ( val.length() ) {
00177
00178
00179 val = expandVars(val);
00180
if( val[0] !=
'/' && mVars.find(
"MAILDIR") )
00181 val.insert(0, *(mVars[
"MAILDIR"]) +
'/');
00182 }
00183
00184 }
00185
00186
00187
QString line, prevLine;
00188
do {
00189 prevLine = line;
00190 line = mStream->readLine().stripWhiteSpace();
00191 }
while ( !mStream->eof() && (line[0] ==
'*' ||
00192 prevLine[prevLine.length() - 1] ==
'\\' ));
00193
00194
if( line[0] !=
'!' && line[0] !=
'|' && line[0] !=
'{' ) {
00195
00196
00197 line = line.stripWhiteSpace();
00198 line = expandVars(line);
00199
00200
00201
if( line[0] !=
'/' && mVars.find(
"MAILDIR") )
00202 line.insert(0, *(mVars[
"MAILDIR"]) +
'/');
00203
00204
00205
if ( !mSpoolFiles.contains(line) )
00206 mSpoolFiles << line;
00207
00208
if( colonPos > 0 && (!val || val.isEmpty()) ) {
00209
00210
00211 val = line;
00212
00213
00214
if( mVars.find(
"LOCKEXT") )
00215 val += *(mVars[
"LOCKEXT"]);
00216
else
00217 val +=
".lock";
00218 }
00219
00220
if ( !val.isNull() && !mLockFiles.contains(val) ) {
00221 mLockFiles << val;
00222 }
00223 }
00224
00225 }
00226
00227
void
00228 ProcmailRCParser::processVariableSetting(
const QString &s,
int eqPos)
00229 {
00230
if( eqPos == -1)
return;
00231
00232
QString varName = s.left(eqPos),
00233 varValue = expandVars(s.mid(eqPos + 1).stripWhiteSpace());
00234
00235 mVars.insert(varName.latin1(),
new QString(varValue));
00236 }
00237
00238
QString
00239 ProcmailRCParser::expandVars(
const QString &s)
00240 {
00241
if( s.isEmpty())
return s;
00242
00243
QString expS = s;
00244
00245
QAsciiDictIterator<QString> it( mVars );
00246
00247
while ( it.current() ) {
00248 expS.replace(QString::fromLatin1(
"$") + it.currentKey(), *it.current());
00249 ++it;
00250 }
00251
00252
return expS;
00253 }
00254
00255
00256
00257 AccountDialog::AccountDialog(
const QString & caption, KMAccount *account,
00258
QWidget *parent,
const char *name,
bool modal )
00259 : KDialogBase( parent, name, modal, caption, Ok|Cancel|Help, Ok, true ),
00260 mAccount( account ),
00261 mServerTest( 0 ),
00262 mCurCapa( AllCapa ),
00263 mCapaNormal( AllCapa ),
00264 mCapaSSL( AllCapa ),
00265 mCapaTLS( AllCapa ),
00266 mSieveConfigEditor( 0 )
00267 {
00268 mValidator =
new QRegExpValidator(
QRegExp(
"[A-Za-z0-9-_:.]*" ), 0 );
00269 setHelp(
"receiving-mail");
00270
00271
QString accountType = mAccount->type();
00272
00273
if( accountType ==
"local" )
00274 {
00275 makeLocalAccountPage();
00276 }
00277
else if( accountType ==
"maildir" )
00278 {
00279 makeMaildirAccountPage();
00280 }
00281
else if( accountType ==
"pop" )
00282 {
00283 makePopAccountPage();
00284 }
00285
else if( accountType ==
"imap" )
00286 {
00287 makeImapAccountPage();
00288 }
00289
else if( accountType ==
"cachedimap" )
00290 {
00291 makeImapAccountPage(
true);
00292 }
00293
else
00294 {
00295
QString msg = i18n(
"Account type is not supported." );
00296 KMessageBox::information( topLevelWidget(),msg,i18n(
"Configure Account") );
00297
return;
00298 }
00299
00300 setupSettings();
00301 }
00302
00303 AccountDialog::~AccountDialog()
00304 {
00305
delete mValidator;
00306 mValidator = 0;
00307
delete mServerTest;
00308 mServerTest = 0;
00309 }
00310
00311
void AccountDialog::makeLocalAccountPage()
00312 {
00313 ProcmailRCParser procmailrcParser;
00314
QFrame *page = makeMainWidget();
00315
QGridLayout *topLayout =
new QGridLayout( page, 12, 3, 0, spacingHint() );
00316 topLayout->addColSpacing( 1, fontMetrics().maxWidth()*15 );
00317 topLayout->setRowStretch( 11, 10 );
00318 topLayout->setColStretch( 1, 10 );
00319
00320 mLocal.titleLabel =
new QLabel( i18n(
"Account Type: Local Account"), page );
00321 topLayout->addMultiCellWidget( mLocal.titleLabel, 0, 0, 0, 2 );
00322
QFont titleFont( mLocal.titleLabel->font() );
00323 titleFont.setBold(
true );
00324 mLocal.titleLabel->setFont( titleFont );
00325 KSeparator *hline =
new KSeparator( KSeparator::HLine, page);
00326 topLayout->addMultiCellWidget( hline, 1, 1, 0, 2 );
00327
00328
QLabel *label =
new QLabel( i18n(
"&Name:"), page );
00329 topLayout->addWidget( label, 2, 0 );
00330 mLocal.nameEdit =
new KLineEdit( page );
00331 label->setBuddy( mLocal.nameEdit );
00332 topLayout->addWidget( mLocal.nameEdit, 2, 1 );
00333
00334 label =
new QLabel( i18n(
"&Location:"), page );
00335 topLayout->addWidget( label, 3, 0 );
00336 mLocal.locationEdit =
new QComboBox(
true, page );
00337 label->setBuddy( mLocal.locationEdit );
00338 topLayout->addWidget( mLocal.locationEdit, 3, 1 );
00339 mLocal.locationEdit->insertStringList(procmailrcParser.getSpoolFilesList());
00340
00341
QPushButton *choose =
new QPushButton( i18n(
"Choo&se..."), page );
00342 choose->setAutoDefault(
false );
00343 connect( choose, SIGNAL(clicked()),
this, SLOT(slotLocationChooser()) );
00344 topLayout->addWidget( choose, 3, 2 );
00345
00346
QButtonGroup *group =
new QButtonGroup(i18n(
"Locking Method"), page );
00347 group->setColumnLayout(0, Qt::Horizontal);
00348 group->layout()->setSpacing( 0 );
00349 group->layout()->setMargin( 0 );
00350 QGridLayout *groupLayout =
new QGridLayout( group->layout() );
00351 groupLayout->setAlignment( Qt::AlignTop );
00352 groupLayout->setSpacing( 6 );
00353 groupLayout->setMargin( 11 );
00354
00355 mLocal.lockProcmail =
new QRadioButton( i18n(
"Procmail loc&kfile:"), group);
00356 groupLayout->addWidget(mLocal.lockProcmail, 0, 0);
00357
00358 mLocal.procmailLockFileName =
new QComboBox(
true, group );
00359 groupLayout->addWidget(mLocal.procmailLockFileName, 0, 1);
00360 mLocal.procmailLockFileName->insertStringList(procmailrcParser.getLockFilesList());
00361 mLocal.procmailLockFileName->setEnabled(
false);
00362
00363 QObject::connect(mLocal.lockProcmail, SIGNAL(toggled(
bool)),
00364 mLocal.procmailLockFileName, SLOT(setEnabled(
bool)));
00365
00366 mLocal.lockMutt =
new QRadioButton(
00367 i18n(
"&Mutt dotlock"), group);
00368 groupLayout->addWidget(mLocal.lockMutt, 1, 0);
00369
00370 mLocal.lockMuttPriv =
new QRadioButton(
00371 i18n(
"M&utt dotlock privileged"), group);
00372 groupLayout->addWidget(mLocal.lockMuttPriv, 2, 0);
00373
00374 mLocal.lockFcntl =
new QRadioButton(
00375 i18n(
"&FCNTL"), group);
00376 groupLayout->addWidget(mLocal.lockFcntl, 3, 0);
00377
00378 mLocal.lockNone =
new QRadioButton(
00379 i18n(
"Non&e (use with care)"), group);
00380 groupLayout->addWidget(mLocal.lockNone, 4, 0);
00381
00382 topLayout->addMultiCellWidget( group, 4, 4, 0, 2 );
00383
00384
#if 0
00385
QHBox* resourceHB =
new QHBox( page );
00386 resourceHB->setSpacing( 11 );
00387 mLocal.resourceCheck =
00388
new QCheckBox( i18n(
"Account for semiautomatic resource handling" ), resourceHB );
00389 mLocal.resourceClearButton =
00390
new QPushButton( i18n(
"Clear" ), resourceHB );
00391 QWhatsThis::add( mLocal.resourceClearButton,
00392 i18n(
"Delete all allocations for the resource represented by this account." ) );
00393 mLocal.resourceClearButton->setEnabled(
false );
00394 connect( mLocal.resourceCheck, SIGNAL( toggled(
bool) ),
00395 mLocal.resourceClearButton, SLOT( setEnabled(
bool) ) );
00396 connect( mLocal.resourceClearButton, SIGNAL( clicked() ),
00397
this, SLOT( slotClearResourceAllocations() ) );
00398 mLocal.resourceClearPastButton =
00399
new QPushButton( i18n(
"Clear Past" ), resourceHB );
00400 mLocal.resourceClearPastButton->setEnabled(
false );
00401 connect( mLocal.resourceCheck, SIGNAL( toggled(
bool) ),
00402 mLocal.resourceClearPastButton, SLOT( setEnabled(
bool) ) );
00403 QWhatsThis::add( mLocal.resourceClearPastButton,
00404 i18n(
"Delete all outdated allocations for the resource represented by this account." ) );
00405 connect( mLocal.resourceClearPastButton, SIGNAL( clicked() ),
00406
this, SLOT( slotClearPastResourceAllocations() ) );
00407 topLayout->addMultiCellWidget( resourceHB, 5, 5, 0, 2 );
00408
#endif
00409
00410 mLocal.excludeCheck =
00411
new QCheckBox( i18n(
"E&xclude from \"Check Mail\""), page );
00412 topLayout->addMultiCellWidget( mLocal.excludeCheck, 5, 5, 0, 2 );
00413
00414 mLocal.intervalCheck =
00415
new QCheckBox( i18n(
"Enable &interval mail checking"), page );
00416 topLayout->addMultiCellWidget( mLocal.intervalCheck, 6, 6, 0, 2 );
00417 connect( mLocal.intervalCheck, SIGNAL(toggled(
bool)),
00418
this, SLOT(slotEnableLocalInterval(
bool)) );
00419 mLocal.intervalLabel =
new QLabel( i18n(
"Check inter&val:"), page );
00420 topLayout->addWidget( mLocal.intervalLabel, 7, 0 );
00421 mLocal.intervalSpin =
new KIntNumInput( page );
00422 mLocal.intervalLabel->setBuddy( mLocal.intervalSpin );
00423 mLocal.intervalSpin->setRange( 1, 10000, 1, FALSE );
00424 mLocal.intervalSpin->setSuffix( i18n(
" min") );
00425 mLocal.intervalSpin->setValue( 1 );
00426 topLayout->addWidget( mLocal.intervalSpin, 7, 1 );
00427
00428 label =
new QLabel( i18n(
"&Destination folder:"), page );
00429 topLayout->addWidget( label, 8, 0 );
00430 mLocal.folderCombo =
new QComboBox(
false, page );
00431 label->setBuddy( mLocal.folderCombo );
00432 topLayout->addWidget( mLocal.folderCombo, 8, 1 );
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446 label =
new QLabel( i18n(
"&Pre-command:"), page );
00447 topLayout->addWidget( label, 9, 0 );
00448 mLocal.precommand =
new KLineEdit( page );
00449 label->setBuddy( mLocal.precommand );
00450 topLayout->addWidget( mLocal.precommand, 9, 1 );
00451
00452 connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged()));
00453 }
00454
00455
void AccountDialog::makeMaildirAccountPage()
00456 {
00457 ProcmailRCParser procmailrcParser;
00458
00459
QFrame *page = makeMainWidget();
00460 QGridLayout *topLayout =
new QGridLayout( page, 11, 3, 0, spacingHint() );
00461 topLayout->addColSpacing( 1, fontMetrics().maxWidth()*15 );
00462 topLayout->setRowStretch( 11, 10 );
00463 topLayout->setColStretch( 1, 10 );
00464
00465 mMaildir.titleLabel =
new QLabel( i18n(
"Account Type: Maildir Account"), page );
00466 topLayout->addMultiCellWidget( mMaildir.titleLabel, 0, 0, 0, 2 );
00467
QFont titleFont( mMaildir.titleLabel->font() );
00468 titleFont.setBold(
true );
00469 mMaildir.titleLabel->setFont( titleFont );
00470
QFrame *hline =
new QFrame( page );
00471 hline->setFrameStyle( QFrame::Sunken | QFrame::HLine );
00472 topLayout->addMultiCellWidget( hline, 1, 1, 0, 2 );
00473
00474 mMaildir.nameEdit =
new KLineEdit( page );
00475 topLayout->addWidget( mMaildir.nameEdit, 2, 1 );
00476 QLabel *label =
new QLabel( mMaildir.nameEdit, i18n(
"&Name:"), page );
00477 topLayout->addWidget( label, 2, 0 );
00478
00479 mMaildir.locationEdit =
new QComboBox(
true, page );
00480 topLayout->addWidget( mMaildir.locationEdit, 3, 1 );
00481 mMaildir.locationEdit->insertStringList(procmailrcParser.getSpoolFilesList());
00482 label =
new QLabel( mMaildir.locationEdit, i18n(
"&Location:"), page );
00483 topLayout->addWidget( label, 3, 0 );
00484
00485 QPushButton *choose =
new QPushButton( i18n(
"Choo&se..."), page );
00486 choose->setAutoDefault(
false );
00487 connect( choose, SIGNAL(clicked()),
this, SLOT(slotMaildirChooser()) );
00488 topLayout->addWidget( choose, 3, 2 );
00489
00490
#if 0
00491
QHBox* resourceHB =
new QHBox( page );
00492 resourceHB->setSpacing( 11 );
00493 mMaildir.resourceCheck =
00494
new QCheckBox( i18n(
"Account for semiautomatic resource handling" ), resourceHB );
00495 mMaildir.resourceClearButton =
00496
new QPushButton( i18n(
"Clear" ), resourceHB );
00497 mMaildir.resourceClearButton->setEnabled(
false );
00498 connect( mMaildir.resourceCheck, SIGNAL( toggled(
bool) ),
00499 mMaildir.resourceClearButton, SLOT( setEnabled(
bool) ) );
00500 QWhatsThis::add( mMaildir.resourceClearButton,
00501 i18n(
"Delete all allocations for the resource represented by this account." ) );
00502 connect( mMaildir.resourceClearButton, SIGNAL( clicked() ),
00503
this, SLOT( slotClearResourceAllocations() ) );
00504 mMaildir.resourceClearPastButton =
00505
new QPushButton( i18n(
"Clear Past" ), resourceHB );
00506 mMaildir.resourceClearPastButton->setEnabled(
false );
00507 connect( mMaildir.resourceCheck, SIGNAL( toggled(
bool) ),
00508 mMaildir.resourceClearPastButton, SLOT( setEnabled(
bool) ) );
00509 QWhatsThis::add( mMaildir.resourceClearPastButton,
00510 i18n(
"Delete all outdated allocations for the resource represented by this account." ) );
00511 connect( mMaildir.resourceClearPastButton, SIGNAL( clicked() ),
00512
this, SLOT( slotClearPastResourceAllocations() ) );
00513 topLayout->addMultiCellWidget( resourceHB, 4, 4, 0, 2 );
00514
#endif
00515
00516 mMaildir.excludeCheck =
00517
new QCheckBox( i18n(
"E&xclude from \"Check Mail\""), page );
00518 topLayout->addMultiCellWidget( mMaildir.excludeCheck, 4, 4, 0, 2 );
00519
00520 mMaildir.intervalCheck =
00521
new QCheckBox( i18n(
"Enable &interval mail checking"), page );
00522 topLayout->addMultiCellWidget( mMaildir.intervalCheck, 5, 5, 0, 2 );
00523 connect( mMaildir.intervalCheck, SIGNAL(toggled(
bool)),
00524
this, SLOT(slotEnableMaildirInterval(
bool)) );
00525 mMaildir.intervalLabel =
new QLabel( i18n(
"Check inter&val:"), page );
00526 topLayout->addWidget( mMaildir.intervalLabel, 6, 0 );
00527 mMaildir.intervalSpin =
new KIntNumInput( page );
00528 mMaildir.intervalSpin->setRange( 1, 10000, 1, FALSE );
00529 mMaildir.intervalSpin->setSuffix( i18n(
" min") );
00530 mMaildir.intervalSpin->setValue( 1 );
00531 mMaildir.intervalLabel->setBuddy( mMaildir.intervalSpin );
00532 topLayout->addWidget( mMaildir.intervalSpin, 6, 1 );
00533
00534 mMaildir.folderCombo =
new QComboBox(
false, page );
00535 topLayout->addWidget( mMaildir.folderCombo, 7, 1 );
00536 label =
new QLabel( mMaildir.folderCombo,
00537 i18n(
"&Destination folder:"), page );
00538 topLayout->addWidget( label, 7, 0 );
00539
00540 mMaildir.precommand =
new KLineEdit( page );
00541 topLayout->addWidget( mMaildir.precommand, 8, 1 );
00542 label =
new QLabel( mMaildir.precommand, i18n(
"&Pre-command:"), page );
00543 topLayout->addWidget( label, 8, 0 );
00544
00545 connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged()));
00546 }
00547
00548
00549
void AccountDialog::makePopAccountPage()
00550 {
00551 QFrame *page = makeMainWidget();
00552
QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
00553
00554 mPop.titleLabel =
new QLabel( page );
00555 mPop.titleLabel->setText( i18n(
"Account Type: POP Account") );
00556
QFont titleFont( mPop.titleLabel->font() );
00557 titleFont.setBold(
true );
00558 mPop.titleLabel->setFont( titleFont );
00559 topLayout->addWidget( mPop.titleLabel );
00560 KSeparator *hline =
new KSeparator( KSeparator::HLine, page);
00561 topLayout->addWidget( hline );
00562
00563
QTabWidget *tabWidget =
new QTabWidget(page);
00564 topLayout->addWidget( tabWidget );
00565
00566
QWidget *page1 =
new QWidget( tabWidget );
00567 tabWidget->addTab( page1, i18n(
"&General") );
00568
00569 QGridLayout *grid =
new QGridLayout( page1, 16, 2, marginHint(), spacingHint() );
00570 grid->addColSpacing( 1, fontMetrics().maxWidth()*15 );
00571 grid->setRowStretch( 15, 10 );
00572 grid->setColStretch( 1, 10 );
00573
00574 QLabel *label =
new QLabel( i18n(
"&Name:"), page1 );
00575 grid->addWidget( label, 0, 0 );
00576 mPop.nameEdit =
new KLineEdit( page1 );
00577 label->setBuddy( mPop.nameEdit );
00578 grid->addWidget( mPop.nameEdit, 0, 1 );
00579
00580 label =
new QLabel( i18n(
"&Login:"), page1 );
00581 QWhatsThis::add( label, i18n(
"Your Internet Service Provider gave you a <em>user name</em> which is used to authenticate you with their servers. It usually is the first part of your email address (the part before <em>@</em>).") );
00582 grid->addWidget( label, 1, 0 );
00583 mPop.loginEdit =
new KLineEdit( page1 );
00584 label->setBuddy( mPop.loginEdit );
00585 grid->addWidget( mPop.loginEdit, 1, 1 );
00586
00587 label =
new QLabel( i18n(
"P&assword:"), page1 );
00588 grid->addWidget( label, 2, 0 );
00589 mPop.passwordEdit =
new KLineEdit( page1 );
00590 mPop.passwordEdit->setEchoMode( QLineEdit::Password );
00591 label->setBuddy( mPop.passwordEdit );
00592 grid->addWidget( mPop.passwordEdit, 2, 1 );
00593
00594 label =
new QLabel( i18n(
"Ho&st:"), page1 );
00595 grid->addWidget( label, 3, 0 );
00596 mPop.hostEdit =
new KLineEdit( page1 );
00597
00598
00599 mPop.hostEdit->setValidator(mValidator);
00600 label->setBuddy( mPop.hostEdit );
00601 grid->addWidget( mPop.hostEdit, 3, 1 );
00602
00603 label =
new QLabel( i18n(
"&Port:"), page1 );
00604 grid->addWidget( label, 4, 0 );
00605 mPop.portEdit =
new KLineEdit( page1 );
00606 mPop.portEdit->setValidator(
new QIntValidator(
this) );
00607 label->setBuddy( mPop.portEdit );
00608 grid->addWidget( mPop.portEdit, 4, 1 );
00609
00610 mPop.storePasswordCheck =
00611
new QCheckBox( i18n(
"Sto&re POP password in configuration file"), page1 );
00612 grid->addMultiCellWidget( mPop.storePasswordCheck, 5, 5, 0, 1 );
00613
00614 mPop.leaveOnServerCheck =
00615
new QCheckBox( i18n(
"Lea&ve fetched messages on the server"), page1 );
00616 connect( mPop.leaveOnServerCheck, SIGNAL( clicked() ),
00617
this, SLOT( slotLeaveOnServerClicked() ) );
00618 grid->addMultiCellWidget( mPop.leaveOnServerCheck, 6, 6, 0, 1 );
00619
00620
#if 0
00621
QHBox* resourceHB =
new QHBox( page1 );
00622 resourceHB->setSpacing( 11 );
00623 mPop.resourceCheck =
00624
new QCheckBox( i18n(
"Account for semiautomatic resource handling" ), resourceHB );
00625 mPop.resourceClearButton =
00626
new QPushButton( i18n(
"Clear" ), resourceHB );
00627 mPop.resourceClearButton->setEnabled(
false );
00628 connect( mPop.resourceCheck, SIGNAL( toggled(
bool) ),
00629 mPop.resourceClearButton, SLOT( setEnabled(
bool) ) );
00630 QWhatsThis::add( mPop.resourceClearButton,
00631 i18n(
"Delete all allocations for the resource represented by this account." ) );
00632 connect( mPop.resourceClearButton, SIGNAL( clicked() ),
00633
this, SLOT( slotClearResourceAllocations() ) );
00634 mPop.resourceClearPastButton =
00635
new QPushButton( i18n(
"Clear Past" ), resourceHB );
00636 mPop.resourceClearPastButton->setEnabled(
false );
00637 connect( mPop.resourceCheck, SIGNAL( toggled(
bool) ),
00638 mPop.resourceClearPastButton, SLOT( setEnabled(
bool) ) );
00639 QWhatsThis::add( mPop.resourceClearPastButton,
00640 i18n(
"Delete all outdated allocations for the resource represented by this account." ) );
00641 connect( mPop.resourceClearPastButton, SIGNAL( clicked() ),
00642
this, SLOT( slotClearPastResourceAllocations() ) );
00643 grid->addMultiCellWidget( resourceHB, 7, 7, 0, 2 );
00644
#endif
00645
00646 mPop.excludeCheck =
00647
new QCheckBox( i18n(
"E&xclude from \"Check Mail\""), page1 );
00648 grid->addMultiCellWidget( mPop.excludeCheck, 7, 7, 0, 1 );
00649
00650 QHBox * hbox =
new QHBox( page1 );
00651 hbox->setSpacing( KDialog::spacingHint() );
00652 mPop.filterOnServerCheck =
00653
new QCheckBox( i18n(
"&Filter messages if they are greater than"), hbox );
00654 mPop.filterOnServerSizeSpin =
new KIntNumInput ( hbox );
00655 mPop.filterOnServerSizeSpin->setEnabled(
false );
00656 hbox->setStretchFactor( mPop.filterOnServerSizeSpin, 1 );
00657 mPop.filterOnServerSizeSpin->setRange( 1, 10000000, 100, FALSE );
00658 mPop.filterOnServerSizeSpin->setValue( 50000 );
00659 mPop.filterOnServerSizeSpin->setSuffix( i18n(
" byte") );
00660 grid->addMultiCellWidget( hbox, 8, 8, 0, 1 );
00661 connect( mPop.filterOnServerCheck, SIGNAL(toggled(
bool)),
00662 mPop.filterOnServerSizeSpin, SLOT(setEnabled(
bool)) );
00663 connect( mPop.filterOnServerCheck, SIGNAL( clicked() ),
00664
this, SLOT( slotFilterOnServerClicked() ) );
00665
QString msg = i18n(
"If you select this option, POP Filters will be used to "
00666
"decide what to do with messages. You can then select "
00667
"to download, delete or keep them on the server." );
00668 QWhatsThis::add( mPop.filterOnServerCheck, msg );
00669 QWhatsThis::add( mPop.filterOnServerSizeSpin, msg );
00670
00671 mPop.intervalCheck =
00672
new QCheckBox( i18n(
"Enable &interval mail checking"), page1 );
00673 grid->addMultiCellWidget( mPop.intervalCheck, 9, 9, 0, 1 );
00674 connect( mPop.intervalCheck, SIGNAL(toggled(
bool)),
00675
this, SLOT(slotEnablePopInterval(
bool)) );
00676 mPop.intervalLabel =
new QLabel( i18n(
"Chec&k interval:"), page1 );
00677 grid->addWidget( mPop.intervalLabel, 10, 0 );
00678 mPop.intervalSpin =
new KIntNumInput( page1 );
00679 mPop.intervalSpin->setRange( 1, 10000, 1, FALSE );
00680 mPop.intervalSpin->setSuffix( i18n(
" min") );
00681 mPop.intervalSpin->setValue( 1 );
00682 mPop.intervalLabel->setBuddy( mPop.intervalSpin );
00683 grid->addWidget( mPop.intervalSpin, 10, 1 );
00684
00685 label =
new QLabel( i18n(
"Des&tination folder:"), page1 );
00686 grid->addWidget( label, 11, 0 );
00687 mPop.folderCombo =
new QComboBox(
false, page1 );
00688 label->setBuddy( mPop.folderCombo );
00689 grid->addWidget( mPop.folderCombo, 11, 1 );
00690
00691 label =
new QLabel( i18n(
"Precom&mand:"), page1 );
00692 grid->addWidget( label, 12, 0 );
00693 mPop.precommand =
new KLineEdit( page1 );
00694 label->setBuddy(mPop.precommand);
00695 grid->addWidget( mPop.precommand, 12, 1 );
00696
00697 QWidget *page2 =
new QWidget( tabWidget );
00698 tabWidget->addTab( page2, i18n(
"&Extras") );
00699 QVBoxLayout *vlay =
new QVBoxLayout( page2, marginHint(), spacingHint() );
00700
00701 mPop.usePipeliningCheck =
00702
new QCheckBox( i18n(
"&Use pipelining for faster mail download"), page2 );
00703 connect(mPop.usePipeliningCheck, SIGNAL(clicked()),
00704 SLOT(slotPipeliningClicked()));
00705 vlay->addWidget( mPop.usePipeliningCheck );
00706
00707 mPop.encryptionGroup =
new QButtonGroup( 1, Qt::Horizontal,
00708 i18n(
"Encryption"), page2 );
00709 mPop.encryptionNone =
00710
new QRadioButton( i18n(
"&None"), mPop.encryptionGroup );
00711 mPop.encryptionSSL =
00712
new QRadioButton( i18n(
"Use &SSL for secure mail download"),
00713 mPop.encryptionGroup );
00714 mPop.encryptionTLS =
00715
new QRadioButton( i18n(
"Use &TLS for secure mail download"),
00716 mPop.encryptionGroup );
00717 connect(mPop.encryptionGroup, SIGNAL(clicked(
int)),
00718 SLOT(slotPopEncryptionChanged(
int)));
00719 vlay->addWidget( mPop.encryptionGroup );
00720
00721 mPop.authGroup =
new QButtonGroup( 1, Qt::Horizontal,
00722 i18n(
"Authentication Method"), page2 );
00723 mPop.authUser =
new QRadioButton( i18n(
"Clear te&xt") , mPop.authGroup,
00724
"auth clear text" );
00725 mPop.authLogin =
new QRadioButton( i18n(
"Please translate this "
00726
"authentication method only if you have a good reason",
"&LOGIN"),
00727 mPop.authGroup,
"auth login" );
00728 mPop.authPlain =
new QRadioButton( i18n(
"Please translate this "
00729
"authentication method only if you have a good reason",
"&PLAIN"),
00730 mPop.authGroup,
"auth plain" );
00731 mPop.authCRAM_MD5 =
new QRadioButton( i18n(
"CRAM-MD&5"), mPop.authGroup,
"auth cram-md5" );
00732 mPop.authDigestMd5 =
new QRadioButton( i18n(
"&DIGEST-MD5"), mPop.authGroup,
"auth digest-md5" );
00733 mPop.authAPOP =
new QRadioButton( i18n(
"&APOP"), mPop.authGroup,
"auth apop" );
00734 vlay->addWidget( mPop.authGroup );
00735
00736 vlay->addStretch();
00737
00738
QHBoxLayout *buttonLay =
new QHBoxLayout( vlay );
00739 mPop.checkCapabilities =
00740
new QPushButton( i18n(
"Check &What the Server Supports"), page2 );
00741 connect(mPop.checkCapabilities, SIGNAL(clicked()),
00742 SLOT(slotCheckPopCapabilities()));
00743 buttonLay->addStretch();
00744 buttonLay->addWidget( mPop.checkCapabilities );
00745
00746 connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged()));
00747 }
00748
00749
00750
void AccountDialog::makeImapAccountPage(
bool connected )
00751 {
00752 QFrame *page = makeMainWidget();
00753 QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
00754
00755 mImap.titleLabel =
new QLabel( page );
00756
if( connected )
00757 mImap.titleLabel->setText( i18n(
"Account Type: Disconnected IMAP Account") );
00758
else
00759 mImap.titleLabel->setText( i18n(
"Account Type: IMAP Account") );
00760
QFont titleFont( mImap.titleLabel->font() );
00761 titleFont.setBold(
true );
00762 mImap.titleLabel->setFont( titleFont );
00763 topLayout->addWidget( mImap.titleLabel );
00764 KSeparator *hline =
new KSeparator( KSeparator::HLine, page);
00765 topLayout->addWidget( hline );
00766
00767 QTabWidget *tabWidget =
new QTabWidget(page);
00768 topLayout->addWidget( tabWidget );
00769
00770 QWidget *page1 =
new QWidget( tabWidget );
00771 tabWidget->addTab( page1, i18n(
"&General") );
00772
00773
int row = -1;
00774 QGridLayout *grid =
new QGridLayout( page1, 15, 2, marginHint(), spacingHint() );
00775 grid->addColSpacing( 1, fontMetrics().maxWidth()*15 );
00776 grid->setRowStretch( 15, 10 );
00777 grid->setColStretch( 1, 10 );
00778
00779 ++row;
00780 QLabel *label =
new QLabel( i18n(
"&Name:"), page1 );
00781 grid->addWidget( label, row, 0 );
00782 mImap.nameEdit =
new KLineEdit( page1 );
00783 label->setBuddy( mImap.nameEdit );
00784 grid->addWidget( mImap.nameEdit, row, 1 );
00785
00786 ++row;
00787 label =
new QLabel( i18n(
"&Login:"), page1 );
00788 QWhatsThis::add( label, i18n(
"Your Internet Service Provider gave you a <em>user name</em> which is used to authenticate you with their servers. It usually is the first part of your email address (the part before <em>@</em>).") );
00789 grid->addWidget( label, row, 0 );
00790 mImap.loginEdit =
new KLineEdit( page1 );
00791 label->setBuddy( mImap.loginEdit );
00792 grid->addWidget( mImap.loginEdit, row, 1 );
00793
00794 ++row;
00795 label =
new QLabel( i18n(
"P&assword:"), page1 );
00796 grid->addWidget( label, row, 0 );
00797 mImap.passwordEdit =
new KLineEdit( page1 );
00798 mImap.passwordEdit->setEchoMode( QLineEdit::Password );
00799 label->setBuddy( mImap.passwordEdit );
00800 grid->addWidget( mImap.passwordEdit, row, 1 );
00801
00802 ++row;
00803 label =
new QLabel( i18n(
"Ho&st:"), page1 );
00804 grid->addWidget( label, row, 0 );
00805 mImap.hostEdit =
new KLineEdit( page1 );
00806
00807
00808 mImap.hostEdit->setValidator(mValidator);
00809 label->setBuddy( mImap.hostEdit );
00810 grid->addWidget( mImap.hostEdit, row, 1 );
00811
00812 ++row;
00813 label =
new QLabel( i18n(
"&Port:"), page1 );
00814 grid->addWidget( label, row, 0 );
00815 mImap.portEdit =
new KLineEdit( page1 );
00816 mImap.portEdit->setValidator(
new QIntValidator(
this) );
00817 label->setBuddy( mImap.portEdit );
00818 grid->addWidget( mImap.portEdit, row, 1 );
00819
00820 ++row;
00821 label =
new QLabel( i18n(
"Prefix to fol&ders:"), page1 );
00822 grid->addWidget( label, row, 0 );
00823 mImap.prefixEdit =
new KLineEdit( page1 );
00824 label->setBuddy( mImap.prefixEdit );
00825 grid->addWidget( mImap.prefixEdit, row, 1 );
00826
00827 ++row;
00828 mImap.storePasswordCheck =
00829
new QCheckBox( i18n(
"Sto&re IMAP password in configuration file"), page1 );
00830 grid->addMultiCellWidget( mImap.storePasswordCheck, row, row, 0, 1 );
00831
00832
if( !connected ) {
00833 ++row;
00834 mImap.autoExpungeCheck =
00835
new QCheckBox( i18n(
"Automaticall&y compact folders (expunges deleted messages)"), page1);
00836 grid->addMultiCellWidget( mImap.autoExpungeCheck, row, row, 0, 1 );
00837 }
00838
00839 ++row;
00840 mImap.hiddenFoldersCheck =
new QCheckBox( i18n(
"Sho&w hidden folders"), page1);
00841 grid->addMultiCellWidget( mImap.hiddenFoldersCheck, row, row, 0, 1 );
00842
00843
if( connected ) {
00844 ++row;
00845 mImap.progressDialogCheck =
new QCheckBox( i18n(
"Show &progress window"), page1);
00846 grid->addMultiCellWidget( mImap.progressDialogCheck, row, row, 0, 1 );
00847 }
00848
00849 ++row;
00850 mImap.subscribedFoldersCheck =
new QCheckBox(
00851 i18n(
"Show only s&ubscribed folders"), page1);
00852 grid->addMultiCellWidget( mImap.subscribedFoldersCheck, row, row, 0, 1 );
00853
00854
if ( !connected ) {
00855
00856 ++row;
00857 mImap.loadOnDemandCheck =
new QCheckBox(
00858 i18n(
"Load attach&ments on demand"), page1);
00859 QWhatsThis::add( mImap.loadOnDemandCheck,
00860 i18n(
"Activate this to load attachments not automatically when you select the email but only when you click on the attachment. This way also big emails are shown instantly.") );
00861 grid->addMultiCellWidget( mImap.loadOnDemandCheck, row, row, 0, 1 );
00862 }
00863
00864
if ( !connected ) {
00865
00866 ++row;
00867 mImap.listOnlyOpenCheck =
new QCheckBox(
00868 i18n(
"List only open folders"), page1);
00869 QWhatsThis::add( mImap.listOnlyOpenCheck,
00870 i18n(
"Only folders that are open (expanded) in the folder tree are checked for subfolders. Use this if there are many folders on the server.") );
00871 grid->addMultiCellWidget( mImap.listOnlyOpenCheck, row, row, 0, 1 );
00872 }
00873
00874 ++row;
00875
#if 0
00876
QHBox* resourceHB =
new QHBox( page1 );
00877 resourceHB->setSpacing( 11 );
00878 mImap.resourceCheck =
00879
new QCheckBox( i18n(
"Account for semiautomatic resource handling" ), resourceHB );
00880 mImap.resourceClearButton =
00881
new QPushButton( i18n(
"Clear" ), resourceHB );
00882 mImap.resourceClearButton->setEnabled(
false );
00883 connect( mImap.resourceCheck, SIGNAL( toggled(
bool) ),
00884 mImap.resourceClearButton, SLOT( setEnabled(
bool) ) );
00885 QWhatsThis::add( mImap.resourceClearButton,
00886 i18n(
"Delete all allocations for the resource represented by this account." ) );
00887 connect( mImap.resourceClearButton, SIGNAL( clicked() ),
00888
this, SLOT( slotClearResourceAllocations() ) );
00889 mImap.resourceClearPastButton =
00890
new QPushButton( i18n(
"Clear Past" ), resourceHB );
00891 mImap.resourceClearPastButton->setEnabled(
false );
00892 connect( mImap.resourceCheck, SIGNAL( toggled(
bool) ),
00893 mImap.resourceClearPastButton, SLOT( setEnabled(
bool) ) );
00894 QWhatsThis::add( mImap.resourceClearPastButton,
00895 i18n(
"Delete all outdated allocations for the resource represented by this account." ) );
00896 connect( mImap.resourceClearPastButton, SIGNAL( clicked() ),
00897
this, SLOT( slotClearPastResourceAllocations() ) );
00898 grid->addMultiCellWidget( resourceHB, row, row, 0, 2 );
00899
#endif
00900
00901 ++row;
00902 mImap.excludeCheck =
00903
new QCheckBox( i18n(
"E&xclude from \"Check Mail\""), page1 );
00904 grid->addMultiCellWidget( mImap.excludeCheck, row, row, 0, 1 );
00905
00906 ++row;
00907 mImap.intervalCheck =
00908
new QCheckBox( i18n(
"Enable &interval mail checking"), page1 );
00909 grid->addMultiCellWidget( mImap.intervalCheck, row, row, 0, 2 );
00910 connect( mImap.intervalCheck, SIGNAL(toggled(
bool)),
00911
this, SLOT(slotEnableImapInterval(
bool)) );
00912 ++row;
00913 mImap.intervalLabel =
new QLabel( i18n(
"Check inter&val:"), page1 );
00914 grid->addWidget( mImap.intervalLabel, row, 0 );
00915 mImap.intervalSpin =
new KIntNumInput( page1 );
00916 mImap.intervalSpin->setRange( 1, 60, 1, FALSE );
00917 mImap.intervalSpin->setValue( 1 );
00918 mImap.intervalSpin->setSuffix( i18n(
" min" ) );
00919 mImap.intervalLabel->setBuddy( mImap.intervalSpin );
00920 grid->addWidget( mImap.intervalSpin, row, 1 );
00921
00922 ++row;
00923 mImap.trashCombo =
new KMFolderComboBox( page1 );
00924 mImap.trashCombo->showOutboxFolder( FALSE );
00925 grid->addWidget( mImap.trashCombo, row, 1 );
00926 grid->addWidget(
new QLabel( mImap.trashCombo, i18n(
"&Trash folder:"), page1 ), row, 0 );
00927
00928 QWidget *page2 =
new QWidget( tabWidget );
00929 tabWidget->addTab( page2, i18n(
"S&ecurity") );
00930 QVBoxLayout *vlay =
new QVBoxLayout( page2, marginHint(), spacingHint() );
00931
00932 mImap.encryptionGroup =
new QButtonGroup( 1, Qt::Horizontal,
00933 i18n(
"Encryption"), page2 );
00934 mImap.encryptionNone =
00935
new QRadioButton( i18n(
"&None"), mImap.encryptionGroup );
00936 mImap.encryptionSSL =
00937
new QRadioButton( i18n(
"Use &SSL for secure mail download"),
00938 mImap.encryptionGroup );
00939 mImap.encryptionTLS =
00940
new QRadioButton( i18n(
"Use &TLS for secure mail download"),
00941 mImap.encryptionGroup );
00942 connect(mImap.encryptionGroup, SIGNAL(clicked(
int)),
00943 SLOT(slotImapEncryptionChanged(
int)));
00944 vlay->addWidget( mImap.encryptionGroup );
00945
00946 mImap.authGroup =
new QButtonGroup( 1, Qt::Horizontal,
00947 i18n(
"Authentication Method"), page2 );
00948 mImap.authUser =
new QRadioButton( i18n(
"Clear te&xt"), mImap.authGroup );
00949 mImap.authLogin =
new QRadioButton( i18n(
"Please translate this "
00950
"authentication method only if you have a good reason",
"&LOGIN"),
00951 mImap.authGroup );
00952 mImap.authPlain =
new QRadioButton( i18n(
"Please translate this "
00953
"authentication method only if you have a good reason",
"&PLAIN"),
00954 mImap.authGroup );
00955 mImap.authCramMd5 =
new QRadioButton( i18n(
"CRAM-MD&5"), mImap.authGroup );
00956 mImap.authDigestMd5 =
new QRadioButton( i18n(
"&DIGEST-MD5"), mImap.authGroup );
00957 mImap.authAnonymous =
new QRadioButton( i18n(
"&Anonymous"), mImap.authGroup );
00958 vlay->addWidget( mImap.authGroup );
00959
00960 vlay->addStretch();
00961
00962 QHBoxLayout *buttonLay =
new QHBoxLayout( vlay );
00963 mImap.checkCapabilities =
00964
new QPushButton( i18n(
"Check &What the Server Supports"), page2 );
00965 connect(mImap.checkCapabilities, SIGNAL(clicked()),
00966 SLOT(slotCheckImapCapabilities()));
00967 buttonLay->addStretch();
00968 buttonLay->addWidget( mImap.checkCapabilities );
00969
00970
00971 mSieveConfigEditor =
new SieveConfigEditor( tabWidget );
00972 mSieveConfigEditor->layout()->setMargin( KDialog::marginHint() );
00973 tabWidget->addTab( mSieveConfigEditor, i18n(
"&Filtering") );
00974
00975 connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged()));
00976 }
00977
00978
00979
void AccountDialog::setupSettings()
00980 {
00981
QComboBox *folderCombo = 0;
00982
int interval = mAccount->checkInterval();
00983
00984
QString accountType = mAccount->type();
00985
if( accountType ==
"local" )
00986 {
00987 ProcmailRCParser procmailrcParser;
00988 KMAcctLocal *acctLocal = dynamic_cast<KMAcctLocal*>(mAccount);
00989
00990
if ( acctLocal->location().isEmpty() )
00991 acctLocal->setLocation( procmailrcParser.getSpoolFilesList().first() );
00992
else
00993 mLocal.locationEdit->insertItem( acctLocal->location() );
00994
00995
if ( acctLocal->procmailLockFileName().isEmpty() )
00996 acctLocal->setProcmailLockFileName( procmailrcParser.getLockFilesList().first() );
00997
else
00998 mLocal.procmailLockFileName->insertItem( acctLocal->procmailLockFileName() );
00999
01000 mLocal.nameEdit->setText( mAccount->name() );
01001 mLocal.nameEdit->setFocus();
01002 mLocal.locationEdit->setEditText( acctLocal->location() );
01003
if (acctLocal->lockType() == mutt_dotlock)
01004 mLocal.lockMutt->setChecked(
true);
01005
else if (acctLocal->lockType() == mutt_dotlock_privileged)
01006 mLocal.lockMuttPriv->setChecked(
true);
01007
else if (acctLocal->lockType() == procmail_lockfile) {
01008 mLocal.lockProcmail->setChecked(
true);
01009 mLocal.procmailLockFileName->setEditText(acctLocal->procmailLockFileName());
01010 }
else if (acctLocal->lockType() == FCNTL)
01011 mLocal.lockFcntl->setChecked(
true);
01012
else if (acctLocal->lockType() == lock_none)
01013 mLocal.lockNone->setChecked(
true);
01014
01015 mLocal.intervalSpin->setValue( QMAX(1, interval) );
01016 mLocal.intervalCheck->setChecked( interval >= 1 );
01017
#if 0
01018
mLocal.resourceCheck->setChecked( mAccount->resource() );
01019
#endif
01020
mLocal.excludeCheck->setChecked( mAccount->checkExclude() );
01021 mLocal.precommand->setText( mAccount->precommand() );
01022
01023 slotEnableLocalInterval( interval >= 1 );
01024 folderCombo = mLocal.folderCombo;
01025 }
01026
else if( accountType ==
"pop" )
01027 {
01028
KMAcctExpPop &ap = *(
KMAcctExpPop*)mAccount;
01029 mPop.nameEdit->setText( mAccount->name() );
01030 mPop.nameEdit->setFocus();
01031 mPop.loginEdit->setText( ap.login() );
01032 mPop.passwordEdit->setText( ap.passwd());
01033 mPop.hostEdit->setText( ap.host() );
01034 mPop.portEdit->setText(
QString(
"%1").arg( ap.port() ) );
01035 mPop.usePipeliningCheck->setChecked( ap.
usePipelining() );
01036 mPop.storePasswordCheck->setChecked( ap.storePasswd() );
01037 mPop.leaveOnServerCheck->setChecked( ap.
leaveOnServer() );
01038 mPop.filterOnServerCheck->setChecked( ap.
filterOnServer() );
01039 mPop.filterOnServerSizeSpin->setValue( ap.
filterOnServerCheckSize() );
01040 mPop.intervalCheck->setChecked( interval >= 1 );
01041 mPop.intervalSpin->setValue( QMAX(1, interval) );
01042
#if 0
01043
mPop.resourceCheck->setChecked( mAccount->resource() );
01044
#endif
01045
mPop.excludeCheck->setChecked( mAccount->checkExclude() );
01046 mPop.precommand->setText( ap.precommand() );
01047
if (ap.useSSL())
01048 mPop.encryptionSSL->setChecked( TRUE );
01049
else if (ap.useTLS())
01050 mPop.encryptionTLS->setChecked( TRUE );
01051
else mPop.encryptionNone->setChecked( TRUE );
01052
if (ap.auth() ==
"LOGIN")
01053 mPop.authLogin->setChecked( TRUE );
01054
else if (ap.auth() ==
"PLAIN")
01055 mPop.authPlain->setChecked( TRUE );
01056
else if (ap.auth() ==
"CRAM-MD5")
01057 mPop.authCRAM_MD5->setChecked( TRUE );
01058
else if (ap.auth() ==
"DIGEST-MD5")
01059 mPop.authDigestMd5->setChecked( TRUE );
01060
else if (ap.auth() ==
"APOP")
01061 mPop.authAPOP->setChecked( TRUE );
01062
else mPop.authUser->setChecked( TRUE );
01063
01064 slotEnablePopInterval( interval >= 1 );
01065 folderCombo = mPop.folderCombo;
01066 }
01067
else if( accountType ==
"imap" )
01068 {
01069 KMAcctImap &ai = *(KMAcctImap*)mAccount;
01070 mImap.nameEdit->setText( mAccount->name() );
01071 mImap.nameEdit->setFocus();
01072 mImap.loginEdit->setText( ai.login() );
01073 mImap.passwordEdit->setText( ai.passwd());
01074 mImap.hostEdit->setText( ai.host() );
01075 mImap.portEdit->setText(
QString(
"%1").arg( ai.port() ) );
01076
QString prefix = ai.prefix();
01077
if (!prefix.isEmpty() && prefix[0] ==
'/') prefix = prefix.mid(1);
01078
if (!prefix.isEmpty() && prefix[prefix.length() - 1] ==
'/')
01079 prefix = prefix.left(prefix.length() - 1);
01080 mImap.prefixEdit->setText( prefix );
01081 mImap.autoExpungeCheck->setChecked( ai.autoExpunge() );
01082 mImap.hiddenFoldersCheck->setChecked( ai.hiddenFolders() );
01083 mImap.subscribedFoldersCheck->setChecked( ai.onlySubscribedFolders() );
01084 mImap.loadOnDemandCheck->setChecked( ai.loadOnDemand() );
01085 mImap.listOnlyOpenCheck->setChecked( ai.listOnlyOpenFolders() );
01086 mImap.storePasswordCheck->setChecked( ai.storePasswd() );
01087 mImap.intervalCheck->setChecked( interval >= 1 );
01088 mImap.intervalSpin->setValue( QMAX(1, interval) );
01089
#if 0
01090
mImap.resourceCheck->setChecked( ai.resource() );
01091
#endif
01092
mImap.excludeCheck->setChecked( ai.checkExclude() );
01093 mImap.intervalCheck->setChecked( interval >= 1 );
01094 mImap.intervalSpin->setValue( QMAX(1, interval) );
01095
QString trashfolder = ai.trash();
01096
if (trashfolder.isEmpty())
01097 trashfolder = kmkernel->trashFolder()->idString();
01098 mImap.trashCombo->setFolder( trashfolder );
01099 slotEnableImapInterval( interval >= 1 );
01100
if (ai.useSSL())
01101 mImap.encryptionSSL->setChecked( TRUE );
01102
else if (ai.useTLS())
01103 mImap.encryptionTLS->setChecked( TRUE );
01104
else mImap.encryptionNone->setChecked( TRUE );
01105
if (ai.auth() ==
"CRAM-MD5")
01106 mImap.authCramMd5->setChecked( TRUE );
01107
else if (ai.auth() ==
"DIGEST-MD5")
01108 mImap.authDigestMd5->setChecked( TRUE );
01109
else if (ai.auth() ==
"ANONYMOUS")
01110 mImap.authAnonymous->setChecked( TRUE );
01111
else if (ai.auth() ==
"PLAIN")
01112 mImap.authPlain->setChecked( TRUE );
01113
else if (ai.auth() ==
"LOGIN")
01114 mImap.authLogin->setChecked( TRUE );
01115
else mImap.authUser->setChecked( TRUE );
01116
if ( mSieveConfigEditor )
01117 mSieveConfigEditor->setConfig( ai.sieveConfig() );
01118 }
01119
else if( accountType ==
"cachedimap" )
01120 {
01121 KMAcctCachedImap &ai = *(KMAcctCachedImap*)mAccount;
01122 mImap.nameEdit->setText( mAccount->name() );
01123 mImap.nameEdit->setFocus();
01124 mImap.loginEdit->setText( ai.login() );
01125 mImap.passwordEdit->setText( ai.passwd());
01126 mImap.hostEdit->setText( ai.host() );
01127 mImap.portEdit->setText(
QString(
"%1").arg( ai.port() ) );
01128
QString prefix = ai.prefix();
01129
if (!prefix.isEmpty() && prefix[0] ==
'/') prefix = prefix.mid(1);
01130
if (!prefix.isEmpty() && prefix[prefix.length() - 1] ==
'/')
01131 prefix = prefix.left(prefix.length() - 1);
01132 mImap.prefixEdit->setText( prefix );
01133 mImap.progressDialogCheck->setChecked( ai.isProgressDialogEnabled() );
01134
#if 0
01135
mImap.resourceCheck->setChecked( ai.resource() );
01136
#endif
01137
mImap.hiddenFoldersCheck->setChecked( ai.hiddenFolders() );
01138 mImap.subscribedFoldersCheck->setChecked( ai.onlySubscribedFolders() );
01139 mImap.storePasswordCheck->setChecked( ai.storePasswd() );
01140 mImap.intervalCheck->setChecked( interval >= 1 );
01141 mImap.intervalSpin->setValue( QMAX(1, interval) );
01142 mImap.excludeCheck->setChecked( ai.checkExclude() );
01143 mImap.intervalCheck->setChecked( interval >= 1 );
01144 mImap.intervalSpin->setValue( QMAX(1, interval) );
01145
QString trashfolder = ai.trash();
01146
if (trashfolder.isEmpty())
01147 trashfolder = kmkernel->trashFolder()->idString();
01148 mImap.trashCombo->setFolder( trashfolder );
01149 slotEnableImapInterval( interval >= 1 );
01150
if (ai.useSSL())
01151 mImap.encryptionSSL->setChecked( TRUE );
01152
else if (ai.useTLS())
01153 mImap.encryptionTLS->setChecked( TRUE );
01154
else mImap.encryptionNone->setChecked( TRUE );
01155
if (ai.auth() ==
"CRAM-MD5")
01156 mImap.authCramMd5->setChecked( TRUE );
01157
else if (ai.auth() ==
"DIGEST-MD5")
01158 mImap.authDigestMd5->setChecked( TRUE );
01159
else if (ai.auth() ==
"ANONYMOUS")
01160 mImap.authAnonymous->setChecked( TRUE );
01161
else if (ai.auth() ==
"PLAIN")
01162 mImap.authPlain->setChecked( TRUE );
01163
else if (ai.auth() ==
"LOGIN")
01164 mImap.authLogin->setChecked( TRUE );
01165
else mImap.authUser->setChecked( TRUE );
01166
if ( mSieveConfigEditor )
01167 mSieveConfigEditor->setConfig( ai.sieveConfig() );
01168 }
01169
else if( accountType ==
"maildir" )
01170 {
01171 KMAcctMaildir *acctMaildir = dynamic_cast<KMAcctMaildir*>(mAccount);
01172
01173 mMaildir.nameEdit->setText( mAccount->name() );
01174 mMaildir.nameEdit->setFocus();
01175 mMaildir.locationEdit->setEditText( acctMaildir->location() );
01176
01177 mMaildir.intervalSpin->setValue( QMAX(1, interval) );
01178 mMaildir.intervalCheck->setChecked( interval >= 1 );
01179
#if 0
01180
mMaildir.resourceCheck->setChecked( mAccount->resource() );
01181
#endif
01182
mMaildir.excludeCheck->setChecked( mAccount->checkExclude() );
01183 mMaildir.precommand->setText( mAccount->precommand() );
01184
01185 slotEnableMaildirInterval( interval >= 1 );
01186 folderCombo = mMaildir.folderCombo;
01187 }
01188
else
01189
return;
01190
01191
if (!folderCombo)
return;
01192
01193
KMFolderDir *fdir = (
KMFolderDir*)&kmkernel->folderMgr()->dir();
01194
KMFolder *acctFolder = mAccount->folder();
01195
if( acctFolder == 0 )
01196 {
01197 acctFolder = (
KMFolder*)fdir->first();
01198 }
01199
if( acctFolder == 0 )
01200 {
01201 folderCombo->insertItem( i18n(
"<none>") );
01202 }
01203
else
01204 {
01205 uint i = 0;
01206
int curIndex = -1;
01207 kmkernel->folderMgr()->createI18nFolderList(&mFolderNames, &mFolderList);
01208
while (i < mFolderNames.count())
01209 {
01210
QValueList<QGuardedPtr<KMFolder> >::Iterator it = mFolderList.at(i);
01211
KMFolder *folder = *it;
01212
if (folder->
isSystemFolder())
01213 {
01214 mFolderList.remove(it);
01215 mFolderNames.remove(mFolderNames.at(i));
01216 }
else {
01217
if (folder == acctFolder) curIndex = i;
01218 i++;
01219 }
01220 }
01221 mFolderNames.prepend(i18n(
"inbox"));
01222 mFolderList.prepend(kmkernel->inboxFolder());
01223 folderCombo->insertStringList(mFolderNames);
01224 folderCombo->setCurrentItem(curIndex + 1);
01225
01226
01227
if (folderCombo->count() == 0)
01228 folderCombo->insertItem( i18n(
"inbox") );
01229 }
01230 }
01231
01232
01233
void AccountDialog::slotLeaveOnServerClicked()
01234 {
01235
if ( !( mCurCapa & UIDL ) && mPop.leaveOnServerCheck->isChecked() ) {
01236 KMessageBox::information( topLevelWidget(),
01237 i18n(
"The server does not seem to support unique "
01238
"message numbers, but this is a "
01239
"requirement for leaving messages on the "
01240
"server.\n"
01241
"Since some servers do not correctly "
01242
"announce their capabilities you still "
01243
"have the possibility to turn leaving "
01244
"fetched messages on the server on.") );
01245 }
01246 }
01247
01248
void AccountDialog::slotFilterOnServerClicked()
01249 {
01250
if ( !( mCurCapa & TOP ) && mPop.filterOnServerCheck->isChecked() ) {
01251 KMessageBox::information( topLevelWidget(),
01252 i18n(
"The server does not seem to support "
01253
"fetching message headers, but this is a "
01254
"requirement for filtering messages on the "
01255
"server.\n"
01256
"Since some servers do not correctly "
01257
"announce their capabilities you still "
01258
"have the possibility to turn filtering "
01259
"messages on the server on.") );
01260 }
01261 }
01262
01263
void AccountDialog::slotPipeliningClicked()
01264 {
01265
if (mPop.usePipeliningCheck->isChecked())
01266 KMessageBox::information( topLevelWidget(),
01267 i18n(
"Please note that this feature can cause some POP3 servers "
01268
"that do not support pipelining to send corrupted mail;\n"
01269
"this is configurable, though, because some servers support pipelining "
01270
"but do not announce their capabilities. To check whether your POP3 server "
01271
"announces pipelining support use the \"Check What the Server "
01272
"Supports\" button at the bottom of the dialog;\n"
01273
"if your server does not announce it, but you want more speed, then "
01274
"you should do some testing first by sending yourself a batch "
01275
"of mail and downloading it."), QString::null,
01276
"pipelining");
01277 }
01278
01279
01280
void AccountDialog::slotPopEncryptionChanged(
int id)
01281 {
01282 kdDebug(5006) <<
"slotPopEncryptionChanged( " <<
id <<
" )" << endl;
01283
01284
if (
id == SSL || mPop.portEdit->text() ==
"995" )
01285 mPop.portEdit->setText( (
id == SSL ) ?
"995" :
"110" );
01286
01287
01288 mCurCapa = (
id == TLS ) ? mCapaTLS
01289 : (
id == SSL ) ? mCapaSSL
01290 : mCapaNormal;
01291 enablePopFeatures( mCurCapa );
01292
const QButton *old = mPop.authGroup->selected();
01293
if ( !old->
isEnabled() )
01294 checkHighest( mPop.authGroup );
01295 }
01296
01297
01298
void AccountDialog::slotImapEncryptionChanged(
int id)
01299 {
01300 kdDebug(5006) <<
"slotImapEncryptionChanged( " <<
id <<
" )" << endl;
01301
01302
if (
id == SSL || mImap.portEdit->text() ==
"993" )
01303 mImap.portEdit->setText( (
id == SSL ) ?
"993" :
"143" );
01304
01305
01306
int authMethods = (
id == TLS ) ? mCapaTLS
01307 : (
id == SSL ) ? mCapaSSL
01308 : mCapaNormal;
01309 enableImapAuthMethods( authMethods );
01310
QButton *old = mImap.authGroup->selected();
01311
if ( !old->
isEnabled() )
01312 checkHighest( mImap.authGroup );
01313 }
01314
01315
01316
void AccountDialog::slotCheckPopCapabilities()
01317 {
01318
if ( mPop.hostEdit->text().isEmpty() || mPop.portEdit->text().isEmpty() )
01319 {
01320 KMessageBox::sorry(
this, i18n(
"Please specify a server and port on "
01321
"the General tab first." ) );
01322
return;
01323 }
01324
delete mServerTest;
01325 mServerTest =
new KMServerTest(POP_PROTOCOL, mPop.hostEdit->text(),
01326 mPop.portEdit->text().toInt());
01327 connect( mServerTest, SIGNAL( capabilities(
const QStringList &,
01328
const QStringList & ) ),
01329
this, SLOT( slotPopCapabilities(
const QStringList &,
01330
const QStringList & ) ) );
01331 mPop.checkCapabilities->setEnabled(FALSE);
01332 }
01333
01334
01335
void AccountDialog::slotCheckImapCapabilities()
01336 {
01337
if ( mImap.hostEdit->text().isEmpty() || mImap.portEdit->text().isEmpty() )
01338 {
01339 KMessageBox::sorry(
this, i18n(
"Please specify a server and port on "
01340
"the General tab first." ) );
01341
return;
01342 }
01343
delete mServerTest;
01344 mServerTest =
new KMServerTest(IMAP_PROTOCOL, mImap.hostEdit->text(),
01345 mImap.portEdit->text().toInt());
01346 connect( mServerTest, SIGNAL( capabilities(
const QStringList &,
01347
const QStringList & ) ),
01348
this, SLOT( slotImapCapabilities(
const QStringList &,
01349
const QStringList & ) ) );
01350 mImap.checkCapabilities->setEnabled(FALSE);
01351 }
01352
01353
01354
unsigned int AccountDialog::popCapabilitiesFromStringList(
const QStringList & l )
01355 {
01356
unsigned int capa = 0;
01357
for ( QStringList::const_iterator it = l.begin() ; it != l.end() ; ++it ) {
01358
QString cur = (*it).upper();
01359
if ( cur ==
"PLAIN" )
01360 capa |= Plain;
01361
else if ( cur ==
"LOGIN" )
01362 capa |= Login;
01363
else if ( cur ==
"CRAM-MD5" )
01364 capa |= CRAM_MD5;
01365
else if ( cur ==
"DIGEST-MD5" )
01366 capa |= Digest_MD5;
01367
else if ( cur ==
"APOP" )
01368 capa |= APOP;
01369
else if ( cur ==
"PIPELINING" )
01370 capa |= Pipelining;
01371
else if ( cur ==
"TOP" )
01372 capa |= TOP;
01373
else if ( cur ==
"UIDL" )
01374 capa |= UIDL;
01375
else if ( cur ==
"STLS" )
01376 capa |= STLS;
01377 }
01378
return capa;
01379 }
01380
01381
01382
void AccountDialog::slotPopCapabilities(
const QStringList & capaNormal,
01383
const QStringList & capaSSL )
01384 {
01385 mPop.checkCapabilities->setEnabled(
true );
01386 mCapaNormal = popCapabilitiesFromStringList( capaNormal );
01387
if ( mCapaNormal & STLS )
01388 mCapaTLS = mCapaNormal;
01389
else
01390 mCapaTLS = 0;
01391 mCapaSSL = popCapabilitiesFromStringList( capaSSL );
01392 kdDebug(5006) <<
"mCapaNormal = " << mCapaNormal
01393 <<
"; mCapaSSL = " << mCapaSSL
01394 <<
"; mCapaTLS = " << mCapaTLS << endl;
01395 mPop.encryptionNone->setEnabled( !capaNormal.isEmpty() );
01396 mPop.encryptionSSL->setEnabled( !capaSSL.isEmpty() );
01397 mPop.encryptionTLS->setEnabled( mCapaTLS != 0 );
01398 checkHighest( mPop.encryptionGroup );
01399
delete mServerTest;
01400 mServerTest = 0;
01401 }
01402
01403
01404
void AccountDialog::enablePopFeatures(
unsigned int capa )
01405 {
01406 kdDebug(5006) <<
"enablePopFeatures( " << capa <<
" )" << endl;
01407 mPop.authPlain->setEnabled( capa & Plain );
01408 mPop.authLogin->setEnabled( capa & Login );
01409 mPop.authCRAM_MD5->setEnabled( capa & CRAM_MD5 );
01410 mPop.authDigestMd5->setEnabled( capa & Digest_MD5 );
01411 mPop.authAPOP->setEnabled( capa & APOP );
01412
if ( !( capa & Pipelining ) && mPop.usePipeliningCheck->isChecked() ) {
01413 mPop.usePipeliningCheck->setChecked(
false );
01414 KMessageBox::information( topLevelWidget(),
01415 i18n(
"The server does not seem to support "
01416
"pipelining; therefore, this option has "
01417
"been disabled.\n"
01418
"Since some servers do not correctly "
01419
"announce their capabilities you still "
01420
"have the possibility to turn pipelining "
01421
"on. But please note that this feature can "
01422
"cause some POP servers that do not "
01423
"support pipelining to send corrupt "
01424
"messages. So before using this feature "
01425
"with important mail you should first "
01426
"test it by sending yourself a larger "
01427
"number of test messages which you all "
01428
"download in one go from the POP "
01429
"server.") );
01430 }
01431
if ( !( capa & UIDL ) && mPop.leaveOnServerCheck->isChecked() ) {
01432 mPop.leaveOnServerCheck->setChecked(
false );
01433 KMessageBox::information( topLevelWidget(),
01434 i18n(
"The server does not seem to support unique "
01435
"message numbers, but this is a "
01436
"requirement for leaving messages on the "
01437
"server; therefore, this option has been "
01438
"disabled.\n"
01439
"Since some servers do not correctly "
01440
"announce their capabilities you still "
01441
"have the possibility to turn leaving "
01442
"fetched messages on the server on.") );
01443 }
01444
if ( !( capa & TOP ) && mPop.filterOnServerCheck->isChecked() ) {
01445 mPop.filterOnServerCheck->setChecked(
false );
01446 KMessageBox::information( topLevelWidget(),
01447 i18n(
"The server does not seem to support "
01448
"fetching message headers, but this is a "
01449
"requirement for filtering messages on the "
01450
"server; therefore, this option has been "
01451
"disabled.\n"
01452
"Since some servers do not correctly "
01453
"announce their capabilities you still "
01454
"have the possibility to turn filtering "
01455
"messages on the server on.") );
01456 }
01457 }
01458
01459
01460
unsigned int AccountDialog::imapCapabilitiesFromStringList(
const QStringList & l )
01461 {
01462
unsigned int capa = 0;
01463
for ( QStringList::const_iterator it = l.begin() ; it != l.end() ; ++it ) {
01464
QString cur = (*it).upper();
01465
if ( cur ==
"AUTH=PLAIN" )
01466 capa |= Plain;
01467
else if ( cur ==
"AUTH=LOGIN" )
01468 capa |= Login;
01469
else if ( cur ==
"AUTH=CRAM-MD5" )
01470 capa |= CRAM_MD5;
01471
else if ( cur ==
"AUTH=DIGEST-MD5" )
01472 capa |= Digest_MD5;
01473
else if ( cur ==
"AUTH=ANONYMOUS" )
01474 capa |= Anonymous;
01475
else if ( cur ==
"STARTTLS" )
01476 capa |= STARTTLS;
01477 }
01478
return capa;
01479 }
01480
01481
01482
void AccountDialog::slotImapCapabilities(
const QStringList & capaNormal,
01483
const QStringList & capaSSL )
01484 {
01485 mImap.checkCapabilities->setEnabled(
true );
01486 mCapaNormal = imapCapabilitiesFromStringList( capaNormal );
01487
if ( mCapaNormal & STARTTLS )
01488 mCapaTLS = mCapaNormal;
01489
else
01490 mCapaTLS = 0;
01491 mCapaSSL = imapCapabilitiesFromStringList( capaSSL );
01492 kdDebug(5006) <<
"mCapaNormal = " << mCapaNormal
01493 <<
"; mCapaSSL = " << mCapaSSL
01494 <<
"; mCapaTLS = " << mCapaTLS << endl;
01495 mImap.encryptionNone->setEnabled( !capaNormal.isEmpty() );
01496 mImap.encryptionSSL->setEnabled( !capaSSL.isEmpty() );
01497 mImap.encryptionTLS->setEnabled( mCapaTLS != 0 );
01498 checkHighest( mImap.encryptionGroup );
01499
delete mServerTest;
01500 mServerTest = 0;
01501 }
01502
01503
01504
void AccountDialog::enableImapAuthMethods(
unsigned int capa )
01505 {
01506 kdDebug(5006) <<
"enableImapAuthMethods( " << capa <<
" )" << endl;
01507 mImap.authPlain->setEnabled( capa & Plain );
01508 mImap.authLogin->setEnabled( capa & Login );
01509 mImap.authCramMd5->setEnabled( capa & CRAM_MD5 );
01510 mImap.authDigestMd5->setEnabled( capa & Digest_MD5 );
01511 mImap.authAnonymous->setEnabled( capa & Anonymous );
01512 }
01513
01514
01515
void AccountDialog::checkHighest( QButtonGroup *btnGroup )
01516 {
01517 kdDebug(5006) <<
"checkHighest( " << btnGroup <<
" )" << endl;
01518
for (
int i = btnGroup->count() - 1; i >= 0 ; --i ) {
01519
QButton * btn = btnGroup->find( i );
01520
if ( btn && btn->
isEnabled() ) {
01521 btn->animateClick();
01522
return;
01523 }
01524 }
01525 }
01526
01527
01528
void AccountDialog::slotOk()
01529 {
01530 saveSettings();
01531 accept();
01532 }
01533
01534
01535
void AccountDialog::saveSettings()
01536 {
01537
QString accountType = mAccount->type();
01538
if( accountType ==
"local" )
01539 {
01540 KMAcctLocal *acctLocal = dynamic_cast<KMAcctLocal*>(mAccount);
01541
01542
if (acctLocal) {
01543 mAccount->setName( mLocal.nameEdit->text() );
01544 acctLocal->setLocation( mLocal.locationEdit->currentText() );
01545
if (mLocal.lockMutt->isChecked())
01546 acctLocal->setLockType(mutt_dotlock);
01547
else if (mLocal.lockMuttPriv->isChecked())
01548 acctLocal->setLockType(mutt_dotlock_privileged);
01549
else if (mLocal.lockProcmail->isChecked()) {
01550 acctLocal->setLockType(procmail_lockfile);
01551 acctLocal->setProcmailLockFileName(mLocal.procmailLockFileName->currentText());
01552 }
01553
else if (mLocal.lockNone->isChecked())
01554 acctLocal->setLockType(lock_none);
01555
else acctLocal->setLockType(FCNTL);
01556 }
01557
01558 mAccount->setCheckInterval( mLocal.intervalCheck->isChecked() ?
01559 mLocal.intervalSpin->value() : 0 );
01560
#if 0
01561
mAccount->setResource( mLocal.resourceCheck->isChecked() );
01562
#endif
01563
mAccount->setCheckExclude( mLocal.excludeCheck->isChecked() );
01564
01565 mAccount->setPrecommand( mLocal.precommand->text() );
01566
01567 mAccount->setFolder( *mFolderList.at(mLocal.folderCombo->currentItem()) );
01568
01569 }
01570
else if( accountType ==
"pop" )
01571 {
01572 mAccount->setName( mPop.nameEdit->text() );
01573 mAccount->setCheckInterval( mPop.intervalCheck->isChecked() ?
01574 mPop.intervalSpin->value() : 0 );
01575
#if 0
01576
mAccount->setResource( mPop.resourceCheck->isChecked() );
01577
#endif
01578
mAccount->setCheckExclude( mPop.excludeCheck->isChecked() );
01579
01580 mAccount->setFolder( *mFolderList.at(mPop.folderCombo->currentItem()) );
01581
01582
KMAcctExpPop &epa = *(
KMAcctExpPop*)mAccount;
01583 epa.setHost( mPop.hostEdit->text().stripWhiteSpace() );
01584 epa.setPort( mPop.portEdit->text().toInt() );
01585 epa.setLogin( mPop.loginEdit->text().stripWhiteSpace() );
01586 epa.setPasswd( mPop.passwordEdit->text(),
true );
01587 epa.
setUsePipelining( mPop.usePipeliningCheck->isChecked() );
01588 epa.setStorePasswd( mPop.storePasswordCheck->isChecked() );
01589 epa.setPasswd( mPop.passwordEdit->text(), epa.storePasswd() );
01590 epa.
setLeaveOnServer( mPop.leaveOnServerCheck->isChecked() );
01591 epa.
setFilterOnServer( mPop.filterOnServerCheck->isChecked() );
01592 epa.
setFilterOnServerCheckSize (mPop.filterOnServerSizeSpin->value() );
01593 epa.setPrecommand( mPop.precommand->text() );
01594 epa.setUseSSL( mPop.encryptionSSL->isChecked() );
01595 epa.setUseTLS( mPop.encryptionTLS->isChecked() );
01596
if (mPop.authUser->isChecked())
01597 epa.setAuth(
"USER");
01598
else if (mPop.authLogin->isChecked())
01599 epa.setAuth(
"LOGIN");
01600
else if (mPop.authPlain->isChecked())
01601 epa.setAuth(
"PLAIN");
01602
else if (mPop.authCRAM_MD5->isChecked())
01603 epa.setAuth(
"CRAM-MD5");
01604
else if (mPop.authDigestMd5->isChecked())
01605 epa.setAuth(
"DIGEST-MD5");
01606
else if (mPop.authAPOP->isChecked())
01607 epa.setAuth(
"APOP");
01608
else epa.setAuth(
"AUTO");
01609 }
01610
else if( accountType ==
"imap" )
01611 {
01612 mAccount->setName( mImap.nameEdit->text() );
01613 mAccount->setCheckInterval( mImap.intervalCheck->isChecked() ?
01614 mImap.intervalSpin->value() : 0 );
01615
#if 0
01616
mAccount->setResource( mImap.resourceCheck->isChecked() );
01617
#endif
01618
mAccount->setCheckExclude( mImap.excludeCheck->isChecked() );
01619 mAccount->setFolder( kmkernel->imapFolderMgr()->findById(mAccount->id()) );
01620
01621 KMAcctImap &epa = *(KMAcctImap*)mAccount;
01622 epa.setHost( mImap.hostEdit->text().stripWhiteSpace() );
01623 epa.setPort( mImap.portEdit->text().toInt() );
01624
QString prefix =
"/" + mImap.prefixEdit->text();
01625
if (prefix[prefix.length() - 1] !=
'/') prefix +=
"/";
01626 epa.setPrefix( prefix );
01627 epa.setLogin( mImap.loginEdit->text().stripWhiteSpace() );
01628 epa.setAutoExpunge( mImap.autoExpungeCheck->isChecked() );
01629 epa.setHiddenFolders( mImap.hiddenFoldersCheck->isChecked() );
01630 epa.setOnlySubscribedFolders( mImap.subscribedFoldersCheck->isChecked() );
01631 epa.setLoadOnDemand( mImap.loadOnDemandCheck->isChecked() );
01632 epa.setListOnlyOpenFolders( mImap.listOnlyOpenCheck->isChecked() );
01633 epa.setStorePasswd( mImap.storePasswordCheck->isChecked() );
01634 epa.setPasswd( mImap.passwordEdit->text(), epa.storePasswd() );
01635
KMFolder *t = mImap.trashCombo->getFolder();
01636
if ( t )
01637 epa.setTrash( mImap.trashCombo->getFolder()->idString() );
01638
else
01639 epa.setTrash( kmkernel->trashFolder()->idString() );
01640
#if 0
01641
epa.setResource( mImap.resourceCheck->isChecked() );
01642
#endif
01643
epa.setCheckExclude( mImap.excludeCheck->isChecked() );
01644 epa.setUseSSL( mImap.encryptionSSL->isChecked() );
01645 epa.setUseTLS( mImap.encryptionTLS->isChecked() );
01646
if (mImap.authCramMd5->isChecked())
01647 epa.setAuth(
"CRAM-MD5");
01648
else if (mImap.authDigestMd5->isChecked())
01649 epa.setAuth(
"DIGEST-MD5");
01650
else if (mImap.authAnonymous->isChecked())
01651 epa.setAuth(
"ANONYMOUS");
01652
else if (mImap.authLogin->isChecked())
01653 epa.setAuth(
"LOGIN");
01654
else if (mImap.authPlain->isChecked())
01655 epa.setAuth(
"PLAIN");
01656
else epa.setAuth(
"*");
01657
if ( mSieveConfigEditor )
01658 epa.setSieveConfig( mSieveConfigEditor->config() );
01659 }
01660
else if( accountType ==
"cachedimap" )
01661 {
01662 mAccount->setName( mImap.nameEdit->text() );
01663 mAccount->setCheckInterval( mImap.intervalCheck->isChecked() ?
01664 mImap.intervalSpin->value() : 0 );
01665
#if 0
01666
mAccount->setResource( mImap.resourceCheck->isChecked() );
01667
#endif
01668
mAccount->setCheckExclude( mImap.excludeCheck->isChecked() );
01669
01670 mAccount->setFolder( kmkernel->dimapFolderMgr()->findById(mAccount->id()) );
01671 kdDebug(5006) << mAccount->name() << endl;
01672
01673
01674 KMAcctCachedImap &epa = *(KMAcctCachedImap*)mAccount;
01675 epa.setHost( mImap.hostEdit->text().stripWhiteSpace() );
01676 epa.setPort( mImap.portEdit->text().toInt() );
01677
QString prefix =
"/" + mImap.prefixEdit->text();
01678
if (prefix[prefix.length() - 1] !=
'/') prefix +=
"/";
01679 epa.setPrefix( prefix );
01680 epa.setLogin( mImap.loginEdit->text().stripWhiteSpace() );
01681 epa.setProgressDialogEnabled( mImap.progressDialogCheck->isChecked() );
01682 epa.setHiddenFolders( mImap.hiddenFoldersCheck->isChecked() );
01683 epa.setOnlySubscribedFolders( mImap.subscribedFoldersCheck->isChecked() );
01684 epa.setStorePasswd( mImap.storePasswordCheck->isChecked() );
01685 epa.setPasswd( mImap.passwordEdit->text(), epa.storePasswd() );
01686
KMFolder *t = mImap.trashCombo->getFolder();
01687
if ( t )
01688 epa.setTrash( mImap.trashCombo->getFolder()->idString() );
01689
else
01690 epa.setTrash( kmkernel->trashFolder()->idString() );
01691
#if 0
01692
epa.setResource( mImap.resourceCheck->isChecked() );
01693
#endif
01694
epa.setCheckExclude( mImap.excludeCheck->isChecked() );
01695 epa.setUseSSL( mImap.encryptionSSL->isChecked() );
01696 epa.setUseTLS( mImap.encryptionTLS->isChecked() );
01697
if (mImap.authCramMd5->isChecked())
01698 epa.setAuth(
"CRAM-MD5");
01699
else if (mImap.authDigestMd5->isChecked())
01700 epa.setAuth(
"DIGEST-MD5");
01701
else if (mImap.authAnonymous->isChecked())
01702 epa.setAuth(
"ANONYMOUS");
01703
else if (mImap.authLogin->isChecked())
01704 epa.setAuth(
"LOGIN");
01705
else if (mImap.authPlain->isChecked())
01706 epa.setAuth(
"PLAIN");
01707
else epa.setAuth(
"*");
01708
if ( mSieveConfigEditor )
01709 epa.setSieveConfig( mSieveConfigEditor->config() );
01710 }
01711
else if( accountType ==
"maildir" )
01712 {
01713 KMAcctMaildir *acctMaildir = dynamic_cast<KMAcctMaildir*>(mAccount);
01714
01715
if (acctMaildir) {
01716 mAccount->setName( mMaildir.nameEdit->text() );
01717 acctMaildir->setLocation( mMaildir.locationEdit->currentText() );
01718
01719
KMFolder *targetFolder = *mFolderList.at(mMaildir.folderCombo->currentItem());
01720
if ( targetFolder->
location() == acctMaildir->location() ) {
01721
01722
01723
01724
01725
01726 targetFolder = kmkernel->inboxFolder();
01727 }
01728 mAccount->setFolder( targetFolder );
01729 }
01730 mAccount->setCheckInterval( mMaildir.intervalCheck->isChecked() ?
01731 mMaildir.intervalSpin->value() : 0 );
01732
#if 0
01733
mAccount->setResource( mMaildir.resourceCheck->isChecked() );
01734
#endif
01735
mAccount->setCheckExclude( mMaildir.excludeCheck->isChecked() );
01736
01737 mAccount->setPrecommand( mMaildir.precommand->text() );
01738 }
01739
01740 kmkernel->acctMgr()->writeConfig(TRUE);
01741
01742
01743
01744
01745 KMAccount* newAcct = kmkernel->acctMgr()->find(mAccount->id());
01746
if (newAcct)
01747 {
01748
if( accountType ==
"local" ) {
01749 newAcct->setFolder( *mFolderList.at(mLocal.folderCombo->currentItem()),
true );
01750 }
else if ( accountType ==
"pop" ) {
01751 newAcct->setFolder( *mFolderList.at(mPop.folderCombo->currentItem()),
true );
01752 }
else if ( accountType ==
"maildir" ) {
01753 newAcct->setFolder( *mFolderList.at(mMaildir.folderCombo->currentItem()),
true );
01754 }
else if ( accountType ==
"imap" ) {
01755 newAcct->setFolder( kmkernel->imapFolderMgr()->findById(mAccount->id()),
true );
01756 }
else if ( accountType ==
"cachedimap" ) {
01757 newAcct->setFolder( kmkernel->dimapFolderMgr()->findById(mAccount->id()),
true );
01758 }
01759 }
01760 }
01761
01762
01763
void AccountDialog::slotLocationChooser()
01764 {
01765
static QString directory(
"/" );
01766
01767 KFileDialog dialog( directory, QString::null,
this, 0,
true );
01768 dialog.setCaption( i18n(
"Choose Location") );
01769
01770
bool result = dialog.exec();
01771
if( result ==
false )
01772 {
01773
return;
01774 }
01775
01776 KURL url = dialog.selectedURL();
01777
if( url.isEmpty() )
01778 {
01779
return;
01780 }
01781
if( url.isLocalFile() ==
false )
01782 {
01783 KMessageBox::sorry( 0, i18n(
"Only local files are currently supported." ) );
01784
return;
01785 }
01786
01787 mLocal.locationEdit->setEditText( url.path() );
01788 directory = url.directory();
01789 }
01790
01791
void AccountDialog::slotMaildirChooser()
01792 {
01793
static QString directory(
"/" );
01794
01795
QString dir = KFileDialog::getExistingDirectory(directory,
this, i18n(
"Choose Location"));
01796
01797
if( dir.isEmpty() )
01798
return;
01799
01800 mMaildir.locationEdit->setEditText( dir );
01801 directory = dir;
01802 }
01803
01804
01805
void AccountDialog::slotEnablePopInterval(
bool state )
01806 {
01807 mPop.intervalSpin->setEnabled( state );
01808 mPop.intervalLabel->setEnabled( state );
01809 }
01810
01811
void AccountDialog::slotEnableImapInterval(
bool state )
01812 {
01813 mImap.intervalSpin->setEnabled( state );
01814 mImap.intervalLabel->setEnabled( state );
01815 }
01816
01817
void AccountDialog::slotEnableLocalInterval(
bool state )
01818 {
01819 mLocal.intervalSpin->setEnabled( state );
01820 mLocal.intervalLabel->setEnabled( state );
01821 }
01822
01823
void AccountDialog::slotEnableMaildirInterval(
bool state )
01824 {
01825 mMaildir.intervalSpin->setEnabled( state );
01826 mMaildir.intervalLabel->setEnabled( state );
01827 }
01828
01829
void AccountDialog::slotFontChanged(
void )
01830 {
01831
QString accountType = mAccount->type();
01832
if( accountType ==
"local" )
01833 {
01834
QFont titleFont( mLocal.titleLabel->font() );
01835 titleFont.setBold(
true );
01836 mLocal.titleLabel->setFont(titleFont);
01837 }
01838
else if( accountType ==
"pop" )
01839 {
01840
QFont titleFont( mPop.titleLabel->font() );
01841 titleFont.setBold(
true );
01842 mPop.titleLabel->setFont(titleFont);
01843 }
01844
else if( accountType ==
"imap" )
01845 {
01846
QFont titleFont( mImap.titleLabel->font() );
01847 titleFont.setBold(
true );
01848 mImap.titleLabel->setFont(titleFont);
01849 }
01850 }
01851
01852
01853
01854
#if 0
01855
void AccountDialog::slotClearResourceAllocations()
01856 {
01857 mAccount->clearIntervals();
01858 }
01859
01860
01861
void AccountDialog::slotClearPastResourceAllocations()
01862 {
01863 mAccount->clearOldIntervals();
01864 }
01865
#endif
01866
01867
#include "accountdialog.moc"