You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
5.6 KiB
225 lines
5.6 KiB
// kmacctmaildir.cpp |
|
|
|
#ifdef HAVE_CONFIG_H |
|
#include <config.h> |
|
#endif |
|
|
|
#include <qfileinfo.h> |
|
#include "kmacctmaildir.h" |
|
#include "kmfoldermaildir.h" |
|
#include "kmacctfolder.h" |
|
#include "kmbroadcaststatus.h" |
|
|
|
#include <kapplication.h> |
|
#include <klocale.h> |
|
#include <kmessagebox.h> |
|
#include <kdebug.h> |
|
#include <kconfig.h> |
|
|
|
#include <stdlib.h> |
|
#include <stdio.h> |
|
#include <errno.h> |
|
#include <assert.h> |
|
|
|
#ifdef HAVE_PATHS_H |
|
#include <paths.h> /* defines _PATH_MAILDIR */ |
|
#endif |
|
|
|
#undef None |
|
|
|
//----------------------------------------------------------------------------- |
|
KMAcctMaildir::KMAcctMaildir(KMAcctMgr* aOwner, const QString& aAccountName): |
|
base(aOwner, aAccountName) |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
KMAcctMaildir::~KMAcctMaildir() |
|
{ |
|
mLocation = ""; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
QString KMAcctMaildir::type(void) const |
|
{ |
|
return "maildir"; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::init() { |
|
base::init(); |
|
|
|
mLocation = getenv("MAIL"); |
|
if (mLocation.isNull()) { |
|
mLocation = getenv("HOME"); |
|
mLocation += "/Maildir/"; |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::pseudoAssign( const KMAccount * a ) |
|
{ |
|
base::pseudoAssign( a ); |
|
|
|
const KMAcctMaildir * m = dynamic_cast<const KMAcctMaildir*>( a ); |
|
if ( !m ) return; |
|
|
|
setLocation( m->location() ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::processNewMail(bool) |
|
{ |
|
QTime t; |
|
hasNewMail = false; |
|
|
|
if ( precommand().isEmpty() ) { |
|
QFileInfo fi( location() ); |
|
if ( !fi.exists() ) { |
|
checkDone(hasNewMail, 0); |
|
KMBroadcastStatus::instance()->setStatusMsgTransmissionCompleted( 0 ); |
|
return; |
|
} |
|
} |
|
|
|
KMFolderMaildir mailFolder(0, location()); |
|
|
|
long num = 0; |
|
long i; |
|
int rc; |
|
KMMessage* msg; |
|
bool addedOk; |
|
|
|
if (!mFolder) { |
|
checkDone(hasNewMail, -1); |
|
KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); |
|
return; |
|
} |
|
|
|
KMBroadcastStatus::instance()->reset(); |
|
KMBroadcastStatus::instance()->setStatusMsg( |
|
i18n("Preparing transmission from \"%1\"...").arg(mName)); |
|
|
|
// run the precommand |
|
if (!runPrecommand(precommand())) |
|
{ |
|
kdDebug(5006) << "cannot run precommand " << precommand() << endl; |
|
checkDone(hasNewMail, -1); |
|
} |
|
|
|
mailFolder.setAutoCreateIndex(FALSE); |
|
|
|
rc = mailFolder.open(); |
|
if (rc) |
|
{ |
|
QString aStr = i18n("<qt>Cannot open folder <b>%1</b>.</qt>").arg( mailFolder.location() ); |
|
KMessageBox::sorry(0, aStr); |
|
kdDebug(5006) << "cannot open folder " << mailFolder.location() << endl; |
|
checkDone(hasNewMail, -1); |
|
KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); |
|
return; |
|
} |
|
|
|
if (mailFolder.isReadOnly()) { // mailFolder is locked |
|
mailFolder.close(); |
|
checkDone(hasNewMail, -1); |
|
QString errMsg = i18n( "Transmission failed: Could not lock %1." ) |
|
.arg( mailFolder.location() ); |
|
KMBroadcastStatus::instance()->setStatusMsg( errMsg ); |
|
return; |
|
} |
|
|
|
mFolder->quiet(TRUE); |
|
mFolder->open(); |
|
|
|
|
|
num = mailFolder.count(); |
|
|
|
addedOk = true; |
|
t.start(); |
|
|
|
// prepare the static parts of the status message: |
|
QString statusMsgStub = i18n("Moving message %3 of %2 from %1.") |
|
.arg(mailFolder.location()).arg(num); |
|
|
|
KMBroadcastStatus::instance()->setStatusProgressEnable( "M" + mName, true ); |
|
for (i=0; i<num; i++) |
|
{ |
|
|
|
if (!addedOk) break; |
|
if (KMBroadcastStatus::instance()->abortRequested()) break; |
|
|
|
QString statusMsg = statusMsgStub.arg(i); |
|
KMBroadcastStatus::instance()->setStatusMsg( statusMsg ); |
|
KMBroadcastStatus::instance()->setStatusProgressPercent( "M" + mName, |
|
(i*100) / num ); |
|
|
|
msg = mailFolder.take(0); |
|
if (msg) |
|
{ |
|
msg->setStatus(msg->headerField("Status").latin1(), |
|
msg->headerField("X-Status").latin1()); |
|
msg->setEncryptionStateChar( msg->headerField( "X-KMail-EncryptionState" ).at(0)); |
|
msg->setSignatureStateChar( msg->headerField( "X-KMail-SignatureState" ).at(0)); |
|
|
|
addedOk = processNewMsg(msg); |
|
if (addedOk) |
|
hasNewMail = true; |
|
} |
|
|
|
if (t.elapsed() >= 200) { //hardwired constant |
|
kapp->processEvents(); |
|
t.start(); |
|
} |
|
|
|
} |
|
KMBroadcastStatus::instance()->setStatusProgressEnable( "M" + mName, false ); |
|
KMBroadcastStatus::instance()->reset(); |
|
|
|
if (addedOk) |
|
{ |
|
rc = mailFolder.expunge(); |
|
if (rc) |
|
KMessageBox::queuedMessageBox( 0, KMessageBox::Information, |
|
i18n( "<qt>Cannot remove mail from " |
|
"mailbox <b>%1</b>:<br>%2</qt>" ) |
|
.arg( mailFolder.location() ) |
|
.arg( strerror( rc ) ) ); |
|
KMBroadcastStatus::instance()->setStatusMsgTransmissionCompleted( num ); |
|
} |
|
// else warning is written already |
|
|
|
mailFolder.close(); |
|
mFolder->close(); |
|
mFolder->quiet(FALSE); |
|
|
|
checkDone(hasNewMail, num); |
|
|
|
return; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::readConfig(KConfig& config) |
|
{ |
|
base::readConfig(config); |
|
mLocation = config.readEntry("Location", mLocation); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::writeConfig(KConfig& config) |
|
{ |
|
base::writeConfig(config); |
|
config.writeEntry("Location", mLocation); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
void KMAcctMaildir::setLocation(const QString& aLocation) |
|
{ |
|
mLocation = aLocation; |
|
}
|
|
|