From e3fb855089418a78a38d5cd397495691cbfd361e Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Wed, 26 Jul 2000 21:29:46 +0000 Subject: [PATCH] keep folder cache from getting stale, r=putterman 18346 git-svn-id: svn://10.0.0.236/trunk@74830 18797224-902f-48f8-a5cc-f745e15eee43 --- .../mailnews/db/msgdb/src/nsMsgDatabase.cpp | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp b/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp index a1ff4d2d1fc..2d6e0b29f57 100644 --- a/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp +++ b/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp @@ -43,6 +43,9 @@ #include "nsMsgMimeCID.h" #include "nsILocaleService.h" +#include "nsIMsgAccountManager.h" +#include "nsIMsgFolderCache.h" +#include "nsIMsgFolderCacheElement.h" static NS_DEFINE_CID(kCMorkFactory, NS_MORK_CID); #if defined(XP_MAC) && defined(CompareString) @@ -899,6 +902,36 @@ NS_IMETHODIMP nsMsgDatabase::Commit(nsMsgDBCommit commitType) // ### do something with error, but clear it now because mork errors out on commits. if (GetEnv()) GetEnv()->ClearErrors(); + + nsresult rv; + NS_WITH_SERVICE(nsIMsgAccountManager, accountManager, + NS_MSGACCOUNTMANAGER_PROGID, &rv); + if (NS_SUCCEEDED(rv) && accountManager) + { + nsCOMPtr folderCache; + + rv = accountManager->GetFolderCache(getter_AddRefs(folderCache)); + if (NS_SUCCEEDED(rv) && folderCache) + { + nsCOMPtr cacheElement; + rv = folderCache->GetCacheElement(m_dbName, PR_FALSE, getter_AddRefs(cacheElement)); + if (NS_SUCCEEDED(rv) && cacheElement && m_dbFolderInfo) + { + PRInt32 totalMessages, unreadMessages, pendingMessages, pendingUnreadMessages; + + m_dbFolderInfo->GetNumMessages(&totalMessages); + m_dbFolderInfo->GetNumNewMessages(&unreadMessages); + m_dbFolderInfo->GetImapUnreadPendingMessages(&pendingUnreadMessages); + m_dbFolderInfo->GetImapTotalPendingMessages(&pendingMessages); + cacheElement->SetInt32Property("totalMsgs", totalMessages); + cacheElement->SetInt32Property("totalUnreadMsgs", unreadMessages); + cacheElement->SetInt32Property("pendingMsgs", pendingMessages); + cacheElement->SetInt32Property("pendingUnreadMsgs", pendingUnreadMessages); + folderCache->Commit(PR_FALSE); + } + } + } + return err; }