00001 #include <stdlib.h>
00002 #include <qdir.h>
00003
00004 #include <opie2/odebug.h>
00005 #include <qpe/config.h>
00006
00007 #include "settings.h"
00008
00009
00010 #define IMAP_PORT "143"
00011 #define IMAP_SSL_PORT "993"
00012 #define SMTP_PORT "25"
00013 #define SMTP_SSL_PORT "465"
00014 #define POP3_PORT "110"
00015 #define POP3_SSL_PORT "995"
00016 #define NNTP_PORT "119"
00017 #define NNTP_SSL_PORT "563"
00018
00019 Settings::Settings()
00020 : QObject()
00021 {
00022 updateAccounts();
00023 }
00024
00025 void Settings::checkDirectory()
00026 {
00027 if ( !QDir( (QString) getenv( "HOME" ) + "/Applications/opiemail/" ).exists() ) {
00028 system( "mkdir -p $HOME/Applications/opiemail" );
00029 odebug << "$HOME/Applications/opiemail created" << oendl;
00030 }
00031 }
00032
00033 QList<Account> Settings::getAccounts()
00034 {
00035 return accounts;
00036 }
00037
00038 void Settings::addAccount( Account *account )
00039 {
00040 accounts.append( account );
00041 }
00042
00043 void Settings::delAccount( Account *account )
00044 {
00045 accounts.remove( account );
00046 account->remove();
00047 }
00048
00049 void Settings::updateAccounts()
00050 {
00051 accounts.clear();
00052 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
00053 QStringList::Iterator it;
00054
00055 QStringList imap = dir.entryList( "imap-*" );
00056 for ( it = imap.begin(); it != imap.end(); it++ ) {
00057 odebug << "Added IMAP account" << oendl;
00058 IMAPaccount *account = new IMAPaccount( (*it).replace(0, 5, "") );
00059 accounts.append( account );
00060 }
00061
00062 QStringList pop3 = dir.entryList( "pop3-*" );
00063 for ( it = pop3.begin(); it != pop3.end(); it++ ) {
00064 odebug << "Added POP account" << oendl;
00065 POP3account *account = new POP3account( (*it).replace(0, 5, "") );
00066 accounts.append( account );
00067 }
00068
00069 QStringList smtp = dir.entryList( "smtp-*" );
00070 for ( it = smtp.begin(); it != smtp.end(); it++ ) {
00071 odebug << "Added SMTP account" << oendl;
00072 SMTPaccount *account = new SMTPaccount( (*it).replace(0, 5, "") );
00073 accounts.append( account );
00074 }
00075
00076 QStringList nntp = dir.entryList( "nntp-*" );
00077 for ( it = nntp.begin(); it != nntp.end(); it++ ) {
00078 odebug << "Added NNTP account" << oendl;
00079 NNTPaccount *account = new NNTPaccount( (*it).replace(0, 5, "") );
00080 accounts.append( account );
00081 }
00082
00083 readAccounts();
00084 }
00085
00086 void Settings::saveAccounts()
00087 {
00088 checkDirectory();
00089 Account *it;
00090
00091 for ( it = accounts.first(); it; it = accounts.next() ) {
00092 it->save();
00093 }
00094 }
00095
00096 void Settings::readAccounts()
00097 {
00098 checkDirectory();
00099 Account *it;
00100
00101 for ( it = accounts.first(); it; it = accounts.next() ) {
00102 it->read();
00103 }
00104 }
00105
00106 Account::Account()
00107 {
00108 accountName = "changeMe";
00109 type = MAILLIB::A_UNDEFINED;
00110 ssl = false;
00111 connectionType = 1;
00112 offline = false;
00113 }
00114
00115 void Account::remove()
00116 {
00117 QFile file( getFileName() );
00118 file.remove();
00119 }
00120
00121 IMAPaccount::IMAPaccount()
00122 : Account()
00123 {
00124 file = IMAPaccount::getUniqueFileName();
00125 accountName = "New IMAP Account";
00126 ssl = false;
00127 connectionType = 1;
00128 type = MAILLIB::A_IMAP;
00129 port = IMAP_PORT;
00130 }
00131
00132 IMAPaccount::IMAPaccount( QString filename )
00133 : Account()
00134 {
00135 file = filename;
00136 accountName = "New IMAP Account";
00137 ssl = false;
00138 connectionType = 1;
00139 type = MAILLIB::A_IMAP;
00140 port = IMAP_PORT;
00141 }
00142
00143 QString IMAPaccount::getUniqueFileName()
00144 {
00145 int num = 0;
00146 QString unique;
00147
00148 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
00149
00150 QStringList imap = dir.entryList( "imap-*" );
00151 do {
00152 unique.setNum( num++ );
00153 } while ( imap.contains( "imap-" + unique ) > 0 );
00154
00155 return unique;
00156 }
00157
00158 void IMAPaccount::read()
00159 {
00160 Config *conf = new Config( getFileName(), Config::File );
00161 conf->setGroup( "IMAP Account" );
00162 accountName = conf->readEntry( "Account","" );
00163 if (accountName.isNull()) accountName = "";
00164 server = conf->readEntry( "Server","" );
00165 if (server.isNull()) server="";
00166 port = conf->readEntry( "Port","" );
00167 if (port.isNull()) port="143";
00168 connectionType = conf->readNumEntry( "ConnectionType" );
00169 ssl = conf->readBoolEntry( "SSL",false );
00170 user = conf->readEntry( "User","" );
00171 if (user.isNull()) user = "";
00172 password = conf->readEntryCrypt( "Password","" );
00173 if (password.isNull()) password = "";
00174 prefix = conf->readEntry("MailPrefix","");
00175 if (prefix.isNull()) prefix = "";
00176 offline = conf->readBoolEntry("Offline",false);
00177 delete conf;
00178 }
00179
00180 void IMAPaccount::save()
00181 {
00182 odebug << "saving " + getFileName() << oendl;
00183 Settings::checkDirectory();
00184
00185 Config *conf = new Config( getFileName(), Config::File );
00186 conf->setGroup( "IMAP Account" );
00187 conf->writeEntry( "Account", accountName );
00188 conf->writeEntry( "Server", server );
00189 conf->writeEntry( "Port", port );
00190 conf->writeEntry( "SSL", ssl );
00191 conf->writeEntry( "ConnectionType", connectionType );
00192 conf->writeEntry( "User", user );
00193 conf->writeEntryCrypt( "Password", password );
00194 conf->writeEntry( "MailPrefix",prefix);
00195 conf->writeEntry( "Offline",offline);
00196 conf->write();
00197 delete conf;
00198 }
00199
00200
00201 QString IMAPaccount::getFileName()
00202 {
00203 return (QString) getenv( "HOME" ) + "/Applications/opiemail/imap-" + file;
00204 }
00205
00206 POP3account::POP3account()
00207 : Account()
00208 {
00209 file = POP3account::getUniqueFileName();
00210 accountName = "New POP3 Account";
00211 ssl = false;
00212 connectionType = 1;
00213 type = MAILLIB::A_POP3;
00214 port = POP3_PORT;
00215 m_CheckSize = true;
00216 m_MaxSize = 1024;
00217 }
00218
00219 POP3account::POP3account( QString filename )
00220 : Account()
00221 {
00222 file = filename;
00223 accountName = "New POP3 Account";
00224 ssl = false;
00225 connectionType = 1;
00226 type = MAILLIB::A_POP3;
00227 port = POP3_PORT;
00228 m_CheckSize = true;
00229 m_MaxSize = 1024;
00230 }
00231
00232 QString POP3account::getUniqueFileName()
00233 {
00234 int num = 0;
00235 QString unique;
00236
00237 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
00238
00239 QStringList imap = dir.entryList( "pop3-*" );
00240 do {
00241 unique.setNum( num++ );
00242 } while ( imap.contains( "pop3-" + unique ) > 0 );
00243
00244 return unique;
00245 }
00246
00247 void POP3account::read()
00248 {
00249 Config *conf = new Config( getFileName(), Config::File );
00250 conf->setGroup( "POP3 Account" );
00251 accountName = conf->readEntry( "Account" );
00252 server = conf->readEntry( "Server" );
00253 port = conf->readEntry( "Port" );
00254 ssl = conf->readBoolEntry( "SSL" );
00255 connectionType = conf->readNumEntry( "ConnectionType" );
00256 user = conf->readEntry( "User" );
00257 password = conf->readEntryCrypt( "Password" );
00258 offline = conf->readBoolEntry("Offline",false);
00259 m_CheckSize = conf->readBoolEntry("Checkmaxsize",true);
00260 m_MaxSize = conf->readNumEntry("Maxsize",1024);
00261 delete conf;
00262 }
00263
00264 void POP3account::save()
00265 {
00266 odebug << "saving " + getFileName() << oendl;
00267 Settings::checkDirectory();
00268
00269 Config *conf = new Config( getFileName(), Config::File );
00270 conf->setGroup( "POP3 Account" );
00271 conf->writeEntry( "Account", accountName );
00272 conf->writeEntry( "Server", server );
00273 conf->writeEntry( "Port", port );
00274 conf->writeEntry( "SSL", ssl );
00275 conf->writeEntry( "ConnectionType", connectionType );
00276 conf->writeEntry( "User", user );
00277 conf->writeEntryCrypt( "Password", password );
00278 conf->writeEntry( "Offline",offline);
00279 conf->writeEntry("Checkmaxsize",m_CheckSize);
00280 conf->writeEntry("Maxsize",m_MaxSize);
00281 conf->write();
00282 delete conf;
00283 }
00284
00285
00286 QString POP3account::getFileName()
00287 {
00288 return (QString) getenv( "HOME" ) + "/Applications/opiemail/pop3-" + file;
00289 }
00290
00291 bool POP3account::getCheckMaxSize()const
00292 {
00293 return m_CheckSize;
00294 }
00295
00296 void POP3account::setCheckMaxSize(bool aValue)
00297 {
00298 m_CheckSize = aValue;
00299 }
00300
00301 int POP3account::getMaxSize()const
00302 {
00303 return m_MaxSize;
00304 }
00305
00306 void POP3account::setMaxSize(int aValue)
00307 {
00308 m_MaxSize = aValue;
00309 }
00310
00311 SMTPaccount::SMTPaccount()
00312 : Account()
00313 {
00314 file = SMTPaccount::getUniqueFileName();
00315 accountName = "New SMTP Account";
00316 ssl = false;
00317 connectionType = 1;
00318 login = false;
00319 useCC = false;
00320 useBCC = false;
00321 useReply = false;
00322 type = MAILLIB::A_SMTP;
00323 port = SMTP_PORT;
00324 }
00325
00326 SMTPaccount::SMTPaccount( QString filename )
00327 : Account()
00328 {
00329 file = filename;
00330 accountName = "New SMTP Account";
00331 ssl = false;
00332 connectionType = 1;
00333 login = false;
00334 type = MAILLIB::A_SMTP;
00335 port = SMTP_PORT;
00336 }
00337
00338 QString SMTPaccount::getUniqueFileName()
00339 {
00340 int num = 0;
00341 QString unique;
00342
00343 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
00344
00345 QStringList imap = dir.entryList( "smtp-*" );
00346 do {
00347 unique.setNum( num++ );
00348 } while ( imap.contains( "smtp-" + unique ) > 0 );
00349
00350 return unique;
00351 }
00352
00353 void SMTPaccount::read()
00354 {
00355 Config *conf = new Config( getFileName(), Config::File );
00356 conf->setGroup( "SMTP Account" );
00357 accountName = conf->readEntry( "Account" );
00358 server = conf->readEntry( "Server" );
00359 port = conf->readEntry( "Port" );
00360 ssl = conf->readBoolEntry( "SSL" );
00361 connectionType = conf->readNumEntry( "ConnectionType" );
00362 login = conf->readBoolEntry( "Login" );
00363 user = conf->readEntry( "User" );
00364 password = conf->readEntryCrypt( "Password" );
00365 delete conf;
00366 }
00367
00368 void SMTPaccount::save()
00369 {
00370 odebug << "saving " + getFileName() << oendl;
00371 Settings::checkDirectory();
00372
00373 Config *conf = new Config( getFileName(), Config::File );
00374 conf->setGroup( "SMTP Account" );
00375 conf->writeEntry( "Account", accountName );
00376 conf->writeEntry( "Server", server );
00377 conf->writeEntry( "Port", port );
00378 conf->writeEntry( "SSL", ssl );
00379 conf->writeEntry( "ConnectionType", connectionType );
00380 conf->writeEntry( "Login", login );
00381 conf->writeEntry( "User", user );
00382 conf->writeEntryCrypt( "Password", password );
00383 conf->write();
00384 delete conf;
00385 }
00386
00387
00388 QString SMTPaccount::getFileName()
00389 {
00390 return (QString) getenv( "HOME" ) + "/Applications/opiemail/smtp-" + file;
00391 }
00392
00393 NNTPaccount::NNTPaccount()
00394 : Account()
00395 {
00396 file = NNTPaccount::getUniqueFileName();
00397 accountName = "New NNTP Account";
00398 ssl = false;
00399 login = false;
00400 type = MAILLIB::A_NNTP;
00401 port = NNTP_PORT;
00402 }
00403
00404 NNTPaccount::NNTPaccount( QString filename )
00405 : Account()
00406 {
00407 file = filename;
00408 accountName = "New NNTP Account";
00409 ssl = false;
00410 login = false;
00411 type = MAILLIB::A_NNTP;
00412 port = NNTP_PORT;
00413 }
00414
00415 QString NNTPaccount::getUniqueFileName()
00416 {
00417 int num = 0;
00418 QString unique;
00419
00420 QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
00421
00422 QStringList imap = dir.entryList( "nntp-*" );
00423 do {
00424 unique.setNum( num++ );
00425 } while ( imap.contains( "nntp-" + unique ) > 0 );
00426
00427 return unique;
00428 }
00429
00430 void NNTPaccount::read()
00431 {
00432 Config *conf = new Config( getFileName(), Config::File );
00433 conf->setGroup( "NNTP Account" );
00434 accountName = conf->readEntry( "Account" );
00435 server = conf->readEntry( "Server" );
00436 port = conf->readEntry( "Port" );
00437 ssl = conf->readBoolEntry( "SSL" );
00438 login = conf->readBoolEntry( "Login" );
00439 user = conf->readEntry( "User" );
00440 password = conf->readEntryCrypt( "Password" );
00441 subscribedGroups = conf->readListEntry( "Subscribed", ',' );
00442 delete conf;
00443 }
00444
00445 void NNTPaccount::save()
00446 {
00447 odebug << "saving " + getFileName() << oendl;
00448 Settings::checkDirectory();
00449
00450 Config *conf = new Config( getFileName(), Config::File );
00451 conf->setGroup( "NNTP Account" );
00452 conf->writeEntry( "Account", accountName );
00453 conf->writeEntry( "Server", server );
00454 conf->writeEntry( "Port", port );
00455 conf->writeEntry( "SSL", ssl );
00456 conf->writeEntry( "Login", login );
00457 conf->writeEntry( "User", user );
00458 conf->writeEntryCrypt( "Password", password );
00459 conf->writeEntry( "Subscribed" , subscribedGroups, ',' );
00460 conf->write();
00461 delete conf;
00462 }
00463
00464
00465 QString NNTPaccount::getFileName()
00466 {
00467 return (QString) getenv( "HOME" ) + "/Applications/opiemail/nntp-" + file;
00468 }