diff --git a/kmaccount.h b/kmaccount.h index e6e20d139..c99217baa 100644 --- a/kmaccount.h +++ b/kmaccount.h @@ -148,6 +148,7 @@ public: signals: virtual void finishedCheck(bool newMail); + virtual void newMailsProcessed(int numberOfNewMails); protected slots: virtual void mailCheck(); diff --git a/kmacctexppop.cpp b/kmacctexppop.cpp index b240d17d0..e2b8edb6a 100644 --- a/kmacctexppop.cpp +++ b/kmacctexppop.cpp @@ -142,6 +142,7 @@ void KMAcctExpPop::processNewMail(bool _interactive) != QDialog::Accepted) { emit finishedCheck(false); + emit newMailsProcessed(0); return; } else { mPasswd = encryptStr(passwd); @@ -162,6 +163,7 @@ void KMAcctExpPop::processNewMail(bool _interactive) } else { emit finishedCheck(false); + emit newMailsProcessed(-1); return; } } @@ -418,6 +420,7 @@ void KMAcctExpPop::startJob() { i18n("Couldn't execute precommand: %1").arg(precommand()), i18n("Kmail Error Message")); emit finishedCheck(idsOfMsgs.count() > 0); + emit newMailsProcessed(-1); return; } // end precommand code @@ -751,6 +754,7 @@ void KMAcctExpPop::slotJobFinished() { KMBroadcastStatus::instance()->reset(); emit finishedCheck(numMessages > 0); + emit newMailsProcessed(numMessages); } } diff --git a/kmacctimap.cpp b/kmacctimap.cpp index 17e0a0759..9c2bc798b 100644 --- a/kmacctimap.cpp +++ b/kmacctimap.cpp @@ -491,6 +491,7 @@ void KMAcctImap::slotSimpleResult(KIO::Job * job) //----------------------------------------------------------------------------- void KMAcctImap::processNewMail(bool interactive) { + emit newMailsProcessed(-1); if (!mFolder || !mFolder->child()) { emit finishedCheck(false); diff --git a/kmacctlocal.cpp b/kmacctlocal.cpp index d0421f388..cdd80827c 100644 --- a/kmacctlocal.cpp +++ b/kmacctlocal.cpp @@ -94,6 +94,7 @@ void KMAcctLocal::processNewMail(bool) QString statusMsg = i18n("Transmission completed, no new messages."); KMBroadcastStatus::instance()->setStatusMsg( statusMsg ); emit finishedCheck(hasNewMail); + emit newMailsProcessed(0); return; } } @@ -111,6 +112,7 @@ void KMAcctLocal::processNewMail(bool) if (!mFolder) { emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } @@ -124,6 +126,7 @@ void KMAcctLocal::processNewMail(bool) { kdDebug(5006) << "cannot run precommand " << precommand() << endl; emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); } mailFolder.setAutoCreateIndex(FALSE); @@ -138,6 +141,7 @@ void KMAcctLocal::processNewMail(bool) kdDebug(5006) << "cannot open file " << mailFolder.path() << "/" << mailFolder.name() << endl; emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } @@ -146,6 +150,7 @@ void KMAcctLocal::processNewMail(bool) kdDebug(5006) << "mailFolder could not be locked" << endl; mailFolder.close(); emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); QString errMsg = i18n( "Transmission failed: Could not lock %1." ) .arg( mailFolder.location() ); KMBroadcastStatus::instance()->setStatusMsg( errMsg ); @@ -218,6 +223,7 @@ void KMAcctLocal::processNewMail(bool) mFolder->quiet(FALSE); emit finishedCheck(hasNewMail); + emit newMailsProcessed(num); return; } diff --git a/kmacctmaildir.cpp b/kmacctmaildir.cpp index db1a4e1a4..1c44619b9 100644 --- a/kmacctmaildir.cpp +++ b/kmacctmaildir.cpp @@ -82,6 +82,7 @@ void KMAcctMaildir::processNewMail(bool) QFileInfo fi( location() ); if ( !fi.exists() ) { emit finishedCheck(hasNewMail); + emit newMailsProcessed(0); QString statusMsg = i18n("Transmission completed, no new messages"); KMBroadcastStatus::instance()->setStatusMsg( statusMsg ); return; @@ -98,6 +99,7 @@ void KMAcctMaildir::processNewMail(bool) if (!mFolder) { emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } @@ -111,6 +113,7 @@ void KMAcctMaildir::processNewMail(bool) { kdDebug(5006) << "cannot run precommand " << precommand() << endl; emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); } mailFolder.setAutoCreateIndex(FALSE); @@ -125,6 +128,7 @@ void KMAcctMaildir::processNewMail(bool) kdDebug(5006) << "cannot open file " << mailFolder.path() << "/" << mailFolder.name() << endl; emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); KMBroadcastStatus::instance()->setStatusMsg( i18n( "Transmission failed." )); return; } @@ -132,6 +136,7 @@ void KMAcctMaildir::processNewMail(bool) if (mailFolder.isReadOnly()) { // mailFolder is locked mailFolder.close(); emit finishedCheck(hasNewMail); + emit newMailsProcessed(-1); QString errMsg = i18n( "Transmission failed: Could not lock %1." ) .arg( mailFolder.location() ); KMBroadcastStatus::instance()->setStatusMsg( errMsg ); @@ -201,6 +206,7 @@ void KMAcctMaildir::processNewMail(bool) mFolder->quiet(FALSE); emit finishedCheck(hasNewMail); + emit newMailsProcessed(num); return; } diff --git a/kmacctmgr.cpp b/kmacctmgr.cpp index 2505a9e02..2f2a320fb 100644 --- a/kmacctmgr.cpp +++ b/kmacctmgr.cpp @@ -5,6 +5,7 @@ #include "kmacctlocal.h" #include "kmacctexppop.h" #include "kmacctimap.h" +#include "kmbroadcaststatus.h" #include @@ -191,7 +192,11 @@ KMAccount* KMAcctMgr::create(const QString &aType, const QString &aName) act = new KMAcctImap(this, aName); if (act) + { act->setFolder(kernel->inboxFolder()); + connect( act, SIGNAL(newMailsProcessed(int)), + this, SLOT(addToTotalNewMailCount(int)) ); + } return act; } @@ -261,6 +266,8 @@ void KMAcctMgr::checkMail(bool _interactive) return; } + mTotalNewMailsArrived=0; + mAccountIt->toFirst(); while (TRUE) { @@ -269,6 +276,12 @@ void KMAcctMgr::checkMail(bool _interactive) if (mAccountIt->atLast()) break; ++(*mAccountIt); } + + if (mTotalNewMailsArrived!=-1) + KMBroadcastStatus::instance()->setStatusMsg( + i18n("Transmission completed, %n new message.", + "Transmission completed, %n new messages.", mTotalNewMailsArrived) ); + } @@ -326,5 +339,12 @@ void KMAcctMgr::intCheckMail(int item, bool _interactive) { } +//----------------------------------------------------------------------------- +void KMAcctMgr::addToTotalNewMailCount(int newmails) +{ + if ( newmails==-1 ) mTotalNewMailsArrived=-1; + if ( mTotalNewMailsArrived==-1 ) return; + mTotalNewMailsArrived+=newmails; +} //----------------------------------------------------------------------------- #include "kmacctmgr.moc" diff --git a/kmacctmgr.h b/kmacctmgr.h index 7e7f233d8..91582abde 100644 --- a/kmacctmgr.h +++ b/kmacctmgr.h @@ -64,6 +64,12 @@ public slots: virtual void intCheckMail(int, bool _interactive = true); virtual void processNextCheck(bool _newMail); + /** this slot increases the count of new mails to show a total number + after checking in multiple accounts. You can disable the display of + the total (for example, to show an error in the status bar) by + calling it with numNewMails = -1 */ + virtual void addToTotalNewMailCount(int numNewMails); + signals: /** emitted if new mail has been collected */ void checkedMail(bool, bool); @@ -76,6 +82,7 @@ private: bool checking; bool newMailArrived; bool interactive; + int mTotalNewMailsArrived; }; #endif /*kmacctmgr_h*/