kmacctmaildir.cpp
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 }
This file is part of the documentation for kmail Library Version 3.2.2.