fix 265330 problems with unread counts in virtual folders, and clearing new flag, sr=mscott

This commit is contained in:
bienvenu%nventure.com 2004-10-24 00:05:38 +00:00
parent 802e2f4724
commit 82bee19afa
2 changed files with 27 additions and 2 deletions

View File

@ -2223,7 +2223,7 @@ nsMsgAccountManager::findIdentitiesForServer(nsISupports* element, void *aData)
if (NS_FAILED(rv)) return PR_TRUE;
nsXPIDLCString serverKey;
NS_ASSERTION(thisServer, "thisServer is null");
// NS_ASSERTION(thisServer, "thisServer is null");
NS_ASSERTION(entry, "entry is null");
NS_ASSERTION(entry->server, "entry->server is null");
// if this happens, bail.
@ -2690,6 +2690,7 @@ NS_IMETHODIMP VirtualFolderChangeListener::OnHdrChange(nsIMsgDBHdr *aHdrChanged,
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo;
rv = m_virtualFolder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(virtDatabase));
NS_ENSURE_SUCCESS(rv, rv);
PRInt32 totalDelta = 0, unreadDelta = 0;
if (oldMatch != newMatch)
{
@ -2713,6 +2714,14 @@ NS_IMETHODIMP VirtualFolderChangeListener::OnHdrChange(nsIMsgDBHdr *aHdrChanged,
dbFolderInfo->ChangeNumUnreadMessages(unreadDelta);
if (totalDelta)
dbFolderInfo->ChangeNumMessages(totalDelta);
if (unreadDelta == -1 && aOldFlags & MSG_FLAG_NEW)
{
PRInt32 numNewMessages;
m_virtualFolder->GetNumNewMessages(PR_FALSE, &numNewMessages);
m_virtualFolder->SetNumNewMessages(numNewMessages - 1);
if (numNewMessages == 1)
m_virtualFolder->SetHasNewMessages(PR_FALSE);
}
m_virtualFolder->UpdateSummaryTotals(PR_TRUE); // force update from db.
virtDatabase->Commit(nsMsgDBCommitType::kLargeCommit);
}
@ -2738,6 +2747,16 @@ NS_IMETHODIMP VirtualFolderChangeListener::OnHdrDeleted(nsIMsgDBHdr *aHdrDeleted
if (!msgHdrIsRead)
dbFolderInfo->ChangeNumUnreadMessages(-1);
dbFolderInfo->ChangeNumMessages(-1);
PRUint32 hdrFlags;
aHdrDeleted->GetFlags(&hdrFlags);
if (hdrFlags & MSG_FLAG_NEW)
{
PRInt32 numNewMessages;
m_virtualFolder->GetNumNewMessages(PR_FALSE, &numNewMessages);
m_virtualFolder->SetNumNewMessages(numNewMessages - 1);
if (numNewMessages == 1)
m_virtualFolder->SetHasNewMessages(PR_FALSE);
}
m_virtualFolder->UpdateSummaryTotals(PR_TRUE); // force update from db.
virtDatabase->Commit(nsMsgDBCommitType::kLargeCommit);
}
@ -2765,7 +2784,12 @@ NS_IMETHODIMP VirtualFolderChangeListener::OnHdrAdded(nsIMsgDBHdr *aNewHdr, nsMs
if (!msgHdrIsRead)
dbFolderInfo->ChangeNumUnreadMessages(1);
if (msgFlags & MSG_FLAG_NEW)
{
PRInt32 numNewMessages;
m_virtualFolder->GetNumNewMessages(PR_FALSE, &numNewMessages);
m_virtualFolder->SetHasNewMessages(PR_TRUE);
m_virtualFolder->SetNumNewMessages(numNewMessages + 1);
}
dbFolderInfo->ChangeNumMessages(1);
m_virtualFolder->UpdateSummaryTotals(true); // force update from db.
virtDatabase->Commit(nsMsgDBCommitType::kLargeCommit);

View File

@ -3840,7 +3840,8 @@ NS_IMETHODIMP nsMsgDBFolder::GetNumNewMessages(PRBool deep, PRInt32 *aNumNewMess
{
NS_ENSURE_ARG_POINTER(aNumNewMessages);
PRInt32 numNewMessages = mNumNewBiffMessages;
PRInt32 numNewMessages = (!deep || ! (mFlags & MSG_FOLDER_FLAG_VIRTUAL))
? mNumNewBiffMessages : 0;
if (deep)
{
PRUint32 count;