From 4329684bf29c77bace2d6a1995c062bd14386683 Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Thu, 15 May 2003 21:38:34 +0000 Subject: [PATCH] make messages filtered into open local folders get analyzed for junk status 180153 r/sr/a=sspitzer git-svn-id: svn://10.0.0.236/trunk@142514 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mailnews/local/src/nsParseMailbox.cpp | 43 ++++--------------- mozilla/mailnews/local/src/nsParseMailbox.h | 31 +++++++------ mozilla/mailnews/local/src/nsPop3Sink.cpp | 20 +++++++++ 3 files changed, 45 insertions(+), 49 deletions(-) diff --git a/mozilla/mailnews/local/src/nsParseMailbox.cpp b/mozilla/mailnews/local/src/nsParseMailbox.cpp index 425eee6cd3e..8e86abebbae 100644 --- a/mozilla/mailnews/local/src/nsParseMailbox.cpp +++ b/mozilla/mailnews/local/src/nsParseMailbox.cpp @@ -71,7 +71,6 @@ #include "prprf.h" #include "nsEscape.h" #include "nsIMimeHeaders.h" - #include "nsIMsgMdnGenerator.h" #include "nsMsgSearchCore.h" @@ -162,39 +161,6 @@ NS_IMETHODIMP nsMsgMailboxParser::OnStopRequest(nsIRequest *request, nsISupports m_mailDB->RemoveListener(this); // and we want to mark ourselves for deletion or some how inform our protocol manager that we are // available for another url if there is one.... -#ifdef DEBUG1 - // let's dump out the contents of our db, if possible. - if (m_mailDB) - { - nsMsgKeyArray keys; - nsCAutoString author; - nsCAutoString subject; - - // m_mailDB->PrePopulate(); - m_mailDB->ListAllKeys(keys); - PRUint32 size = keys.GetSize(); - for (PRUint32 keyindex = 0; keyindex < size; keyindex++) - { - nsCOMPtr msgHdr; - nsresult ret = - m_mailDB->GetMsgHdrForKey(keys[keyindex], - getter_AddRefs(msgHdr)); - if (NS_SUCCEEDED(ret) && msgHdr) - { - nsMsgKey key; - - msgHdr->GetMessageKey(&key); - msgHdr->GetAuthor(&author); - msgHdr->GetSubject(&subject); -#ifdef DEBUG_bienvenu - // leak nsString return values... - printf("hdr key = %d, author = %s subject = %s\n", key, author.get(), subject.get()); -#endif - } - } - m_mailDB->Close(PR_TRUE); - } -#endif ReleaseFolderLock(); // be sure to clear any status text and progress info.. @@ -1467,6 +1433,7 @@ nsParseNewMailState::Init(nsIFolder *rootFolder, nsIMsgFolder *downloadFolder, n m_rootFolder = rootFolder; m_inboxFileSpec = folder; m_inboxFileStream = inboxFileStream; + m_msgWindow = aMsgWindow; // the new mail parser isn't going to get the stream input, it seems, so we can't use // the OnStartRequest mechanism the mailbox parser uses. So, let's open the db right now. nsCOMPtr mailDB; @@ -1506,6 +1473,13 @@ nsParseNewMailState::~nsParseNewMailState() #endif } +// not an IMETHOD so we don't need to do error checking or return an error. +// We only have one caller. +void nsParseNewMailState::GetMsgWindow(nsIMsgWindow **aMsgWindow) +{ + NS_IF_ADDREF(*aMsgWindow = m_msgWindow); +} + // This gets called for every message because libnet calls IncorporateBegin, // IncorporateWrite (once or more), and IncorporateComplete for every message. @@ -1929,7 +1903,6 @@ nsresult nsParseNewMailState::MoveIncorporatedMessage(nsIMsgDBHdr *mailHdr, destMailDB->Commit(nsMsgDBCommitType::kLargeCommit); } - return err; } diff --git a/mozilla/mailnews/local/src/nsParseMailbox.h b/mozilla/mailnews/local/src/nsParseMailbox.h index c002d693deb..0f503ef9cb0 100644 --- a/mozilla/mailnews/local/src/nsParseMailbox.h +++ b/mozilla/mailnews/local/src/nsParseMailbox.h @@ -55,6 +55,7 @@ #include "nsFileSpec.h" #include "nsIDBChangeListener.h" #include "nsIWeakReference.h" +#include "nsIMsgWindow.h" #include "nsIMsgFilterList.h" #include "nsIMsgFilterHitNotify.h" @@ -225,14 +226,14 @@ class nsParseNewMailState : public nsMsgMailboxParser , public nsIMsgFilterHitNotify { public: - nsParseNewMailState(); - virtual ~nsParseNewMailState(); - NS_DECL_ISUPPORTS_INHERITED - nsresult Init(nsIFolder *rootFolder, nsIMsgFolder *downloadFolder, nsFileSpec &folder, nsIOFileStream *inboxFileStream, nsIMsgWindow *aMsgWindow); + nsParseNewMailState(); + virtual ~nsParseNewMailState(); + NS_DECL_ISUPPORTS_INHERITED + nsresult Init(nsIFolder *rootFolder, nsIMsgFolder *downloadFolder, nsFileSpec &folder, nsIOFileStream *inboxFileStream, nsIMsgWindow *aMsgWindow); - virtual void DoneParsingFolder(nsresult status); + virtual void DoneParsingFolder(nsresult status); - void DisableFilters() {m_disableFilters = PR_TRUE;} + void DisableFilters() {m_disableFilters = PR_TRUE;} #ifdef DOING_JSFILTERS // from jsmsg.cpp @@ -247,25 +248,27 @@ public: nsOutputFileStream *GetLogFile(); virtual PRInt32 PublishMsgHeader(nsIMsgWindow *msgWindow); + void GetMsgWindow(nsIMsgWindow **aMsgWindow); protected: virtual void ApplyFilters(PRBool *pMoved, nsIMsgWindow *msgWindow); virtual nsresult GetTrashFolder(nsIMsgFolder **pTrashFolder); virtual nsresult MoveIncorporatedMessage(nsIMsgDBHdr *mailHdr, - nsIMsgDatabase *sourceDB, - const nsACString& destFolder, + nsIMsgDatabase *sourceDB, + const nsACString& destFolder, nsIMsgFilter *filter, nsIMsgWindow *msgWindow); virtual int MarkFilteredMessageRead(nsIMsgDBHdr *msgHdr); void LogRuleHit(nsIMsgFilter *filter, nsIMsgDBHdr *msgHdr); nsCOMPtr m_filterList; nsCOMPtr m_rootFolder; + nsCOMPtr m_msgWindow; nsIOFileStream *m_inboxFileStream; - nsFileSpec m_inboxFileSpec; - PRBool m_disableFilters; - PRBool m_msgMovedByFilter; - PRUint32 m_ibuffer_fp; - char *m_ibuffer; - PRUint32 m_ibuffer_size; + nsFileSpec m_inboxFileSpec; + PRBool m_disableFilters; + PRBool m_msgMovedByFilter; + PRUint32 m_ibuffer_fp; + char *m_ibuffer; + PRUint32 m_ibuffer_size; }; #endif diff --git a/mozilla/mailnews/local/src/nsPop3Sink.cpp b/mozilla/mailnews/local/src/nsPop3Sink.cpp index 1fafe1f72ae..6687d182bf8 100644 --- a/mozilla/mailnews/local/src/nsPop3Sink.cpp +++ b/mozilla/mailnews/local/src/nsPop3Sink.cpp @@ -261,6 +261,26 @@ nsPop3Sink::EndMailDelivery() // in case it's not the open folder m_folder->UpdateSummaryTotals(PR_TRUE); + // check if the folder open in this window is not the current folder, and if it has new + // message, in which case we need to try to run the + // filter plugin. + if (m_newMailParser) + { + nsCOMPtr msgWindow; + m_newMailParser->GetMsgWindow(getter_AddRefs(msgWindow)); + if (msgWindow) + { + nsCOMPtr openFolder; + (void) msgWindow->GetOpenFolder(getter_AddRefs(openFolder)); + if (openFolder && openFolder != m_folder) + { + PRBool hasNew; + (void) openFolder->GetHasNewMessages(&hasNew); + if (hasNew) + openFolder->CallFilterPlugins(nsnull); + } + } + } #ifdef DEBUG printf("End mail message delivery.\n"); #endif