get top level reference threading working

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

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

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

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

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

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

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