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
This commit is contained in:
bienvenu%netscape.com
2003-05-15 21:38:34 +00:00
parent 9423cbd435
commit 4329684bf2
3 changed files with 45 additions and 49 deletions

View File

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

View File

@@ -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 <nsIMsgFilterList> m_filterList;
nsCOMPtr <nsIFolder> m_rootFolder;
nsCOMPtr <nsIMsgWindow> 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

View File

@@ -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 <nsIMsgWindow> msgWindow;
m_newMailParser->GetMsgWindow(getter_AddRefs(msgWindow));
if (msgWindow)
{
nsCOMPtr <nsIMsgFolder> 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