fix new flag handling, r=putterman
git-svn-id: svn://10.0.0.236/trunk@57044 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -279,7 +279,7 @@ protected:
|
||||
virtual nsresult SetKeyFlag(nsMsgKey key, PRBool set, PRUint32 flag,
|
||||
nsIDBChangeListener *instigator = NULL);
|
||||
virtual PRBool SetHdrFlag(nsIMsgDBHdr *, PRBool bSet, MsgFlags flag);
|
||||
virtual PRUint32 GetStatusFlags(nsIMsgDBHdr *msgHdr);
|
||||
virtual PRUint32 GetStatusFlags(nsIMsgDBHdr *msgHdr, PRUint32 origFlags);
|
||||
// helper function which doesn't involve thread object
|
||||
NS_IMETHOD MarkHdrReadInDB(nsIMsgDBHdr *msgHdr, PRBool bRead,
|
||||
nsIDBChangeListener *instigator);
|
||||
|
||||
@@ -101,6 +101,7 @@ public:
|
||||
nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow);
|
||||
virtual ~nsMsgHdr();
|
||||
|
||||
virtual nsresult GetRawFlags(PRUint32 *result);
|
||||
void Init();
|
||||
virtual nsresult InitCachedValues();
|
||||
virtual nsresult InitFlags();
|
||||
|
||||
@@ -1099,10 +1099,9 @@ nsresult nsMsgDatabase::IsRead(nsMsgKey key, PRBool *pRead)
|
||||
return rv;
|
||||
}
|
||||
|
||||
PRUint32 nsMsgDatabase::GetStatusFlags(nsIMsgDBHdr *msgHdr)
|
||||
PRUint32 nsMsgDatabase::GetStatusFlags(nsIMsgDBHdr *msgHdr, PRUint32 origFlags)
|
||||
{
|
||||
PRUint32 statusFlags;
|
||||
(void)msgHdr->GetFlags(&statusFlags);
|
||||
PRUint32 statusFlags = origFlags;
|
||||
PRBool isRead;
|
||||
|
||||
nsMsgKey key;
|
||||
@@ -1114,13 +1113,15 @@ PRUint32 nsMsgDatabase::GetStatusFlags(nsIMsgDBHdr *msgHdr)
|
||||
return statusFlags;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgDatabase::IsHeaderRead(nsIMsgDBHdr *hdr, PRBool *pRead)
|
||||
NS_IMETHODIMP nsMsgDatabase::IsHeaderRead(nsIMsgDBHdr *msgHdr, PRBool *pRead)
|
||||
{
|
||||
if (!hdr)
|
||||
if (!msgHdr)
|
||||
return NS_MSG_MESSAGE_NOT_FOUND;
|
||||
|
||||
nsMsgHdr* hdr = NS_STATIC_CAST(nsMsgHdr*, msgHdr); // closed system, cast ok
|
||||
// can't call GetFlags, because it will be recursive.
|
||||
PRUint32 flags;
|
||||
(void)hdr->GetFlags(&flags);
|
||||
hdr->GetRawFlags(&flags);
|
||||
*pRead = (flags & MSG_FLAG_READ) != 0;
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -1353,7 +1354,9 @@ nsresult nsMsgDatabase::SetKeyFlag(nsMsgKey key, PRBool set, PRUint32 flag,
|
||||
PRBool nsMsgDatabase::SetHdrFlag(nsIMsgDBHdr *msgHdr, PRBool bSet, MsgFlags flag)
|
||||
{
|
||||
// PR_ASSERT(! (flag & kDirty)); // this won't do the right thing so don't.
|
||||
PRUint32 currentStatusFlags = GetStatusFlags(msgHdr);
|
||||
PRUint32 statusFlags;
|
||||
(void)msgHdr->GetFlags(&statusFlags);
|
||||
PRUint32 currentStatusFlags = GetStatusFlags(msgHdr, statusFlags);
|
||||
PRBool flagAlreadySet = (currentStatusFlags & flag) != 0;
|
||||
|
||||
if ((flagAlreadySet && !bSet) || (!flagAlreadySet && bSet))
|
||||
|
||||
@@ -166,11 +166,22 @@ NS_IMETHODIMP nsMsgHdr::SetMessageKey(nsMsgKey value)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsMsgHdr::GetRawFlags(PRUint32 *result)
|
||||
{
|
||||
if (!(m_initedValues & FLAGS_INITED))
|
||||
InitFlags();
|
||||
*result = m_flags;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgHdr::GetFlags(PRUint32 *result)
|
||||
{
|
||||
if (!(m_initedValues & FLAGS_INITED))
|
||||
InitFlags();
|
||||
*result = m_flags;
|
||||
if (m_mdb)
|
||||
*result = m_mdb->GetStatusFlags(this, m_flags);
|
||||
else
|
||||
*result = m_flags;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user