part of fix for 19618 problem with thread counts r=putterman

git-svn-id: svn://10.0.0.236/trunk@78402 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bienvenu%netscape.com
2000-09-07 18:42:07 +00:00
parent 383539d22b
commit 30fc893818
3 changed files with 25 additions and 20 deletions

View File

@@ -299,6 +299,7 @@ protected:
nsIDBChangeListener *instigator);
virtual nsresult RemoveHeaderFromDB(nsMsgHdr *msgHdr);
virtual nsresult RemoveHeaderFromThread(nsMsgHdr *msgHdr);
static nsVoidArray/*<nsMsgDatabase>*/* GetDBCache();

View File

@@ -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 <nsIMsgThread> thread ;
ret = GetThreadContainingMsgHdr(msgHdr, getter_AddRefs(thread));
if (NS_SUCCEEDED(ret) && thread)
{
nsCOMPtr <nsIDBChangeAnnouncer> 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 <nsIMsgThread> thread ;
ret = GetThreadContainingMsgHdr(msgHdr, getter_AddRefs(thread));
if (NS_SUCCEEDED(ret))
{
nsCOMPtr <nsIDBChangeAnnouncer> 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;
}

View File

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