From 371506b69ff4b8991515bac13c54d69b709400bc Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Mon, 5 Apr 1999 23:42:32 +0000 Subject: [PATCH] get top level reference threading working --- mailnews/db/msgdb/public/nsMsgDatabase.h | 6 +++--- mailnews/db/msgdb/src/nsMsgDatabase.cpp | 16 +++++++++------- mailnews/db/msgdb/src/nsMsgHdr.cpp | 2 ++ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/mailnews/db/msgdb/public/nsMsgDatabase.h b/mailnews/db/msgdb/public/nsMsgDatabase.h index edc07a833cb3..8c2f341526e9 100644 --- a/mailnews/db/msgdb/public/nsMsgDatabase.h +++ b/mailnews/db/msgdb/public/nsMsgDatabase.h @@ -225,12 +225,12 @@ protected: // prefs stuff - in future, we might want to cache the prefs interface nsresult GetBoolPref(const char *prefName, PRBool *result); // retrieval methods - nsMsgThread * GetThreadForReference(const char * msgID); + nsMsgThread * GetThreadForReference(nsString2 &msgID); nsMsgThread * GetThreadForSubject(const char * subject); nsMsgThread * GetThreadForMsgKey(nsMsgKey msgKey); nsMsgThread * GetThreadForThreadId(nsMsgKey threadId); - nsMsgHdr * GetMsgHdrForReference(const char *reference); - nsMsgHdr * GetMsgHdrForMessageID(const char *msgID); + nsMsgHdr * GetMsgHdrForReference(nsString2 &reference); + nsMsgHdr * GetMsgHdrForMessageID(nsString2 &msgID); nsMsgThread * GetThreadContainingMsgHdr(nsMsgHdr *msgHdr); // threading interfaces virtual nsresult CreateNewThread(nsMsgKey key, nsMsgThread **newThread); diff --git a/mailnews/db/msgdb/src/nsMsgDatabase.cpp b/mailnews/db/msgdb/src/nsMsgDatabase.cpp index c18d477377b9..0137f2bab126 100644 --- a/mailnews/db/msgdb/src/nsMsgDatabase.cpp +++ b/mailnews/db/msgdb/src/nsMsgDatabase.cpp @@ -2236,7 +2236,7 @@ nsresult nsMsgDatabase::CreateNewThread(nsMsgKey threadId, nsMsgThread **pnewThr } -nsMsgThread *nsMsgDatabase::GetThreadForReference(const char * msgID) +nsMsgThread *nsMsgDatabase::GetThreadForReference(nsString2 &msgID) { nsMsgHdr *msgHdr = GetMsgHdrForMessageID(msgID); nsMsgThread *thread = NULL; @@ -2285,7 +2285,7 @@ nsresult nsMsgDatabase::ThreadNewHdr(nsMsgHdr* newHdr, PRBool &newThread) if (reference.Length() == 0) break; - if ((thread = GetThreadForReference(reference.GetBuffer())) != NULL) + if ((thread = GetThreadForReference(reference)) != NULL) { thread->GetThreadKey(&threadId); newHdr->SetThreadId(threadId); @@ -2329,16 +2329,16 @@ nsresult nsMsgDatabase::AddToThread(nsMsgHdr *newHdr, nsMsgThread *thread, PRBoo return thread->AddChild(newHdr, threadInThread); } -nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(const char *reference) +nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(nsString2 &reference) { NS_ASSERTION(PR_FALSE, "not implemented yet."); return nsnull; } -nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(const char *msgID) +nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(nsString2 &msgID) { nsIEnumerator* hdrs; - nsMsgHdr *pHeader = nsnull; + nsIMessage *pHeader = nsnull; nsresult rv = EnumerateMessages(&hdrs); if (NS_FAILED(rv)) @@ -2352,12 +2352,14 @@ nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(const char *msgID) nsString messageId; (void)pHeader->GetMessageId(messageId); - if (!nsCRT::strcmp(messageId, msgID)) + if (msgID.Equals(messageId, PR_FALSE)) break; NS_RELEASE(pHeader); pHeader = nsnull; } - return pHeader; + nsMsgHdr* msgHdr = NS_STATIC_CAST(nsMsgHdr*, pHeader); // closed system, cast ok + + return msgHdr; } nsMsgThread * nsMsgDatabase::GetThreadContainingMsgHdr(nsMsgHdr *msgHdr) diff --git a/mailnews/db/msgdb/src/nsMsgHdr.cpp b/mailnews/db/msgdb/src/nsMsgHdr.cpp index 986479051580..810f7c125062 100644 --- a/mailnews/db/msgdb/src/nsMsgHdr.cpp +++ b/mailnews/db/msgdb/src/nsMsgHdr.cpp @@ -252,6 +252,8 @@ NS_IMETHODIMP nsMsgHdr::GetStringReference(PRInt32 refNum, nsString2 &resultRefe for (refIndex = 0; refIndex <= refNum && startNextRef; refIndex++) { startNextRef = GetNextReference(startNextRef, resultReference); + if (refIndex == refNum) + break; } if (refIndex != refNum)