00001
00002
00003
#ifdef HAVE_CONFIG_H
00004
#include <config.h>
00005
#endif
00006
00007
#include <qfileinfo.h>
00008
#include "kmacctmaildir.h"
00009
#include "kmfoldermaildir.h"
00010
#include "kmacctfolder.h"
00011
#include "kmbroadcaststatus.h"
00012
00013
#include <kapplication.h>
00014
#include <klocale.h>
00015
#include <kmessagebox.h>
00016
#include <kdebug.h>
00017
#include <kconfig.h>
00018
00019
#include <stdlib.h>
00020
#include <stdio.h>
00021
#include <errno.h>
00022
#include <assert.h>
00023
00024
#ifdef HAVE_PATHS_H
00025
#include <paths.h>
00026
#endif
00027
00028
#undef None
00029
00030
00031 KMAcctMaildir::KMAcctMaildir(KMAcctMgr* aOwner,
const QString& aAccountName):
00032 KMAccount(aOwner, aAccountName)
00033 {
00034 }
00035
00036
00037
00038 KMAcctMaildir::~KMAcctMaildir()
00039 {
00040 mLocation =
"";
00041 }
00042
00043
00044
00045 QString KMAcctMaildir::type(
void)
const
00046
{
00047
return "maildir";
00048 }
00049
00050
00051
00052
void KMAcctMaildir::init() {
00053 KMAccount::init();
00054
00055 mLocation = getenv(
"MAIL");
00056
if (mLocation.isNull()) {
00057 mLocation = getenv(
"HOME");
00058 mLocation +=
"/Maildir/";
00059 }
00060 }
00061
00062
00063
00064
void KMAcctMaildir::pseudoAssign(
const KMAccount * a )
00065 {
00066 KMAccount::pseudoAssign( a );
00067
00068
const KMAcctMaildir * m = dynamic_cast<const KMAcctMaildir*>( a );
00069
if ( !m )
return;
00070
00071 setLocation( m->location() );
00072 }
00073
00074
00075
void KMAcctMaildir::processNewMail(
bool)
00076 {
00077 QTime t;
00078 hasNewMail =
false;
00079
00080
if ( precommand().isEmpty() ) {
00081 QFileInfo fi(
location() );
00082
if ( !fi.exists() ) {
00083 checkDone(hasNewMail, 0);
00084
KMBroadcastStatus::instance()->
setStatusMsgTransmissionCompleted( 0 );
00085
return;
00086 }
00087 }
00088
00089 KMFolderMaildir mailFolder(0,
location());
00090
00091
long num = 0;
00092
long i;
00093
int rc;
00094 KMMessage* msg;
00095
bool addedOk;
00096
00097
if (!mFolder) {
00098 checkDone(hasNewMail, -1);
00099
KMBroadcastStatus::instance()->
setStatusMsg( i18n(
"Transmission failed." ));
00100
return;
00101 }
00102
00103
KMBroadcastStatus::instance()->
reset();
00104
KMBroadcastStatus::instance()->
setStatusMsg(
00105 i18n(
"Preparing transmission from \"%1\"...").arg(mName));
00106
00107
00108
if (!runPrecommand(precommand()))
00109 {
00110 kdDebug(5006) <<
"cannot run precommand " << precommand() << endl;
00111 checkDone(hasNewMail, -1);
00112 }
00113
00114 mailFolder.setAutoCreateIndex(FALSE);
00115
00116 rc = mailFolder.open();
00117
if (rc)
00118 {
00119 QString aStr = i18n(
"<qt>Cannot open folder <b>%1</b>.</qt>").arg( mailFolder.location() );
00120 KMessageBox::sorry(0, aStr);
00121 kdDebug(5006) <<
"cannot open folder " << mailFolder.location() << endl;
00122 checkDone(hasNewMail, -1);
00123
KMBroadcastStatus::instance()->
setStatusMsg( i18n(
"Transmission failed." ));
00124
return;
00125 }
00126
00127
if (mailFolder.isReadOnly()) {
00128 mailFolder.close();
00129 checkDone(hasNewMail, -1);
00130 QString errMsg = i18n(
"Transmission failed: Could not lock %1." )
00131 .arg( mailFolder.location() );
00132
KMBroadcastStatus::instance()->
setStatusMsg( errMsg );
00133
return;
00134 }
00135
00136 mFolder->open();
00137
00138
00139 num = mailFolder.count();
00140
00141 addedOk =
true;
00142 t.start();
00143
00144
00145 QString statusMsgStub = i18n(
"Moving message %3 of %2 from %1.")
00146 .arg(mailFolder.location()).arg(num);
00147
00148
KMBroadcastStatus::instance()->
setStatusProgressEnable(
"M" + mName,
true );
00149
for (i=0; i<num; i++)
00150 {
00151
00152
if(
KMBroadcastStatus::instance()->
abortRequested() ) {
00153
KMBroadcastStatus::instance()->
setStatusMsg( i18n(
"Transmission aborted.") );
00154 num = i;
00155 addedOk =
false;
00156 }
00157
if (!addedOk)
break;
00158
00159 QString
statusMsg = statusMsgStub.arg(i);
00160
KMBroadcastStatus::instance()->
setStatusMsg( statusMsg );
00161
KMBroadcastStatus::instance()->
setStatusProgressPercent(
"M" + mName,
00162 (i*100) / num );
00163
00164 msg = mailFolder.take(0);
00165
if (msg)
00166 {
00167 msg->setStatus(msg->headerField(
"Status").latin1(),
00168 msg->headerField(
"X-Status").latin1());
00169 msg->setEncryptionStateChar( msg->headerField(
"X-KMail-EncryptionState" ).at(0));
00170 msg->setSignatureStateChar( msg->headerField(
"X-KMail-SignatureState" ).at(0));
00171
00172 addedOk = processNewMsg(msg);
00173
if (addedOk)
00174 hasNewMail =
true;
00175 }
00176
00177
if (t.elapsed() >= 200) {
00178 kapp->processEvents();
00179 t.start();
00180 }
00181
00182 }
00183
KMBroadcastStatus::instance()->
setStatusProgressEnable(
"M" + mName,
false );
00184
KMBroadcastStatus::instance()->
reset();
00185
00186
if (addedOk)
00187 {
00188 rc = mailFolder.expunge();
00189
if (rc)
00190 KMessageBox::queuedMessageBox( 0, KMessageBox::Information,
00191 i18n(
"<qt>Cannot remove mail from "
00192
"mailbox <b>%1</b>:<br>%2</qt>" )
00193 .arg( mailFolder.location() )
00194 .arg( strerror( rc ) ) );
00195
KMBroadcastStatus::instance()->
setStatusMsgTransmissionCompleted( num );
00196 }
00197
00198
00199 mailFolder.close();
00200 mFolder->close();
00201
00202 checkDone(hasNewMail, num);
00203
00204
return;
00205 }
00206
00207
00208
00209
void KMAcctMaildir::readConfig(KConfig& config)
00210 {
00211 KMAccount::readConfig(config);
00212 mLocation = config.readPathEntry(
"Location", mLocation);
00213 }
00214
00215
00216
00217
void KMAcctMaildir::writeConfig(KConfig& config)
00218 {
00219 KMAccount::writeConfig(config);
00220 config.writePathEntry(
"Location", mLocation);
00221 }
00222
00223
00224
void KMAcctMaildir::setLocation(
const QString& aLocation)
00225 {
00226 mLocation = aLocation;
00227 }