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:
@@ -299,6 +299,7 @@ protected:
|
||||
nsIDBChangeListener *instigator);
|
||||
|
||||
virtual nsresult RemoveHeaderFromDB(nsMsgHdr *msgHdr);
|
||||
virtual nsresult RemoveHeaderFromThread(nsMsgHdr *msgHdr);
|
||||
|
||||
|
||||
static nsVoidArray/*<nsMsgDatabase>*/* GetDBCache();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user