From 0ee6ea75314dde8d43d690bf5e268a2b9e80f836 Mon Sep 17 00:00:00 2001 From: "bienvenu%nventure.com" Date: Wed, 10 Aug 2005 18:59:17 +0000 Subject: [PATCH] fix 302624 delete from pop3 server and download from pop3 server don't work on filters run after the fact, sr/a=mscott --- .../base/search/src/nsMsgFilterService.cpp | 62 +++++++++++++++++++ mailnews/base/src/nsMsgWindow.cpp | 3 +- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/mailnews/base/search/src/nsMsgFilterService.cpp b/mailnews/base/search/src/nsMsgFilterService.cpp index 6891eeb4a284..a7b5ce0a07a5 100644 --- a/mailnews/base/search/src/nsMsgFilterService.cpp +++ b/mailnews/base/search/src/nsMsgFilterService.cpp @@ -706,6 +706,68 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() } } break; + case nsMsgFilterAction::DeleteFromPop3Server: + { + nsCOMPtr localFolder = do_QueryInterface(m_curFolder); + if (localFolder) + { + // This action ignores the deleteMailLeftOnServer preference + localFolder->MarkMsgsOnPop3Server(m_searchHitHdrs, POP3_FORCE_DEL); + + nsCOMPtr partialMsgs; + // Delete the partial headers. They're useless now + // that the server copy is being deleted. + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + { + nsCOMPtr msgHdr; + m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); + if (msgHdr) + { + PRUint32 flags; + msgHdr->GetFlags(&flags); + if (flags & MSG_FLAG_PARTIAL) + { + if (!partialMsgs) + partialMsgs = do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + partialMsgs->AppendElement(msgHdr); + } + } + } + if (partialMsgs) + m_curFolder->DeleteMessages(partialMsgs, m_msgWindow, PR_TRUE, PR_FALSE, nsnull, PR_FALSE); + } + } + break; + case nsMsgFilterAction::FetchBodyFromPop3Server: + { + nsCOMPtr localFolder = do_QueryInterface(m_curFolder); + if (localFolder) + { + nsCOMPtr messages = do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + { + nsCOMPtr msgHdr; + m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); + if (msgHdr) + { + PRUint32 flags = 0; + msgHdr->GetFlags(&flags); + if (flags & MSG_FLAG_PARTIAL) + { + nsCOMPtr iSupports = do_QueryInterface(msgHdr); + messages->AppendElement(iSupports); + } + } + } + PRUint32 msgsToFetch; + messages->Count(&msgsToFetch); + if (msgsToFetch > 0) + m_curFolder->DownloadMessagesForOffline(messages, m_msgWindow); + } + } + break; default: break; } diff --git a/mailnews/base/src/nsMsgWindow.cpp b/mailnews/base/src/nsMsgWindow.cpp index 51051d703b17..f8caf27ab229 100644 --- a/mailnews/base/src/nsMsgWindow.cpp +++ b/mailnews/base/src/nsMsgWindow.cpp @@ -146,7 +146,8 @@ NS_IMETHODIMP nsMsgWindow::SelectFolder(const char *folderUri) /* void SelectMessage (in string messasgeUri); */ NS_IMETHODIMP nsMsgWindow::SelectMessage(const char *messageUri) { - return mMsgWindowCommands->SelectMessage(messageUri); + return (mMsgWindowCommands) ? mMsgWindowCommands->SelectMessage(messageUri) + : NS_ERROR_NULL_POINTER;; } NS_IMETHODIMP nsMsgWindow::CloseWindow()