diff --git a/mozilla/mailnews/db/msgdb/public/nsMsgDatabase.h b/mozilla/mailnews/db/msgdb/public/nsMsgDatabase.h index 0ff250afffa..25276dd61cf 100644 --- a/mozilla/mailnews/db/msgdb/public/nsMsgDatabase.h +++ b/mozilla/mailnews/db/msgdb/public/nsMsgDatabase.h @@ -299,6 +299,7 @@ protected: nsIDBChangeListener *instigator); virtual nsresult RemoveHeaderFromDB(nsMsgHdr *msgHdr); + virtual nsresult RemoveHeaderFromThread(nsMsgHdr *msgHdr); static nsVoidArray/**/* GetDBCache(); diff --git a/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp b/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp index 0c9b7f17ebe..ee5d0017831 100644 --- a/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp +++ b/mozilla/mailnews/db/msgdb/src/nsMsgDatabase.cpp @@ -1425,6 +1425,7 @@ NS_IMETHODIMP nsMsgDatabase::DeleteHeader(nsIMsgDBHdr *msg, nsIDBChangeListener msg->GetThreadParent(&threadParent); } + RemoveHeaderFromThread(msgHdr); if (notify /* && NS_SUCCEEDED(ret)*/) { @@ -1450,6 +1451,20 @@ nsMsgDatabase::UndoDelete(nsIMsgDBHdr *msgHdr) return NS_OK; } +nsresult nsMsgDatabase::RemoveHeaderFromThread(nsMsgHdr *msgHdr) +{ + if (!msgHdr) + return NS_ERROR_NULL_POINTER; + nsresult ret = NS_OK; + nsCOMPtr thread ; + ret = GetThreadContainingMsgHdr(msgHdr, getter_AddRefs(thread)); + if (NS_SUCCEEDED(ret) && thread) + { + nsCOMPtr announcer = do_QueryInterface(this); + ret = thread->RemoveChildHdr(msgHdr, announcer); + } + return ret; +} // This is a lower level routine which doesn't send notifcations or // update folder info. One use is when a rule fires moving a header @@ -1460,26 +1475,11 @@ nsresult nsMsgDatabase::RemoveHeaderFromDB(nsMsgHdr *msgHdr) if (!msgHdr) return NS_ERROR_NULL_POINTER; nsresult ret = NS_OK; - // turn this on when Scottip has rdf stuff worked out. - nsCOMPtr thread ; - ret = GetThreadContainingMsgHdr(msgHdr, getter_AddRefs(thread)); - if (NS_SUCCEEDED(ret)) - { - nsCOMPtr announcer = do_QueryInterface(this); - ret = thread->RemoveChildHdr(msgHdr, announcer); - } - else - { -// NS_ASSERTION(PR_FALSE, "couldn't find thread containing deleted message"); - } - // even if we couldn't find the thread,we should try to remove the header. -// if (NS_SUCCEEDED(ret)) - { - RemoveHdrFromCache(msgHdr, nsMsgKey_None); - nsIMdbRow* row = msgHdr->GetMDBRow(); - ret = m_mdbAllMsgHeadersTable->CutRow(GetEnv(), msgHdr->GetMDBRow()); - row->CutAllColumns(GetEnv()); - } + + RemoveHdrFromCache(msgHdr, nsMsgKey_None); + nsIMdbRow* row = msgHdr->GetMDBRow(); + ret = m_mdbAllMsgHeadersTable->CutRow(GetEnv(), msgHdr->GetMDBRow()); + row->CutAllColumns(GetEnv()); return ret; } diff --git a/mozilla/mailnews/db/msgdb/src/nsMsgThread.cpp b/mozilla/mailnews/db/msgdb/src/nsMsgThread.cpp index be00cf848af..4cc3e2d539d 100644 --- a/mozilla/mailnews/db/msgdb/src/nsMsgThread.cpp +++ b/mozilla/mailnews/db/msgdb/src/nsMsgThread.cpp @@ -415,6 +415,10 @@ nsresult nsMsgThread::RemoveChild(nsMsgKey msgKey) rowObjectId.mOid_Id = msgKey; rowObjectId.mOid_Scope = m_mdbDB->m_hdrRowScopeToken; ret = m_mdbTable->CutOid(m_mdbDB->GetEnv(), &rowObjectId); +#if 0 // this seems to cause problems + if (m_numChildren == 0 && m_metaRow && m_mdbDB) + m_metaRow->CutAllColumns(m_mdbDB->GetEnv()); +#endif return ret; }