mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
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:
parent
2ade9eb1fc
commit
1d230ad935
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user