I also could reproduce the same behavior only for IMAP folder. When a new
message is moved to the specified folder by filter, it is not recognized until
the folder is clicked and refreshed.
The function nsMsgDatabase::MarkAllRead() seems related to this behavior. When
message is just moved and the folder is not refreshed, enumerator (hdrs) skips
new messages.
I also could reproduce the same behavior only for IMAP folder. When a new
message is moved to the specified folder by filter, it is not recognized until
the folder is clicked and refreshed.
The function nsMsgDatabase: :MarkAllRead( ) seems related to this behavior. When
message is just moved and the folder is not refreshed, enumerator (hdrs) skips
new messages.
(in nsImapMailFolde r.cpp) r::MarkAllMessa gesRead( void) >MarkAllRead( &thoseMarked) ;
NS_IMETHODIMP nsImapMailFolde
{
...
rv = mDatabase-
...
}
(in nsmsgdatabase.cpp) :MarkAllRead( nsMsgKeyArray *thoseMarked)
NS_IMETHODIMP nsMsgDatabase:
{
nsresult rv;
nsMsgHdr *pHeader;
nsCOMPtr <nsISimpleEnume rator> hdrs; es(getter_ AddRefs( hdrs));
rv = EnumerateMessag
if (NS_FAILED(rv))
return rv;
PRBool hasMore = PR_FALSE;
while (NS_SUCCEEDED(rv = hdrs->HasMoreEl ements( &hasMore) ) && (hasMore == (nsISupports* *)&pHeader) ; ASSERTION( NS_SUCCEEDED( rv), "nsMsgDBEnumerator broken");
PR_TRUE))
{
rv = hdrs->GetNext(
NS_
if (NS_FAILED(rv))
break;
PRBool isRead; d(pHeader, &isRead);
IsHeaderRea
if (!isRead)
(void) pHeader- >GetMessageKey( &key);
thoseMarked- >Add(key) ; pHeader, PR_TRUE, nsnull); // ### dmb - blow off error? RELEASE( pHeader) ;
{
if (thoseMarked)
{
nsMsgKey key;
}
rv = MarkHdrRead(
}
NS_
}
...
}