fix for bug #180477. fix crasher and other problems with toggling junk

state from the advanced search dialog.  and some code cleanup.
r/sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2002-11-27 23:36:38 +00:00
parent 2ade9eb1fc
commit 1d230ad935
11 changed files with 71 additions and 74 deletions

View File

@ -447,7 +447,7 @@ function getJunkmailComponent()
function analyze(aMsgHdr, aNextFunction)
{
var listener = {
onMessageClassified: function(aMsgURL, aClassification)
onMessageClassified: function(aMsgURI, aClassification)
{
dump(aMsgURL + ' is '
+ (aClassification == nsIJunkMailPlugin.JUNK

View File

@ -78,7 +78,7 @@ interface nsIMsgFilterPlugin : nsISupports
[scriptable, uuid(0243f3d6-d583-11d6-898a-00039310a47a)]
interface nsIJunkMailClassificationListener : nsISupports
{
void onMessageClassified(in string aMsgURL, in nsMsgJunkStatus aClassification);
void onMessageClassified(in string aMsgURI, in nsMsgJunkStatus aClassification);
};
[scriptable, uuid(caf3d467-d57c-11d6-96a9-00039310a47a)]
@ -92,7 +92,7 @@ interface nsIJunkMailPlugin : nsIMsgFilterPlugin
const nsMsgJunkStatus JUNK = 2;
/**
* Given a message URL, determine what its current classification is
* Given a message URI, determine what its current classification is
* according to the current training set.
*/
void classifyMessage(in string aMsgURI, in nsIMsgWindow aMsgWindow,

View File

@ -135,13 +135,8 @@
static NS_DEFINE_CID(kIStreamConverterServiceCID, NS_STREAMCONVERTERSERVICE_CID);
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_DEFINE_CID(kMsgSendLaterCID, NS_MSGSENDLATER_CID);
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
static NS_DEFINE_CID(kMsgPrintEngineCID, NS_MSG_PRINTENGINE_CID);
#if defined(DEBUG_seth_) || defined(DEBUG_sspitzer_) || defined(DEBUG_jefft)
#define DEBUG_MESSENGER
#endif
#define FOUR_K 4096
#define MESSENGER_SAVE_DIR_PREF_NAME "messenger.save.dir"
#define MAILNEWS_ALLOW_PLUGINS_PREF_NAME "mailnews.message_display.allow.plugins"

View File

@ -1405,15 +1405,13 @@ nsresult nsMsgDBView::GetMsgHdrForViewIndex(nsMsgViewIndex index, nsIMsgDBHdr **
nsresult nsMsgDBView::GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder **aFolder)
{
*aFolder = m_folder;
NS_IF_ADDREF(*aFolder);
NS_IF_ADDREF(*aFolder = m_folder);
return NS_OK;
}
nsresult nsMsgDBView::GetDBForViewIndex(nsMsgViewIndex index, nsIMsgDatabase **db)
{
*db = m_db;
NS_IF_ADDREF(*db);
NS_IF_ADDREF(*db = m_db);
return NS_OK;
}
@ -2140,7 +2138,7 @@ nsMsgDBView::ApplyCommandToIndices(nsMsgViewCommandTypeValue command, nsMsgViewI
// all items will have the same folder).
//
nsCOMPtr<nsIMsgFolder> folder;
rv = GetFolderForViewIndex(GetAt(indices[0]), getter_AddRefs(folder));
rv = GetFolderForViewIndex(indices[0], getter_AddRefs(folder));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgIncomingServer> server;
@ -2550,18 +2548,30 @@ nsresult nsMsgDBView::SetJunkScoreByIndex(nsIJunkMailPlugin *aJunkPlugin,
return NS_OK;
}
nsresult
nsMsgDBView::GetFolderFromMsgURI(const char *aMsgURI, nsIMsgFolder **aFolder)
{
NS_IF_ADDREF(*aFolder = m_folder);
return NS_OK;
}
NS_IMETHODIMP
nsMsgDBView::OnMessageClassified(const char *aMsgUrl,
nsMsgDBView::OnMessageClassified(const char *aMsgURI,
nsMsgJunkStatus aClassification)
{
// is this the last url in the batch?
//
if ( mLastJunkUriInBatch.Equals(aMsgUrl) ) {
// XXX are we allowed to assume m_folder exists here?
if ( mLastJunkUriInBatch.Equals(aMsgURI) ) {
// we can't just use m_folder
// as this might be from a cross folder search
// see bug #180477
//
nsCOMPtr <nsIMsgFolder> folder;
nsresult rv = GetFolderFromMsgURI(aMsgURI, getter_AddRefs(folder));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsIMsgIncomingServer> server;
nsresult rv = m_folder->GetServer(getter_AddRefs(server));
rv = folder->GetServer(getter_AddRefs(server));
NS_ENSURE_SUCCESS(rv, rv);
// get the filter, and QI to the interface we want
@ -3031,10 +3041,9 @@ nsMsgDBView::GetCollationKey(nsIMsgHdr *msgHdr, nsMsgViewSortTypeValue sortType,
nsresult
nsMsgDBView::GetLocationCollationKey(nsIMsgHdr *msgHdr, PRUint8 **result, PRUint32 *len)
{
nsresult rv;
nsCOMPtr <nsIMsgFolder> folder;
rv = msgHdr->GetFolder(getter_AddRefs(folder));
nsresult rv = msgHdr->GetFolder(getter_AddRefs(folder));
NS_ENSURE_SUCCESS(rv,rv);
if (!folder)
@ -5156,8 +5165,7 @@ nsresult nsMsgDBView::SetThreadWatched(nsIMsgThread *thread, nsMsgViewIndex inde
NS_IMETHODIMP nsMsgDBView::GetMsgFolder(nsIMsgFolder **aMsgFolder)
{
NS_ENSURE_ARG_POINTER(aMsgFolder);
*aMsgFolder = m_folder;
NS_IF_ADDREF(*aMsgFolder);
NS_IF_ADDREF(*aMsgFolder = m_folder);
return NS_OK;
}

View File

@ -222,6 +222,7 @@ protected:
virtual nsMsgViewIndex FindKey(nsMsgKey key, PRBool expand);
virtual nsresult GetDBForViewIndex(nsMsgViewIndex index, nsIMsgDatabase **db);
virtual nsresult GetFolders(nsISupportsArray **folders);
virtual nsresult GetFolderFromMsgURI(const char *aMsgURI, nsIMsgFolder **aFolder);
nsresult ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex viewIndex, PRUint32 *pNumListed);
nsresult ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex startOfThreadViewIndex, PRUint32 *pNumListed);

View File

@ -64,7 +64,6 @@
#include "nsArray.h"
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
nsIRDFResource* nsMsgFolderDataSource::kNC_Child = nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_Folder= nsnull;
@ -2009,17 +2008,14 @@ nsresult nsMsgFolderDataSource::DoCopyToFolder(nsIMsgFolder *dstFolder, nsISuppo
}
}
//Call copyservice with dstFolder, srcFolder, messages, isMove, and txnManager
nsCOMPtr<nsIMsgCopyService> copyService =
do_GetService(kMsgCopyServiceCID, &rv);
if(NS_SUCCEEDED(rv))
{
rv = copyService->CopyMessages(srcFolder, messageArray, dstFolder, isMove,
nsnull, msgWindow, PR_TRUE/* allowUndo */);
do_GetService(NS_MSGCOPYSERVICE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv,rv);
}
return rv;
//return NS_OK;
return copyService->CopyMessages(srcFolder, messageArray, dstFolder, isMove,
nsnull, msgWindow, PR_TRUE/* allowUndo */);
}
nsresult nsMsgFolderDataSource::DoFolderCopyToFolder(nsIMsgFolder *dstFolder, nsISupportsArray *arguments,
@ -2037,7 +2033,7 @@ nsresult nsMsgFolderDataSource::DoFolderCopyToFolder(nsIMsgFolder *dstFolder, ns
if (!isMoveFolder) // copy folder not on the same server
{
//Call copyservice with dstFolder, srcFolder, folders and isMoveFolder
nsCOMPtr<nsIMsgCopyService> copyService = do_GetService(kMsgCopyServiceCID, &rv);
nsCOMPtr<nsIMsgCopyService> copyService = do_GetService(NS_MSGCOPYSERVICE_CONTRACTID, &rv);
if(NS_SUCCEEDED(rv))
{
rv = copyService->CopyFolders(arguments, dstFolder, isMoveFolder,

View File

@ -20,6 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Seth Spitzer <sspitzer@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@ -45,20 +46,16 @@
#include "nsMsgBaseCID.h"
#include "nsIMsgCopyService.h"
#include "nsICopyMsgStreamListener.h"
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
static NS_DEFINE_CID(kCopyMessageStreamListenerCID, NS_COPYMESSAGESTREAMLISTENER_CID);
#include "nsMsgUtils.h"
nsMsgSearchDBView::nsMsgSearchDBView()
{
/* member initializers and constructor code */
// don't try to display messages for the search pane.
mSuppressMsgDisplay = PR_TRUE;
}
nsMsgSearchDBView::~nsMsgSearchDBView()
{
/* destructor code */
}
NS_IMPL_ISUPPORTS_INHERITED3(nsMsgSearchDBView, nsMsgDBView, nsIMsgDBView, nsIMsgCopyServiceListener, nsIMsgSearchNotify)
@ -224,11 +221,9 @@ nsMsgSearchDBView::OnNewSearch()
nsresult nsMsgSearchDBView::GetFolders(nsISupportsArray **aFolders)
{
NS_ENSURE_ARG_POINTER(aFolders);
*aFolders = m_folders;
NS_IF_ADDREF(*aFolders);
return NS_OK;
NS_ENSURE_ARG_POINTER(aFolders);
NS_IF_ADDREF(*aFolders = m_folders);
return NS_OK;
}
NS_IMETHODIMP
@ -483,3 +478,18 @@ nsMsgSearchDBView::GetHdrForFirstSelectedMessage(nsIMsgDBHdr **hdr)
NS_ENSURE_SUCCESS(rv,rv);
return NS_OK;
}
nsresult
nsMsgSearchDBView::GetFolderFromMsgURI(const char *aMsgURI, nsIMsgFolder **aFolder)
{
nsCOMPtr <nsIMsgMessageService> msgMessageService;
nsresult rv = GetMessageServiceFromURI(aMsgURI, getter_AddRefs(msgMessageService));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr <nsIMsgDBHdr> msgHdr;
rv = msgMessageService->MessageURIToMsgHdr(aMsgURI, getter_AddRefs(msgHdr));
NS_ENSURE_SUCCESS(rv,rv);
return msgHdr->GetFolder(aFolder);
}

View File

@ -68,6 +68,8 @@ public:
NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder **folder);
virtual nsresult GetFolders(nsISupportsArray **aFolders);
virtual nsresult GetFolderFromMsgURI(const char *aMsgURI, nsIMsgFolder **aFolder);
protected:
nsresult FetchLocation(PRInt32 aRow, PRUnichar ** aLocationString);
virtual nsresult GetDBForViewIndex(nsMsgViewIndex index, nsIMsgDatabase **db);

View File

@ -113,7 +113,6 @@ static NS_DEFINE_CID(kCImapService, NS_IMAPSERVICE_CID);
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kParseMailMsgStateCID, NS_PARSEMAILMSGSTATE_CID);
static NS_DEFINE_CID(kCImapHostSessionList, NS_IIMAPHOSTSESSIONLIST_CID);
static NS_DEFINE_CID(kCopyMessageStreamListenerCID, NS_COPYMESSAGESTREAMLISTENER_CID);
nsIAtom* nsImapMailFolder::mImapHdrDownloadedAtom=nsnull;
@ -6408,13 +6407,8 @@ nsImapMailFolder::CopyStreamMessage(nsIMsgDBHdr* message,
nsresult rv = NS_ERROR_NULL_POINTER;
if (!m_copyState) return rv;
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener;
rv = nsComponentManager::CreateInstance(kCopyMessageStreamListenerCID,
nsnull, NS_GET_IID(nsICopyMessageStreamListener),
getter_AddRefs(copyStreamListener));
if(NS_FAILED(rv))
return rv;
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener = do_CreateInstance(NS_COPYMESSAGESTREAMLISTENER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsICopyMessageListener>
copyListener(do_QueryInterface(dstFolder, &rv));
@ -7116,13 +7110,13 @@ nsImapMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *aMsg
NS_IMETHODIMP
nsImapMailFolder::OnMessageClassified(const char *aMsgURL, nsMsgJunkStatus aClassification)
nsImapMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus aClassification)
{
nsCOMPtr<nsIMsgIncomingServer> server;
nsresult rv = GetServer(getter_AddRefs(server));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr <nsIMsgDBHdr> msgHdr;
rv = GetMsgDBHdrFromURI(aMsgURL, getter_AddRefs(msgHdr));
rv = GetMsgDBHdrFromURI(aMsgURI, getter_AddRefs(msgHdr));
NS_ENSURE_SUCCESS(rv, rv);
nsMsgKey msgKey;

View File

@ -101,8 +101,6 @@
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_DEFINE_CID(kMailboxServiceCID, NS_MAILBOXSERVICE_CID);
static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID);
static NS_DEFINE_CID(kCopyMessageStreamListenerCID, NS_COPYMESSAGESTREAMLISTENER_CID);
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID);
extern char* ReadPopData(const char *hostname, const char* username, nsIFileSpec* mailDirectory);
@ -1586,7 +1584,7 @@ nsMsgLocalMailFolder::DeleteMessages(nsISupportsArray *messages,
if (NS_SUCCEEDED(rv))
{
nsCOMPtr<nsIMsgCopyService> copyService =
do_GetService(kMsgCopyServiceCID, &rv);
do_GetService(NS_MSGCOPYSERVICE_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv))
{
return copyService->CopyMessages(this, messages, trashFolder,
@ -2789,12 +2787,11 @@ nsresult nsMsgLocalMailFolder::CopyMessagesTo(nsISupportsArray *messages,
PRBool isMove)
{
if (!mCopyState) return NS_ERROR_OUT_OF_MEMORY;
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener;
nsresult rv = nsComponentManager::CreateInstance(kCopyMessageStreamListenerCID, NULL,
NS_GET_IID(nsICopyMessageStreamListener),
getter_AddRefs(copyStreamListener));
if(NS_FAILED(rv))
return rv;
nsresult rv;
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener = do_CreateInstance(NS_COPYMESSAGESTREAMLISTENER_CONTRACTID);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsICopyMessageListener> copyListener(do_QueryInterface(dstFolder));
if(!copyListener)
@ -2876,12 +2873,8 @@ nsresult nsMsgLocalMailFolder::CopyMessageTo(nsISupports *message,
nsXPIDLCString uri;
srcFolder->GetUriForMsg(msgHdr, getter_Copies(uri));
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener;
rv = nsComponentManager::CreateInstance(kCopyMessageStreamListenerCID, NULL,
NS_GET_IID(nsICopyMessageStreamListener),
getter_AddRefs(copyStreamListener));
if(NS_FAILED(rv))
return rv;
nsCOMPtr<nsICopyMessageStreamListener> copyStreamListener = do_CreateInstance(NS_COPYMESSAGESTREAMLISTENER_CONTRACTID);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsICopyMessageListener> copyListener(do_QueryInterface(dstFolder));
if(!copyListener)
@ -3380,13 +3373,13 @@ nsMsgLocalMailFolder::SpamFilterClassifyMessage(const char *aURI, nsIMsgWindow *
NS_IMETHODIMP
nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURL, nsMsgJunkStatus aClassification)
nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus aClassification)
{
nsCOMPtr<nsIMsgIncomingServer> server;
nsresult rv = GetServer(getter_AddRefs(server));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr <nsIMsgDBHdr> msgHdr;
rv = GetMsgDBHdrFromURI(aMsgURL, getter_AddRefs(msgHdr));
rv = GetMsgDBHdrFromURI(aMsgURI, getter_AddRefs(msgHdr));
NS_ENSURE_SUCCESS(rv, rv);
nsMsgKey msgKey;

View File

@ -362,10 +362,9 @@ nsPop3Sink::GetPopServer(nsIPop3IncomingServer* *server)
nsresult nsPop3Sink::GetFolder(nsIMsgFolder * *folder)
{
if(!folder) return NS_ERROR_NULL_POINTER;
*folder = m_folder;
NS_IF_ADDREF(*folder);
return NS_OK;
NS_ENSURE_ARG_POINTER(folder);
NS_IF_ADDREF(*folder = m_folder);
return NS_OK;
}
nsresult nsPop3Sink::SetFolder(nsIMsgFolder * folder)
@ -375,7 +374,6 @@ nsresult nsPop3Sink::SetFolder(nsIMsgFolder * folder)
NS_IF_ADDREF(m_folder);
return NS_OK;
}
nsresult