kmail Library API Documentation

kmacctmaildir.cpp

00001 // kmacctmaildir.cpp
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>  /* defines _PATH_MAILDIR */
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   // run the precommand
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()) { // mailFolder is locked
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   // prepare the static parts of the status message:
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) { //hardwired constant
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   // else warning is written already
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 }
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:37:19 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003