get top level reference threading working

This commit is contained in:
bienvenu%netscape.com 1999-04-05 23:42:32 +00:00
Родитель 64353113d8
Коммит a8a6b0bda5
3 изменённых файлов: 14 добавлений и 10 удалений

Просмотреть файл

@ -225,12 +225,12 @@ protected:
// prefs stuff - in future, we might want to cache the prefs interface // prefs stuff - in future, we might want to cache the prefs interface
nsresult GetBoolPref(const char *prefName, PRBool *result); nsresult GetBoolPref(const char *prefName, PRBool *result);
// retrieval methods // retrieval methods
nsMsgThread * GetThreadForReference(const char * msgID); nsMsgThread * GetThreadForReference(nsString2 &msgID);
nsMsgThread * GetThreadForSubject(const char * subject); nsMsgThread * GetThreadForSubject(const char * subject);
nsMsgThread * GetThreadForMsgKey(nsMsgKey msgKey); nsMsgThread * GetThreadForMsgKey(nsMsgKey msgKey);
nsMsgThread * GetThreadForThreadId(nsMsgKey threadId); nsMsgThread * GetThreadForThreadId(nsMsgKey threadId);
nsMsgHdr * GetMsgHdrForReference(const char *reference); nsMsgHdr * GetMsgHdrForReference(nsString2 &reference);
nsMsgHdr * GetMsgHdrForMessageID(const char *msgID); nsMsgHdr * GetMsgHdrForMessageID(nsString2 &msgID);
nsMsgThread * GetThreadContainingMsgHdr(nsMsgHdr *msgHdr); nsMsgThread * GetThreadContainingMsgHdr(nsMsgHdr *msgHdr);
// threading interfaces // threading interfaces
virtual nsresult CreateNewThread(nsMsgKey key, nsMsgThread **newThread); virtual nsresult CreateNewThread(nsMsgKey key, nsMsgThread **newThread);

Просмотреть файл

@ -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); nsMsgHdr *msgHdr = GetMsgHdrForMessageID(msgID);
nsMsgThread *thread = NULL; nsMsgThread *thread = NULL;
@ -2285,7 +2285,7 @@ nsresult nsMsgDatabase::ThreadNewHdr(nsMsgHdr* newHdr, PRBool &newThread)
if (reference.Length() == 0) if (reference.Length() == 0)
break; break;
if ((thread = GetThreadForReference(reference.GetBuffer())) != NULL) if ((thread = GetThreadForReference(reference)) != NULL)
{ {
thread->GetThreadKey(&threadId); thread->GetThreadKey(&threadId);
newHdr->SetThreadId(threadId); newHdr->SetThreadId(threadId);
@ -2329,16 +2329,16 @@ nsresult nsMsgDatabase::AddToThread(nsMsgHdr *newHdr, nsMsgThread *thread, PRBoo
return thread->AddChild(newHdr, threadInThread); return thread->AddChild(newHdr, threadInThread);
} }
nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(const char *reference) nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(nsString2 &reference)
{ {
NS_ASSERTION(PR_FALSE, "not implemented yet."); NS_ASSERTION(PR_FALSE, "not implemented yet.");
return nsnull; return nsnull;
} }
nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(const char *msgID) nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(nsString2 &msgID)
{ {
nsIEnumerator* hdrs; nsIEnumerator* hdrs;
nsMsgHdr *pHeader = nsnull; nsIMessage *pHeader = nsnull;
nsresult rv = EnumerateMessages(&hdrs); nsresult rv = EnumerateMessages(&hdrs);
if (NS_FAILED(rv)) if (NS_FAILED(rv))
@ -2352,12 +2352,14 @@ nsMsgHdr * nsMsgDatabase::GetMsgHdrForMessageID(const char *msgID)
nsString messageId; nsString messageId;
(void)pHeader->GetMessageId(messageId); (void)pHeader->GetMessageId(messageId);
if (!nsCRT::strcmp(messageId, msgID)) if (msgID.Equals(messageId, PR_FALSE))
break; break;
NS_RELEASE(pHeader); NS_RELEASE(pHeader);
pHeader = nsnull; pHeader = nsnull;
} }
return pHeader; nsMsgHdr* msgHdr = NS_STATIC_CAST(nsMsgHdr*, pHeader); // closed system, cast ok
return msgHdr;
} }
nsMsgThread * nsMsgDatabase::GetThreadContainingMsgHdr(nsMsgHdr *msgHdr) nsMsgThread * nsMsgDatabase::GetThreadContainingMsgHdr(nsMsgHdr *msgHdr)

Просмотреть файл

@ -252,6 +252,8 @@ NS_IMETHODIMP nsMsgHdr::GetStringReference(PRInt32 refNum, nsString2 &resultRefe
for (refIndex = 0; refIndex <= refNum && startNextRef; refIndex++) for (refIndex = 0; refIndex <= refNum && startNextRef; refIndex++)
{ {
startNextRef = GetNextReference(startNextRef, resultReference); startNextRef = GetNextReference(startNextRef, resultReference);
if (refIndex == refNum)
break;
} }
if (refIndex != refNum) if (refIndex != refNum)