// kmacctmaildir.cpp #ifdef HAVE_CONFIG_H #include #endif #include #include "kmacctmaildir.h" #include "kmfoldermaildir.h" #include "kmacctfolder.h" #include "broadcaststatus.h" using KPIM::BroadcastStatus; #include "progressmanager.h" using KPIM::ProgressManager; #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_PATHS_H #include /* defines _PATH_MAILDIR */ #endif #undef None //----------------------------------------------------------------------------- KMAcctMaildir::KMAcctMaildir(AccountManager* aOwner, const TQString& aAccountName, uint id): KMAccount(aOwner, aAccountName, id) { } //----------------------------------------------------------------------------- KMAcctMaildir::~KMAcctMaildir() { mLocation = ""; } //----------------------------------------------------------------------------- TQString KMAcctMaildir::type(void) const { return "maildir"; } //----------------------------------------------------------------------------- void KMAcctMaildir::init() { KMAccount::init(); mLocation = getenv("MAIL"); if (mLocation.isNull()) { mLocation = getenv("HOME"); mLocation += "/Maildir/"; } } //----------------------------------------------------------------------------- void KMAcctMaildir::pseudoAssign( const KMAccount * a ) { KMAccount::pseudoAssign( a ); const KMAcctMaildir * m = dynamic_cast( a ); if ( !m ) return; setLocation( m->location() ); } //----------------------------------------------------------------------------- void KMAcctMaildir::processNewMail(bool) { TQTime t; hasNewMail = false; if ( precommand().isEmpty() ) { TQFileInfo fi( location() ); if ( !fi.exists() ) { checkDone( hasNewMail, CheckOK ); BroadcastStatus::instance()->setStatusMsgTransmissionCompleted( mName, 0 ); return; } } KMFolder mailFolder(0, location(), KMFolderTypeMaildir, false /* no index */, false /* don't export sernums */); long num = 0; long i; int rc; KMMessage* msg; bool addedOk; if (!mFolder) { checkDone( hasNewMail, CheckError ); BroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } BroadcastStatus::instance()->setStatusMsg( i18n("Preparing transmission from \"%1\"...").arg(mName)); Q_ASSERT( !mMailCheckProgressItem ); TQString escapedName = TQStyleSheet::escape( mName ); mMailCheckProgressItem = KPIM::ProgressManager::createProgressItem( "MailCheck" + mName, escapedName, i18n("Preparing transmission from \"%1\"...").arg( escapedName ), false, // cannot be canceled false ); // no tls/ssl // run the precommand if (!runPrecommand(precommand())) { kdDebug(5006) << "cannot run precommand " << precommand() << endl; checkDone( hasNewMail, CheckError ); BroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } rc = mailFolder.open("acctmaildirMail"); if (rc) { TQString aStr = i18n("Cannot open folder %1.").arg( mailFolder.location() ); KMessageBox::sorry(0, aStr); kdDebug(5006) << "cannot open folder " << mailFolder.location() << endl; checkDone( hasNewMail, CheckError ); BroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } mFolder->open("acctmaildirFold"); num = mailFolder.count(); addedOk = true; t.start(); // prepare the static parts of the status message: TQString statusMsgStub = i18n("Moving message %3 of %2 from %1.") .arg(mailFolder.location()).arg(num); mMailCheckProgressItem->setTotalItems( num ); for (i=0; imailCheckAborted() ) { BroadcastStatus::instance()->setStatusMsg( i18n("Transmission aborted.") ); num = i; addedOk = false; } if (!addedOk) break; TQString statusMsg = statusMsgStub.arg(i); mMailCheckProgressItem->incCompletedItems(); mMailCheckProgressItem->updateProgress(); mMailCheckProgressItem->setStatus( statusMsg ); 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(); } } if( mMailCheckProgressItem ) { // do this only once... BroadcastStatus::instance()->setStatusMsgTransmissionCompleted( num ); mMailCheckProgressItem->setStatus( i18n( "Fetched 1 message from maildir folder %1.", "Fetched %n messages from maildir folder %1.", num ).arg(mailFolder.location() ) ); mMailCheckProgressItem->setComplete(); mMailCheckProgressItem = 0; } if (addedOk) { BroadcastStatus::instance()->setStatusMsgTransmissionCompleted( mName, num ); } // else warning is written already mailFolder.close("acctmaildirMail"); mFolder->close("acctmaildirFold"); checkDone( hasNewMail, CheckOK ); return; } //----------------------------------------------------------------------------- void KMAcctMaildir::readConfig(KConfig& config) { KMAccount::readConfig(config); mLocation = config.readPathEntry("Location", mLocation); } //----------------------------------------------------------------------------- void KMAcctMaildir::writeConfig(KConfig& config) { KMAccount::writeConfig(config); config.writePathEntry("Location", mLocation); } //----------------------------------------------------------------------------- void KMAcctMaildir::setLocation(const TQString& aLocation) { mLocation = aLocation; }