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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user