This patch fixes kmail for the case of multiple accounts, so that it doesn't

show the user a wrong number of mails loaded. Currently, it shows just the
number of mails in the last account, but with this patch, it shows the
total number of mails.
I haven't tested pop3 or maildir, but they should work as the patch is quite
simple. I also didn't find a way to make it work with imap, so in case there's
an imap account, it just turns back to the current (broken) behaviour.
I waited 4 days for comments for this patch, so I think it's enough.
Btw, this fixes #38403

svn path=/trunk/kdenetwork/kmail/; revision=140766
wilder-work
Antonio Larrosa Jimenez 24 years ago
parent 22bc3a738e
commit 7145c5950c
  1. 1
      kmaccount.h
  2. 4
      kmacctexppop.cpp
  3. 1
      kmacctimap.cpp
  4. 6
      kmacctlocal.cpp
  5. 6
      kmacctmaildir.cpp
  6. 20
      kmacctmgr.cpp
  7. 7
      kmacctmgr.h

@ -148,6 +148,7 @@ public:
signals:
virtual void finishedCheck(bool newMail);
virtual void newMailsProcessed(int numberOfNewMails);
protected slots:
virtual void mailCheck();

@ -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);
}
}

@ -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);

@ -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;
}

@ -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;
}

@ -5,6 +5,7 @@
#include "kmacctlocal.h"
#include "kmacctexppop.h"
#include "kmacctimap.h"
#include "kmbroadcaststatus.h"
#include <assert.h>
@ -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"

@ -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*/

Loading…
Cancel
Save