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 Wed Jul 28 23:57:58 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003