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:
bienvenu%netscape.com 2002-11-26 21:41:44 +00:00
parent cf5e825d62
commit 0d7ff2e1a5
12 changed files with 49 additions and 29 deletions

View File

@ -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.
*/

View File

@ -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()

View File

@ -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

View File

@ -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"

View File

@ -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;

View File

@ -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);
}

View File

@ -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();

View File

@ -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);
}

View File

@ -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:

View File

@ -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);
}

View File

@ -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;

View File

@ -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);