add msg window to spam classification calls for feedback, r=dmose, sr=sspitzer, 179162
git-svn-id: svn://10.0.0.236/trunk@134490 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
cf5e825d62
commit
0d7ff2e1a5
@ -400,7 +400,7 @@ const nsMsgBiffState nsMsgBiffState_Unknown = 2; // We dunno whether there is ne
|
||||
|
||||
attribute nsIMsgRetentionSettings retentionSettings;
|
||||
attribute nsIMsgDownloadSettings downloadSettings;
|
||||
void callFilterPlugins();
|
||||
void callFilterPlugins(in nsIMsgWindow aMsgWindow);
|
||||
/**
|
||||
* used for order in the folder pane, folder pickers, etc.
|
||||
*/
|
||||
|
||||
@ -470,7 +470,7 @@ function analyze(aMsgHdr, aNextFunction)
|
||||
|
||||
var messageURI = aMsgHdr.folder.generateMessageURI(aMsgHdr.messageKey)
|
||||
+ "?fetchCompleteMessage=true";
|
||||
gJunkmailComponent.classifyMessage(messageURI, listener);
|
||||
gJunkmailComponent.classifyMessage(messageURI, msgWindow, listener);
|
||||
}
|
||||
|
||||
function analyzeMessages()
|
||||
|
||||
@ -2531,7 +2531,7 @@ nsresult nsMsgDBView::SetJunkScoreByIndex(nsIJunkMailPlugin *aJunkPlugin,
|
||||
// adjust its database appropriately
|
||||
//
|
||||
rv = aJunkPlugin->SetMessageClassification(
|
||||
uri, oldUserClassification, aNewClassification, this);
|
||||
uri, oldUserClassification, aNewClassification, mMsgWindow, this);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// set the junk score on the message itself
|
||||
|
||||
@ -1673,16 +1673,16 @@ nsMsgDBFolder::SetStringProperty(const char *propertyName, const char *propertyV
|
||||
|
||||
// sub-classes need to override
|
||||
nsresult
|
||||
nsMsgDBFolder::SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
nsMsgDBFolder::SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
{
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, nsnull);
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, aMsgWindow, nsnull);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call the filter plugins (XXX currently just one)
|
||||
*/
|
||||
NS_IMETHODIMP
|
||||
nsMsgDBFolder::CallFilterPlugins()
|
||||
nsMsgDBFolder::CallFilterPlugins(nsIMsgWindow *aMsgWindow)
|
||||
{
|
||||
|
||||
nsCOMPtr<nsIMsgIncomingServer> server;
|
||||
@ -1810,7 +1810,7 @@ nsMsgDBFolder::CallFilterPlugins()
|
||||
// filterMsg
|
||||
//
|
||||
nsCOMPtr <nsIJunkMailPlugin> junkMailPlugin = do_QueryInterface(filterPlugin);
|
||||
rv = SpamFilterClassifyMessage(uri, junkMailPlugin);
|
||||
rv = SpamFilterClassifyMessage(uri, aMsgWindow, junkMailPlugin);
|
||||
if (NS_FAILED(rv))
|
||||
{
|
||||
NS_WARNING("nsMsgDBFolder::CallFilterPlugins(): filter plugin"
|
||||
|
||||
@ -122,7 +122,7 @@ public:
|
||||
NS_IMETHOD SetDBTransferInfo(nsIDBFolderInfo *aTransferInfo);
|
||||
NS_IMETHOD GetStringProperty(const char *propertyName, char **propertyValue);
|
||||
NS_IMETHOD SetStringProperty(const char *propertyName, const char *propertyValue);
|
||||
NS_IMETHOD CallFilterPlugins();
|
||||
NS_IMETHOD CallFilterPlugins(nsIMsgWindow *aMsgWindow);
|
||||
|
||||
|
||||
protected:
|
||||
@ -150,7 +150,7 @@ protected:
|
||||
nsresult GetPromptPurgeThreshold(PRBool *aPrompt);
|
||||
nsresult GetPurgeThreshold(PRInt32 *aThreshold);
|
||||
|
||||
virtual nsresult SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
virtual nsresult SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
|
||||
protected:
|
||||
nsCOMPtr<nsIMsgDatabase> mDatabase;
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
#include "nsIProfileInternal.h"
|
||||
#include "nsIStreamConverterService.h"
|
||||
#include "nsIMsgMailSession.h"
|
||||
#include "nsIMsgMailNewsUrl.h"
|
||||
#include "nsMsgBaseCID.h"
|
||||
#include "prnetdb.h"
|
||||
|
||||
@ -469,7 +470,7 @@ private:
|
||||
nsCOMPtr<nsIJunkMailClassificationListener> mListener;
|
||||
};
|
||||
|
||||
nsresult nsBayesianFilter::tokenizeMessage(const char* messageURI, TokenAnalyzer* analyzer)
|
||||
nsresult nsBayesianFilter::tokenizeMessage(const char* messageURI, nsIMsgWindow *aMsgWindow, TokenAnalyzer* analyzer)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
|
||||
@ -489,6 +490,14 @@ nsresult nsBayesianFilter::tokenizeMessage(const char* messageURI, TokenAnalyzer
|
||||
rv = ioService->NewChannel(aUrl, NULL, NULL, getter_AddRefs(channel));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr <nsIURI> channelURI;
|
||||
channel->GetURI(getter_AddRefs(channelURI));
|
||||
if (channelURI)
|
||||
{
|
||||
nsCOMPtr <nsIMsgMailNewsUrl> mailnewsUrl = do_QueryInterface(channelURI);
|
||||
if (mailnewsUrl)
|
||||
mailnewsUrl->SetMsgWindow(aMsgWindow);
|
||||
}
|
||||
nsCOMPtr<nsIStreamListener> tokenListener = new TokenStreamListener(messageURI, analyzer);
|
||||
if (!tokenListener) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
@ -616,19 +625,19 @@ NS_IMETHODIMP nsBayesianFilter::EndBatch(void)
|
||||
}
|
||||
|
||||
/* void classifyMessage (in string aMsgURL, in nsIJunkMailClassificationListener aListener); */
|
||||
NS_IMETHODIMP nsBayesianFilter::ClassifyMessage(const char *aMessageURL, nsIJunkMailClassificationListener *aListener)
|
||||
NS_IMETHODIMP nsBayesianFilter::ClassifyMessage(const char *aMessageURL, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener)
|
||||
{
|
||||
TokenAnalyzer* analyzer = new MessageClassifier(this, aListener);
|
||||
if (!analyzer) return NS_ERROR_OUT_OF_MEMORY;
|
||||
return tokenizeMessage(aMessageURL, analyzer);
|
||||
return tokenizeMessage(aMessageURL, aMsgWindow, analyzer);
|
||||
}
|
||||
|
||||
/* void classifyMessages (in unsigned long aCount, [array, size_is (aCount)] in string aMsgURLs, in nsIJunkMailClassificationListener aListener); */
|
||||
NS_IMETHODIMP nsBayesianFilter::ClassifyMessages(PRUint32 aCount, const char **aMsgURLs, nsIJunkMailClassificationListener *aListener)
|
||||
NS_IMETHODIMP nsBayesianFilter::ClassifyMessages(PRUint32 aCount, const char **aMsgURLs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
for (PRUint32 i = 0; i < aCount; ++i) {
|
||||
rv = ClassifyMessage(aMsgURLs[i], aListener);
|
||||
rv = ClassifyMessage(aMsgURLs[i], aMsgWindow, aListener);
|
||||
if (NS_FAILED(rv))
|
||||
break;
|
||||
}
|
||||
@ -895,9 +904,10 @@ void nsBayesianFilter::readTrainingData()
|
||||
NS_IMETHODIMP nsBayesianFilter::SetMessageClassification(const char *aMsgURL,
|
||||
nsMsgJunkStatus aOldClassification,
|
||||
nsMsgJunkStatus aNewClassification,
|
||||
nsIMsgWindow *aMsgWindow,
|
||||
nsIJunkMailClassificationListener *aListener)
|
||||
{
|
||||
MessageObserver* analyzer = new MessageObserver(this, aOldClassification, aNewClassification, aListener);
|
||||
if (!analyzer) return NS_ERROR_OUT_OF_MEMORY;
|
||||
return tokenizeMessage(aMsgURL, analyzer);
|
||||
return tokenizeMessage(aMsgURL, aMsgWindow, analyzer);
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@
|
||||
class Token;
|
||||
class TokenEnumeration;
|
||||
class TokenAnalyzer;
|
||||
|
||||
class nsIMsgWindow;
|
||||
/**
|
||||
* Helper class to enumerate Token objects in a PLDHashTable
|
||||
* safely and without copying (see bugzilla #174859). The
|
||||
@ -116,9 +116,10 @@ public:
|
||||
nsBayesianFilter();
|
||||
virtual ~nsBayesianFilter();
|
||||
|
||||
nsresult tokenizeMessage(const char* messageURI, TokenAnalyzer* analyzer);
|
||||
nsresult tokenizeMessage(const char* messageURI, nsIMsgWindow *aMsgWindow, TokenAnalyzer* analyzer);
|
||||
void classifyMessage(Tokenizer& tokens, const char* messageURI, nsIJunkMailClassificationListener* listener);
|
||||
void observeMessage(Tokenizer& tokens, const char* messageURI, nsMsgJunkStatus oldClassification, nsMsgJunkStatus newClassification, nsIJunkMailClassificationListener* listener);
|
||||
void observeMessage(Tokenizer& tokens, const char* messageURI, nsMsgJunkStatus oldClassification, nsMsgJunkStatus newClassification,
|
||||
nsIJunkMailClassificationListener* listener);
|
||||
|
||||
void writeTrainingData();
|
||||
void readTrainingData();
|
||||
|
||||
@ -4880,6 +4880,7 @@ nsImapMailFolder::AddSearchResult(nsIImapProtocol* aProtocol,
|
||||
NS_IMETHODIMP
|
||||
nsImapMailFolder::HeaderFetchCompleted(nsIImapProtocol* aProtocol)
|
||||
{
|
||||
nsCOMPtr <nsIMsgWindow> msgWindow; // we might need this for the filter plugins.
|
||||
if (mDatabase)
|
||||
mDatabase->Commit(nsMsgDBCommitType::kLargeCommit);
|
||||
SetSizeOnDisk(mFolderSize);
|
||||
@ -4920,9 +4921,18 @@ nsImapMailFolder::HeaderFetchCompleted(nsIImapProtocol* aProtocol)
|
||||
}
|
||||
else
|
||||
aProtocol->NotifyBodysToDownload(nsnull, 0/*keysToFetch.GetSize() */);
|
||||
|
||||
nsCOMPtr <nsIURI> runningUri;
|
||||
aProtocol->GetRunningUrl(getter_AddRefs(runningUri));
|
||||
if (runningUri)
|
||||
{
|
||||
nsCOMPtr <nsIMsgMailNewsUrl> mailnewsUrl = do_QueryInterface(runningUri);
|
||||
if (mailnewsUrl)
|
||||
mailnewsUrl->GetMsgWindow(getter_AddRefs(msgWindow));
|
||||
}
|
||||
}
|
||||
|
||||
CallFilterPlugins();
|
||||
CallFilterPlugins(msgWindow);
|
||||
|
||||
if (m_filterList)
|
||||
(void)m_filterList->FlushLogIfNecessary();
|
||||
@ -7093,10 +7103,10 @@ nsresult nsImapMailFolder::GetMoveCoalescer()
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsImapMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
nsImapMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
{
|
||||
++m_numFilterClassifyRequests;
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, this);
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, aMsgWindow, this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -347,7 +347,7 @@ public:
|
||||
const char *destFolder,
|
||||
nsIMsgFilter *filter,
|
||||
nsIMsgWindow *msgWindow);
|
||||
virtual nsresult SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
virtual nsresult SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
|
||||
static nsresult AllocateUidStringFromKeys(nsMsgKey *keys, PRInt32 numKeys, nsCString &msgIds);
|
||||
protected:
|
||||
|
||||
@ -659,7 +659,7 @@ nsMsgLocalMailFolder::UpdateFolder(nsIMsgWindow *aWindow)
|
||||
}
|
||||
// if we have new messages, try the filter plugins.
|
||||
if (NS_SUCCEEDED(rv) && (mFlags & MSG_FOLDER_FLAG_GOT_NEW))
|
||||
(void) CallFilterPlugins();
|
||||
(void) CallFilterPlugins(aWindow);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -2868,8 +2868,7 @@ nsresult nsMsgLocalMailFolder::CopyMessageTo(nsISupports *message,
|
||||
if(!msgHdr)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (msgHdr)
|
||||
mCopyState->m_message = do_QueryInterface(msgHdr, &rv);
|
||||
mCopyState->m_message = do_QueryInterface(msgHdr, &rv);
|
||||
|
||||
nsCOMPtr<nsIMsgFolder> srcFolder(do_QueryInterface(mCopyState->m_srcSupport));
|
||||
if(!srcFolder)
|
||||
@ -3373,10 +3372,10 @@ NS_IMETHODIMP nsMsgLocalMailFolder::Shutdown(PRBool shutdownChildren)
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsMsgLocalMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
nsMsgLocalMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin)
|
||||
{
|
||||
++mNumFilterClassifyRequests;
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, this);
|
||||
return aJunkMailPlugin->ClassifyMessage(aURI, aMsgWindow, this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -218,7 +218,7 @@ protected:
|
||||
PRBool isMove, nsIMsgCopyServiceListener* listener, nsIMsgWindow *msgWindow, PRBool isMoveFolder, PRBool allowUndo);
|
||||
nsresult OnCopyCompleted(nsISupports *srcSupport, PRBool moveCopySucceeded);
|
||||
virtual nsresult CreateBaseMessageURI(const char *aURI);
|
||||
nsresult SpamFilterClassifyMessage(const char *aURI, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
nsresult SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsgWindow, nsIJunkMailPlugin *aJunkMailPlugin);
|
||||
protected:
|
||||
PRBool mHaveReadNameFromDB;
|
||||
PRBool mGettingMail;
|
||||
|
||||
@ -241,7 +241,7 @@ nsPop3Sink::EndMailDelivery()
|
||||
nsresult rv = ReleaseFolderLock();
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv),"folder lock not released successfully");
|
||||
|
||||
m_folder->CallFilterPlugins();
|
||||
m_folder->CallFilterPlugins(nsnull); // ??? do we need msgWindow?
|
||||
|
||||
// note that size on disk has possibly changed.
|
||||
nsCOMPtr<nsIMsgLocalMailFolder> localFolder = do_QueryInterface(m_folder);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user