diff --git a/mailnews/db/msgdb/src/nsMsgDatabase.cpp b/mailnews/db/msgdb/src/nsMsgDatabase.cpp index 6954802519d2..b00987d002f2 100644 --- a/mailnews/db/msgdb/src/nsMsgDatabase.cpp +++ b/mailnews/db/msgdb/src/nsMsgDatabase.cpp @@ -1708,7 +1708,7 @@ PRUint32 nsMsgDatabase::GetStatusFlags(nsIMsgDBHdr *msgHdr, PRUint32 origFlags) nsMsgKey key; (void)msgHdr->GetMessageKey(&key); - if (m_newSet.IndexOf(key) != kNotFound) + if (m_newSet.GetSize() > 0 && m_newSet.GetAt(m_newSet.GetSize() - 1) == key || m_newSet.IndexOf(key) != kNotFound) statusFlags |= MSG_FLAG_NEW; else statusFlags &= ~MSG_FLAG_NEW; @@ -2250,7 +2250,9 @@ NS_IMETHODIMP nsMsgDatabase::MarkReadByDate (PRTime startDate, PRTime endDate, n NS_IMETHODIMP nsMsgDatabase::AddToNewList(nsMsgKey key) { - if (m_newSet.IndexOf(key) == kNotFound) + // we add new keys in increasing order... + if (m_newSet.GetSize() == 0 + || (m_newSet.GetAt(m_newSet.GetSize() - 1) < key)) m_newSet.Add(key); return NS_OK; } @@ -3451,7 +3453,10 @@ nsresult nsMsgDatabase::ThreadNewHdr(nsMsgHdr* newHdr, PRBool &newThread) PRUint16 numReferences = 0; PRUint32 newHdrFlags = 0; - newHdr->GetFlags(&newHdrFlags); + // use raw flags instead of GetFlags, because GetFlags will + // pay attention to what's in m_newSet, and this new hdr isn't + // in m_newSet yet. + newHdr->GetRawFlags(&newHdrFlags); newHdr->GetNumReferences(&numReferences); #define SUBJ_THREADING 1// try reference threading first @@ -3518,7 +3523,7 @@ nsresult nsMsgDatabase::AddToThread(nsMsgHdr *newHdr, nsIMsgThread *thread, nsIM return thread->AddChild(newHdr, inReplyTo, threadInThread, announcer); } -nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(nsCString &reference) +nsMsgHdr * nsMsgDatabase::GetMsgHdrForReference(nsCString &reference) { NS_ASSERTION(PR_FALSE, "not implemented yet."); return nsnull; diff --git a/mailnews/db/msgdb/src/nsMsgHdr.cpp b/mailnews/db/msgdb/src/nsMsgHdr.cpp index 69a3c77d0a43..a011f049f883 100644 --- a/mailnews/db/msgdb/src/nsMsgHdr.cpp +++ b/mailnews/db/msgdb/src/nsMsgHdr.cpp @@ -583,7 +583,7 @@ NS_IMETHODIMP nsMsgHdr::GetMessageOffset(PRUint32 *result) GetRawFlags(&rawFlags); if (rawFlags & MSG_FLAG_OFFLINE) { - return GetUInt32Column(m_mdb->m_offlineMsgOffsetColumnToken, result); + return GetUInt32Column(m_mdb->m_offlineMsgOffsetColumnToken, result); } else { diff --git a/mailnews/db/msgdb/src/nsMsgThread.cpp b/mailnews/db/msgdb/src/nsMsgThread.cpp index 1d0eb105d1de..60f2a1a49b7a 100644 --- a/mailnews/db/msgdb/src/nsMsgThread.cpp +++ b/mailnews/db/msgdb/src/nsMsgThread.cpp @@ -248,7 +248,7 @@ NS_IMETHODIMP nsMsgThread::AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool parentKeyNeedsSetting = PR_TRUE; nsIMdbRow *hdrRow = hdr->GetMDBRow(); - hdr->GetFlags(&newHdrFlags); + hdr->GetRawFlags(&newHdrFlags); hdr->GetMessageKey(&newHdrKey); hdr->GetDateInSeconds(&msgDate); if (msgDate > m_newestMsgDate) diff --git a/mailnews/db/msgdb/src/nsNewsDatabase.cpp b/mailnews/db/msgdb/src/nsNewsDatabase.cpp index 2cb679751d1e..6e834657fcc4 100644 --- a/mailnews/db/msgdb/src/nsNewsDatabase.cpp +++ b/mailnews/db/msgdb/src/nsNewsDatabase.cpp @@ -256,8 +256,8 @@ NS_IMETHODIMP nsNewsDatabase::GetHighWaterArticleNum(nsMsgKey *key) // Do we need to keep track of known arts permanently? NS_IMETHODIMP nsNewsDatabase::GetLowWaterArticleNum(nsMsgKey *key) { - nsresult rv; - nsMsgHdr *pHeader; + nsresult rv; + nsMsgHdr *pHeader; nsCOMPtr hdrs; rv = EnumerateMessages(getter_AddRefs(hdrs)); @@ -272,7 +272,7 @@ NS_IMETHODIMP nsNewsDatabase::GetLowWaterArticleNum(nsMsgKey *key) return pHeader->GetMessageKey(key); } -nsresult nsNewsDatabase::ExpireUpTo(nsMsgKey expireKey) +nsresult nsNewsDatabase::ExpireUpTo(nsMsgKey expireKey) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/mailnews/news/src/nsNNTPNewsgroupList.cpp b/mailnews/news/src/nsNNTPNewsgroupList.cpp index 6c1bb22f6cc0..07b33ac6f138 100644 --- a/mailnews/news/src/nsNNTPNewsgroupList.cpp +++ b/mailnews/news/src/nsNNTPNewsgroupList.cpp @@ -504,17 +504,12 @@ nsNNTPNewsgroupList::ParseLine(char *line, PRUint32 * message_number) const char *subject = line; /* #### const evilness */ PRUint32 subjectLen = strlen(line); - PRUint32 flags; - rv = newMsgHdr->GetFlags(&flags); - if (NS_FAILED(rv)) - return rv; + PRUint32 flags = 0; + // ### should call IsHeaderRead here... /* strip "Re: " */ nsXPIDLCString modifiedSubject; if (NS_MsgStripRE(&subject, &subjectLen, getter_Copies(modifiedSubject))) - flags |= MSG_FLAG_HAS_RE; - rv = newMsgHdr->SetFlags(flags); // this will make sure read flags agree with newsrc - if (NS_FAILED(rv)) - return rv; + (void) newMsgHdr->OrFlags(MSG_FLAG_HAS_RE, &flags); // this will make sure read flags agree with newsrc if (! (flags & MSG_FLAG_READ)) rv = newMsgHdr->OrFlags(MSG_FLAG_NEW, &flags);