forked from pool/MozillaThunderbird
886 lines
34 KiB
Diff
886 lines
34 KiB
Diff
Index: mailnews/base/src/nsMessenger.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/base/src/nsMessenger.cpp,v
|
|
retrieving revision 1.326
|
|
diff -u -w -p -8 -r1.326 nsMessenger.cpp
|
|
--- base/src/nsMessenger.cpp 26 Sep 2005 01:38:19 -0000 1.326
|
|
+++ mailnews/base/src/nsMessenger.cpp 21 Oct 2005 15:51:26 -0000
|
|
@@ -612,16 +612,17 @@ nsMessenger::LoadURL(nsIDOMWindowInterna
|
|
NS_ConvertASCIItoUTF16 uriString(aURL);
|
|
// Cleanup the empty spaces that might be on each end.
|
|
uriString.Trim(" ");
|
|
// Eliminate embedded newlines, which single-line text fields now allow:
|
|
uriString.StripChars("\r\n");
|
|
NS_ENSURE_TRUE(!uriString.IsEmpty(), NS_ERROR_FAILURE);
|
|
|
|
PRBool loadingFromFile = PR_FALSE;
|
|
+ PRBool getDummyMsgHdr = PR_FALSE;
|
|
PRInt64 fileSize;
|
|
|
|
if (StringBeginsWith(uriString, NS_LITERAL_STRING("file:")))
|
|
{
|
|
|
|
nsCOMPtr<nsIURI> fileUri;
|
|
rv = NS_NewURI(getter_AddRefs(fileUri), uriString);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
@@ -629,41 +630,48 @@ nsMessenger::LoadURL(nsIDOMWindowInterna
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
nsCOMPtr <nsIFile> file;
|
|
rv = fileUrl->GetFile(getter_AddRefs(file));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
file->GetFileSize(&fileSize);
|
|
uriString.ReplaceSubstring(NS_LITERAL_STRING("file:"), NS_LITERAL_STRING("mailbox:"));
|
|
uriString.Append(NS_LITERAL_STRING("&number=0"));
|
|
loadingFromFile = PR_TRUE;
|
|
+ getDummyMsgHdr = PR_TRUE;
|
|
}
|
|
+ else if (FindInReadable(NS_LITERAL_STRING("type=application/x-message-display"), uriString))
|
|
+ getDummyMsgHdr = PR_TRUE;
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
|
rv = NS_NewURI(getter_AddRefs(uri), uriString);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
NS_ENSURE_TRUE(mDocShell, NS_ERROR_FAILURE);
|
|
nsCOMPtr<nsIMsgMailNewsUrl> msgurl = do_QueryInterface(uri);
|
|
if (msgurl)
|
|
{
|
|
msgurl->SetMsgWindow(mMsgWindow);
|
|
+ if (loadingFromFile || getDummyMsgHdr)
|
|
+ {
|
|
if (loadingFromFile)
|
|
{
|
|
nsCOMPtr <nsIMailboxUrl> mailboxUrl = do_QueryInterface(msgurl, &rv);
|
|
mailboxUrl->SetMessageSize((PRUint32) fileSize);
|
|
+ }
|
|
+ if (getDummyMsgHdr)
|
|
+ {
|
|
nsCOMPtr <nsIMsgHeaderSink> headerSink;
|
|
// need to tell the header sink to capture some headers to create a fake db header
|
|
// so we can do reply to a .eml file or a rfc822 msg attachment.
|
|
mMsgWindow->GetMsgHeaderSink(getter_AddRefs(headerSink));
|
|
if (headerSink)
|
|
{
|
|
nsCOMPtr <nsIMsgDBHdr> dummyHeader;
|
|
headerSink->GetDummyMsgHeader(getter_AddRefs(dummyHeader));
|
|
- if (dummyHeader)
|
|
- {
|
|
+ if (dummyHeader && loadingFromFile)
|
|
dummyHeader->SetMessageSize((PRUint32) fileSize);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
nsCOMPtr<nsIDocShellLoadInfo> loadInfo;
|
|
rv = mDocShell->CreateLoadInfo(getter_AddRefs(loadInfo));
|
|
@@ -1386,17 +1394,17 @@ nsMessenger::MessageServiceFromURI(const
|
|
NS_IMETHODIMP
|
|
nsMessenger::MsgHdrFromURI(const char *aUri, nsIMsgDBHdr **aMsgHdr)
|
|
{
|
|
NS_ENSURE_ARG_POINTER(aUri);
|
|
NS_ENSURE_ARG_POINTER(aMsgHdr);
|
|
nsCOMPtr <nsIMsgMessageService> msgService;
|
|
nsresult rv;
|
|
|
|
- if (!strncmp(aUri, "file:", 5))
|
|
+ if (!strncmp(aUri, "file:", 5) || PL_strstr(aUri, "type=application/x-message-display"))
|
|
{
|
|
nsCOMPtr <nsIMsgHeaderSink> headerSink;
|
|
mMsgWindow->GetMsgHeaderSink(getter_AddRefs(headerSink));
|
|
if (headerSink)
|
|
{
|
|
rv = headerSink->GetDummyMsgHeader(aMsgHdr);
|
|
// Is there a way to check if they're asking for the hdr currently
|
|
// displayed in a stand-alone msg window from a .eml file?
|
|
Index: base/src/nsMsgCopyService.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/base/src/nsMsgCopyService.cpp,v
|
|
retrieving revision 1.51
|
|
diff -u -w -p -8 -r1.51 nsMsgCopyService.cpp
|
|
--- base/src/nsMsgCopyService.cpp 8 Aug 2005 20:36:39 -0000 1.51
|
|
+++ mailnews/base/src/nsMsgCopyService.cpp 21 Oct 2005 15:51:27 -0000
|
|
@@ -549,23 +549,20 @@ nsMsgCopyService::CopyFileMessage(nsIFil
|
|
PRUint32 aMsgFlags,
|
|
nsIMsgCopyServiceListener* listener,
|
|
nsIMsgWindow* window)
|
|
{
|
|
nsresult rv = NS_ERROR_NULL_POINTER;
|
|
nsCopyRequest* copyRequest;
|
|
nsCopySource* copySource = nsnull;
|
|
nsCOMPtr<nsISupports> fileSupport;
|
|
- nsCOMPtr<nsITransactionManager> txnMgr;
|
|
|
|
NS_ENSURE_ARG_POINTER(fileSpec);
|
|
NS_ENSURE_ARG_POINTER(dstFolder);
|
|
|
|
- if (window)
|
|
- window->GetTransactionManager(getter_AddRefs(txnMgr));
|
|
copyRequest = new nsCopyRequest();
|
|
if (!copyRequest) return rv;
|
|
fileSupport = do_QueryInterface(fileSpec, &rv);
|
|
if (NS_FAILED(rv)) goto done;
|
|
|
|
rv = copyRequest->Init(nsCopyFileMessageType, fileSupport, dstFolder,
|
|
isDraft, aMsgFlags, listener, window, PR_FALSE);
|
|
if (NS_FAILED(rv)) goto done;
|
|
Index: base/src/nsMsgDBView.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/base/src/nsMsgDBView.cpp,v
|
|
retrieving revision 1.226
|
|
diff -u -w -p -8 -r1.226 nsMsgDBView.cpp
|
|
--- base/src/nsMsgDBView.cpp 20 Oct 2005 16:03:26 -0000 1.226
|
|
+++ mailnews/base/src/nsMsgDBView.cpp 21 Oct 2005 15:51:35 -0000
|
|
@@ -974,17 +974,18 @@ NS_IMETHODIMP nsMsgDBView::ReloadMessage
|
|
{
|
|
if (m_currentlyDisplayedMsgUri.IsEmpty())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
if (mSuppressMsgDisplay)
|
|
return NS_OK;
|
|
|
|
nsCAutoString forceAllParts(m_currentlyDisplayedMsgUri);
|
|
- forceAllParts.AppendLiteral("?fetchCompleteMessage=true");
|
|
+ forceAllParts += (forceAllParts.FindChar('?') == kNotFound) ? "?" : "&";
|
|
+ forceAllParts.AppendLiteral("fetchCompleteMessage=true");
|
|
return mMessengerInstance->OpenURL(forceAllParts.get());
|
|
}
|
|
|
|
NS_IMETHODIMP nsMsgDBView::ReloadMessage()
|
|
{
|
|
if (m_currentlyDisplayedMsgUri.IsEmpty())
|
|
return NS_ERROR_FAILURE;
|
|
|
|
Index: compose/src/nsMsgAttachmentHandler.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsMsgAttachmentHandler.cpp,v
|
|
retrieving revision 1.117
|
|
diff -u -w -p -8 -r1.117 nsMsgAttachmentHandler.cpp
|
|
--- compose/src/nsMsgAttachmentHandler.cpp 21 Apr 2005 18:48:36 -0000 1.117
|
|
+++ mailnews/compose/src/nsMsgAttachmentHandler.cpp 21 Oct 2005 15:51:47 -0000
|
|
@@ -555,17 +555,18 @@ nsMsgAttachmentHandler::SnarfMsgAttachme
|
|
goto done;
|
|
}
|
|
|
|
rv = fetcher->Initialize(localFile, mOutFile, FetcherURLDoneCallback, this);
|
|
rv = GetMessageServiceFromURI(m_uri, getter_AddRefs(messageService));
|
|
if (NS_SUCCEEDED(rv) && messageService)
|
|
{
|
|
nsCAutoString uri(m_uri);
|
|
- uri.Append("?fetchCompleteMessage=true");
|
|
+ uri += (uri.FindChar('?') == kNotFound) ? "?" : "&";
|
|
+ uri.Append("fetchCompleteMessage=true");
|
|
nsCOMPtr<nsIStreamListener> strListener;
|
|
fetcher->QueryInterface(NS_GET_IID(nsIStreamListener), getter_AddRefs(strListener));
|
|
|
|
// initialize a new stream converter, that uses the strListener as its input
|
|
// obtain the input stream listener from the new converter,
|
|
// and pass the converter's input stream listener to DisplayMessage
|
|
|
|
m_mime_parser = do_CreateInstance(NS_MAILNEWS_MIME_STREAM_CONVERTER_CONTRACTID, &rv);
|
|
Index: compose/src/nsMsgCompose.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsMsgCompose.cpp,v
|
|
retrieving revision 1.471
|
|
diff -u -w -p -8 -r1.471 nsMsgCompose.cpp
|
|
--- compose/src/nsMsgCompose.cpp 18 Oct 2005 16:29:37 -0000 1.471
|
|
+++ mailnews/compose/src/nsMsgCompose.cpp 21 Oct 2005 15:51:54 -0000
|
|
@@ -1468,19 +1468,31 @@ nsresult nsMsgCompose::CreateMessage(con
|
|
// strip out ?type=application/x-message-display because it confuses libmime
|
|
PRInt32 typeIndex = msgUri.Find("?type=application/x-message-display");
|
|
if (typeIndex != kNotFound)
|
|
{
|
|
msgUri.Cut(typeIndex, sizeof("?type=application/x-message-display") - 1);
|
|
// we also need to replace the next '&' with '?'
|
|
if (msgUri.CharAt(typeIndex) == '&')
|
|
msgUri.SetCharAt('?', typeIndex);
|
|
+ originalMsgURI = msgUri.get();
|
|
+ }
|
|
}
|
|
+ else // check if we're dealing with a displayed message/rfc822 attachment
|
|
+ {
|
|
+ PRInt32 typeIndex = typeIndex = msgUri.Find("&type=application/x-message-display");
|
|
+ if (typeIndex != kNotFound)
|
|
+ {
|
|
+ msgUri.Cut(typeIndex, sizeof("&type=application/x-message-display") - 1);
|
|
+ // nsURLFetcher will check for "realtype=message/rfc822" and will set the
|
|
+ // content type to message/rfc822 in the forwarded message.
|
|
+ msgUri.Append("&realtype=message/rfc822");
|
|
originalMsgURI = msgUri.get();
|
|
}
|
|
+ }
|
|
if (compFields)
|
|
{
|
|
NS_IF_RELEASE(m_compFields);
|
|
m_compFields = NS_REINTERPRET_CAST(nsMsgCompFields*, compFields);
|
|
NS_ADDREF(m_compFields);
|
|
}
|
|
else
|
|
{
|
|
Index: compose/src/nsMsgComposeService.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsMsgComposeService.cpp,v
|
|
retrieving revision 1.113
|
|
diff -u -w -p -8 -r1.113 nsMsgComposeService.cpp
|
|
--- compose/src/nsMsgComposeService.cpp 3 Oct 2005 23:51:05 -0000 1.113
|
|
+++ mailnews/compose/src/nsMsgComposeService.cpp 21 Oct 2005 15:51:56 -0000
|
|
@@ -414,17 +414,19 @@ nsMsgComposeService::OpenComposeWindow(c
|
|
*/
|
|
if (type == nsIMsgCompType::ForwardInline || type == nsIMsgCompType::Draft || type == nsIMsgCompType::Template
|
|
|| type == nsIMsgCompType::ReplyWithTemplate)
|
|
{
|
|
nsCOMPtr<nsIMsgDraft> pMsgDraft (do_CreateInstance(NS_MSGDRAFT_CONTRACTID, &rv));
|
|
if (NS_SUCCEEDED(rv) && pMsgDraft)
|
|
{
|
|
nsCAutoString uriToOpen(originalMsgURI);
|
|
- uriToOpen.Append("?fetchCompleteMessage=true");
|
|
+
|
|
+ uriToOpen += (uriToOpen.FindChar('?') == kNotFound) ? "?" : "&";
|
|
+ uriToOpen.Append("fetchCompleteMessage=true");
|
|
|
|
switch(type)
|
|
{
|
|
case nsIMsgCompType::ForwardInline:
|
|
rv = pMsgDraft->OpenDraftMsg(uriToOpen.get(), originalMsgURI, identity, PR_TRUE, aMsgWindow);
|
|
break;
|
|
case nsIMsgCompType::Draft:
|
|
rv = pMsgDraft->OpenDraftMsg(uriToOpen.get(), nsnull, identity, PR_FALSE, aMsgWindow);
|
|
@@ -470,22 +472,22 @@ nsMsgComposeService::OpenComposeWindow(c
|
|
esc_FileBaseName|esc_Forced|esc_AlwaysCopy,
|
|
unescapedName);
|
|
pMsgCompFields->SetNewsgroups(NS_ConvertUTF8toUTF16(unescapedName));
|
|
pMsgCompFields->SetNewshost(host.get());
|
|
}
|
|
else
|
|
{
|
|
pMsgComposeParams->SetOriginalMsgURI(originalMsgURI);
|
|
- if (PL_strstr(originalMsgURI, "?type=application/x-message-display"))
|
|
+ if (PL_strstr(originalMsgURI, "type=application/x-message-display"))
|
|
{
|
|
nsCOMPtr <nsIMsgDBHdr> msgHdr;
|
|
if (strncmp(originalMsgURI, "file:", 5))
|
|
rv = GetMsgDBHdrFromURI(originalMsgURI, getter_AddRefs(msgHdr));
|
|
- else if (aMsgWindow)
|
|
+ if (aMsgWindow && !msgHdr)
|
|
{
|
|
nsCOMPtr <nsIMsgHeaderSink> headerSink;
|
|
rv = aMsgWindow->GetMsgHeaderSink(getter_AddRefs(headerSink));
|
|
if (headerSink)
|
|
rv = headerSink->GetDummyMsgHeader(getter_AddRefs(msgHdr));
|
|
}
|
|
pMsgComposeParams->SetOrigMsgHdr(msgHdr);
|
|
}
|
|
Index: compose/src/nsMsgCreate.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsMsgCreate.cpp,v
|
|
retrieving revision 1.60
|
|
diff -u -w -p -8 -r1.60 nsMsgCreate.cpp
|
|
--- compose/src/nsMsgCreate.cpp 16 Sep 2005 15:18:33 -0000 1.60
|
|
+++ mailnews/compose/src/nsMsgCreate.cpp 21 Oct 2005 15:51:57 -0000
|
|
@@ -144,19 +144,19 @@ nsMsgDraft::ProcessDraftOrTemplateOperat
|
|
printf("Unable to get the nsIStreamListener interface from libmime\n");
|
|
#endif
|
|
return NS_ERROR_UNEXPECTED;
|
|
}
|
|
|
|
nsCOMPtr<nsIURI> aURL;
|
|
nsCAutoString uriString(msgURI);
|
|
PRBool fileUrl = StringBeginsWith(uriString, NS_LITERAL_CSTRING("file:"));
|
|
+ PRBool forwardedMessage = PL_strstr(msgURI, "&type=application/x-message-display") != nsnull;
|
|
|
|
-
|
|
- if (fileUrl)
|
|
+ if (fileUrl || forwardedMessage)
|
|
rv = NS_NewURI(getter_AddRefs(aURL), msgURI);
|
|
else
|
|
rv = mMessageService->GetUrlForUri(mURI, getter_AddRefs(aURL), aMsgWindow);
|
|
if (aURL)
|
|
aURL->SetSpec(nsDependentCString(mURI));
|
|
|
|
// if we are forwarding a message and that message used a charset over ride
|
|
// then use that over ride charset instead of the charset specified in the message
|
|
Index: compose/src/nsMsgQuote.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsMsgQuote.cpp,v
|
|
retrieving revision 1.71
|
|
diff -u -w -p -8 -r1.71 nsMsgQuote.cpp
|
|
--- compose/src/nsMsgQuote.cpp 16 Sep 2005 15:18:33 -0000 1.71
|
|
+++ mailnews/compose/src/nsMsgQuote.cpp 21 Oct 2005 15:51:58 -0000
|
|
@@ -170,19 +170,19 @@ nsMsgQuote::QuoteMessage(const char *msg
|
|
if (!msgURI)
|
|
return NS_ERROR_INVALID_ARG;
|
|
|
|
mQuoteHeaders = quoteHeaders;
|
|
mStreamListener = aQuoteMsgStreamListener;
|
|
|
|
nsCAutoString msgUri(msgURI);
|
|
PRBool fileUrl = !strncmp(msgURI, "file:", 5);
|
|
-
|
|
+ PRBool forwardedMessage = PL_strstr(msgURI, "&realtype=message/rfc822") != nsnull;
|
|
nsCOMPtr<nsIURI> aURL;
|
|
- if (fileUrl)
|
|
+ if (fileUrl || forwardedMessage)
|
|
rv = NS_NewURI(getter_AddRefs(aURL), msgURI);
|
|
else
|
|
{
|
|
nsCOMPtr <nsIMsgMessageService> msgService;
|
|
rv = GetMessageServiceFromURI(msgURI, getter_AddRefs(msgService));
|
|
if (NS_FAILED(rv)) return rv;
|
|
rv = msgService->GetUrlForUri(msgURI, getter_AddRefs(aURL), nsnull);
|
|
}
|
|
Index: compose/src/nsURLFetcher.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/compose/src/nsURLFetcher.cpp,v
|
|
retrieving revision 1.72
|
|
diff -u -w -p -8 -r1.72 nsURLFetcher.cpp
|
|
--- compose/src/nsURLFetcher.cpp 13 Jun 2005 18:10:20 -0000 1.72
|
|
+++ mailnews/compose/src/nsURLFetcher.cpp 21 Oct 2005 15:51:58 -0000
|
|
@@ -484,26 +484,33 @@ NS_IMETHODIMP nsURLFetcherStreamConsumer
|
|
{
|
|
if (!mURLFetcher)
|
|
return NS_ERROR_FAILURE;
|
|
|
|
// Check the content type!
|
|
nsCAutoString contentType;
|
|
nsCAutoString charset;
|
|
|
|
- nsCOMPtr<nsIChannel> aChannel = do_QueryInterface(aRequest);
|
|
- if(!aChannel) return NS_ERROR_FAILURE;
|
|
+ nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
|
|
+ if(!channel) return NS_ERROR_FAILURE;
|
|
|
|
- if (NS_SUCCEEDED(aChannel->GetContentType(contentType)) &&
|
|
+ if (NS_SUCCEEDED(channel->GetContentType(contentType)) &&
|
|
!contentType.EqualsLiteral(UNKNOWN_CONTENT_TYPE))
|
|
{
|
|
+ nsCAutoString uriSpec;
|
|
+ nsCOMPtr <nsIURI> channelURI;
|
|
+ channel->GetURI(getter_AddRefs(channelURI));
|
|
+ channelURI->GetSpec(uriSpec);
|
|
+ if (FindInReadable(NS_LITERAL_CSTRING("&realtype=message/rfc822"), uriSpec))
|
|
+ mURLFetcher->mContentType = MESSAGE_RFC822;
|
|
+ else
|
|
mURLFetcher->mContentType = contentType;
|
|
}
|
|
|
|
- if (NS_SUCCEEDED(aChannel->GetContentCharset(charset)) && !charset.IsEmpty())
|
|
+ if (NS_SUCCEEDED(channel->GetContentCharset(charset)) && !charset.IsEmpty())
|
|
{
|
|
mURLFetcher->mCharset = charset;
|
|
}
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
/** nsIStreamListener methods **/
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/imap/src/nsImapService.cpp,v
|
|
retrieving revision 1.309
|
|
diff -u -w -p -8 -r1.309 nsImapService.cpp
|
|
--- imap/src/nsImapService.cpp 22 Mar 2005 18:25:33 -0000 1.309
|
|
+++ mailnews/imap/src/nsImapService.cpp 21 Oct 2005 15:52:23 -0000
|
|
@@ -95,16 +95,17 @@
|
|
#include "nsIDOMWindowInternal.h"
|
|
#include "nsIMessengerWindowService.h"
|
|
#include "nsIWindowMediator.h"
|
|
#include "nsIPrompt.h"
|
|
#include "nsIWindowWatcher.h"
|
|
#include "nsImapProtocol.h"
|
|
#include "nsIMsgMailSession.h"
|
|
#include "nsIStreamConverterService.h"
|
|
+#include "nsNetUtil.h"
|
|
#include "nsInt64.h"
|
|
|
|
#define PREF_MAIL_ROOT_IMAP "mail.root.imap" // old - for backward compatibility only
|
|
#define PREF_MAIL_ROOT_IMAP_REL "mail.root.imap-rel"
|
|
|
|
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
|
|
static NS_DEFINE_CID(kImapUrlCID, NS_IMAPURL_CID);
|
|
static NS_DEFINE_CID(kCacheServiceCID, NS_CACHESERVICE_CID);
|
|
@@ -308,16 +309,20 @@ nsImapService::LiteSelectFolder(nsIEvent
|
|
|
|
return rv;
|
|
}
|
|
|
|
NS_IMETHODIMP nsImapService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL, nsIMsgWindow *aMsgWindow)
|
|
{
|
|
nsresult rv = NS_OK;
|
|
|
|
+ if (PL_strstr(aMessageURI, "&type=application/x-message-display"))
|
|
+ return NS_NewURI(aURL, aMessageURI);
|
|
+
|
|
+
|
|
nsCOMPtr<nsIMsgFolder> folder;
|
|
nsXPIDLCString msgKey;
|
|
rv = DecomposeImapURI(aMessageURI, getter_AddRefs(folder), getter_Copies(msgKey));
|
|
if (NS_SUCCEEDED(rv))
|
|
{
|
|
nsCOMPtr<nsIImapUrl> imapUrl;
|
|
nsCAutoString urlSpec;
|
|
PRUnichar hierarchySeparator = GetHierarchyDelimiter(folder);
|
|
@@ -477,17 +482,47 @@ NS_IMETHODIMP nsImapService::DisplayMess
|
|
nsIURI ** aURL)
|
|
{
|
|
nsresult rv = NS_OK;
|
|
nsCOMPtr<nsIMsgFolder> folder;
|
|
nsXPIDLCString msgKey;
|
|
nsXPIDLCString mimePart;
|
|
nsCAutoString folderURI;
|
|
nsMsgKey key;
|
|
+ nsCAutoString messageURI(aMessageURI);
|
|
|
|
+ PRInt32 typeIndex = messageURI.Find("&type=application/x-message-display");
|
|
+ if (typeIndex != kNotFound)
|
|
+ {
|
|
+ // This happens with forward inline of a message/rfc822 attachment opened in
|
|
+ // a standalone msg window.
|
|
+ // So, just cut to the chase and call AsyncOpen on a channel.
|
|
+ nsCOMPtr <nsIURI> uri;
|
|
+ messageURI.Cut(typeIndex, sizeof("&type=application/x-message-display") - 1);
|
|
+ rv = NS_NewURI(getter_AddRefs(uri), messageURI.get());
|
|
+ NS_ENSURE_SUCCESS(rv, rv);
|
|
+ if (aURL)
|
|
+ NS_IF_ADDREF(*aURL = uri);
|
|
+ nsCOMPtr<nsIStreamListener> aStreamListener = do_QueryInterface(aDisplayConsumer, &rv);
|
|
+ if (NS_SUCCEEDED(rv) && aStreamListener)
|
|
+ {
|
|
+ nsCOMPtr<nsIChannel> aChannel;
|
|
+ nsCOMPtr<nsILoadGroup> aLoadGroup;
|
|
+ nsCOMPtr<nsIMsgMailNewsUrl> mailnewsUrl = do_QueryInterface(uri, &rv);
|
|
+ if (NS_SUCCEEDED(rv) && mailnewsUrl)
|
|
+ mailnewsUrl->GetLoadGroup(getter_AddRefs(aLoadGroup));
|
|
+
|
|
+ rv = NewChannel(uri, getter_AddRefs(aChannel));
|
|
+ if (NS_FAILED(rv)) return rv;
|
|
+
|
|
+ nsCOMPtr<nsISupports> aCtxt = do_QueryInterface(uri);
|
|
+ // now try to open the channel passing in our display consumer as the listener
|
|
+ return aChannel->AsyncOpen(aStreamListener, aCtxt);
|
|
+ }
|
|
+ }
|
|
rv = DecomposeImapURI(aMessageURI, getter_AddRefs(folder), getter_Copies(msgKey));
|
|
if (msgKey.IsEmpty())
|
|
return NS_MSG_MESSAGE_NOT_FOUND;
|
|
rv = nsParseImapMessageURI(aMessageURI, folderURI, &key, getter_Copies(mimePart));
|
|
if (NS_SUCCEEDED(rv))
|
|
{
|
|
nsCOMPtr<nsIImapMessageSink> imapMessageSink(do_QueryInterface(folder, &rv));
|
|
if (NS_SUCCEEDED(rv))
|
|
Index: local/src/nsMailboxProtocol.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/local/src/nsMailboxProtocol.cpp,v
|
|
retrieving revision 1.122
|
|
diff -u -w -p -8 -r1.122 nsMailboxProtocol.cpp
|
|
--- local/src/nsMailboxProtocol.cpp 1 Jun 2005 19:04:20 -0000 1.122
|
|
+++ mailnews/local/src/nsMailboxProtocol.cpp 21 Oct 2005 15:52:26 -0000
|
|
@@ -456,16 +456,18 @@ nsresult nsMailboxProtocol::LoadUrl(nsIU
|
|
m_runningUrl = do_QueryInterface(aURL);
|
|
if (m_runningUrl)
|
|
{
|
|
// find out from the url what action we are supposed to perform...
|
|
rv = m_runningUrl->GetMailboxAction(&m_mailboxAction);
|
|
|
|
PRBool convertData = PR_FALSE;
|
|
|
|
+ // need to check if we're fetching an rfc822 part in order to
|
|
+ // quote a message.
|
|
if (m_mailboxAction == nsIMailboxUrl::ActionFetchMessage)
|
|
{
|
|
nsCOMPtr<nsIMsgMailNewsUrl> msgUrl = do_QueryInterface(m_runningUrl, &rv);
|
|
NS_ENSURE_SUCCESS(rv,rv);
|
|
|
|
nsCAutoString queryStr;
|
|
rv = msgUrl->GetQuery(queryStr);
|
|
NS_ENSURE_SUCCESS(rv,rv);
|
|
Index: local/src/nsMailboxService.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/local/src/nsMailboxService.cpp,v
|
|
retrieving revision 1.116
|
|
diff -u -w -p -8 -r1.116 nsMailboxService.cpp
|
|
--- local/src/nsMailboxService.cpp 16 Sep 2005 15:19:09 -0000 1.116
|
|
+++ mailnews/local/src/nsMailboxService.cpp 21 Oct 2005 15:52:27 -0000
|
|
@@ -177,16 +177,19 @@ nsresult nsMailboxService::FetchMessage(
|
|
nsIURI ** aURL)
|
|
{
|
|
nsresult rv = NS_OK;
|
|
nsCOMPtr<nsIMailboxUrl> mailboxurl;
|
|
|
|
nsMailboxAction actionToUse = mailboxAction;
|
|
|
|
nsCOMPtr <nsIURI> url;
|
|
+
|
|
+ nsCAutoString uriString(aMessageURI);
|
|
+
|
|
if (!strncmp(aMessageURI, "file:", 5))
|
|
{
|
|
PRInt64 fileSize;
|
|
nsCOMPtr<nsIURI> fileUri;
|
|
rv = NS_NewURI(getter_AddRefs(fileUri), aMessageURI);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
nsCOMPtr <nsIFileURL> fileUrl = do_QueryInterface(fileUri, &rv);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
@@ -216,16 +219,27 @@ nsresult nsMailboxService::FetchMessage(
|
|
headerSink->GetDummyMsgHeader(getter_AddRefs(dummyHeader));
|
|
if (dummyHeader)
|
|
dummyHeader->SetMessageSize((PRUint32) fileSize);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
+
|
|
+ // this happens with forward inline of message/rfc822 attachment
|
|
+ // opened in a stand-alone msg window.
|
|
+ PRInt32 typeIndex = typeIndex = uriString.Find("&type=application/x-message-display");
|
|
+ if (typeIndex != kNotFound)
|
|
+ {
|
|
+ uriString.Cut(typeIndex, sizeof("&type=application/x-message-display") - 1);
|
|
+ rv = NS_NewURI(getter_AddRefs(url), uriString.get());
|
|
+ mailboxurl = do_QueryInterface(url);
|
|
+ }
|
|
+ else
|
|
rv = PrepareMessageUrl(aMessageURI, aUrlListener, actionToUse , getter_AddRefs(mailboxurl), aMsgWindow);
|
|
|
|
if (NS_SUCCEEDED(rv))
|
|
{
|
|
url = do_QueryInterface(mailboxurl);
|
|
nsCOMPtr<nsIMsgMailNewsUrl> msgUrl (do_QueryInterface(url));
|
|
msgUrl->SetMsgWindow(aMsgWindow);
|
|
nsCOMPtr<nsIMsgI18NUrl> i18nurl (do_QueryInterface(msgUrl));
|
|
@@ -313,27 +327,16 @@ NS_IMETHODIMP nsMailboxService::OpenAtta
|
|
const char *aUrl,
|
|
const char *aMessageUri,
|
|
nsISupports *aDisplayConsumer,
|
|
nsIMsgWindow *aMsgWindow,
|
|
nsIUrlListener *aUrlListener)
|
|
{
|
|
nsCOMPtr <nsIURI> URL;
|
|
nsCAutoString urlString(aUrl);
|
|
- // strip out ?type=application/x-message-display because it confuses libmime
|
|
-
|
|
- PRInt32 typeIndex = urlString.Find("?type=application/x-message-display");
|
|
- if (typeIndex != kNotFound)
|
|
- {
|
|
- urlString.Cut(typeIndex, sizeof("?type=application/x-message-display") - 1);
|
|
- // we also need to replace the next '&' with '?'
|
|
- PRInt32 firstPartIndex = urlString.FindChar('&');
|
|
- if (firstPartIndex != kNotFound)
|
|
- urlString.SetCharAt('?', firstPartIndex);
|
|
- }
|
|
urlString += "&type=";
|
|
urlString += aContentType;
|
|
urlString += "&filename=";
|
|
urlString += aFileName;
|
|
CreateStartupUrl(urlString.get(), getter_AddRefs(URL));
|
|
nsresult rv;
|
|
// try to run the url in the docshell...
|
|
nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(aDisplayConsumer, &rv));
|
|
@@ -384,17 +387,18 @@ nsMailboxService::SaveMessageToDisk(cons
|
|
if (aURL)
|
|
mailboxurl->QueryInterface(NS_GET_IID(nsIURI), (void **) aURL);
|
|
|
|
return rv;
|
|
}
|
|
|
|
NS_IMETHODIMP nsMailboxService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL, nsIMsgWindow *aMsgWindow)
|
|
{
|
|
- if (!strncmp(aMessageURI, "file:", 5))
|
|
+ if (!strncmp(aMessageURI, "file:", 5) || PL_strstr(aMessageURI, "type=application/x-message-display")
|
|
+ || !strncmp(aMessageURI, "mailbox:", 8))
|
|
return NS_NewURI(aURL, aMessageURI);
|
|
|
|
nsresult rv = NS_OK;
|
|
nsCOMPtr<nsIMailboxUrl> mailboxurl;
|
|
rv = PrepareMessageUrl(aMessageURI, nsnull, nsIMailboxUrl::ActionFetchMessage, getter_AddRefs(mailboxurl), aMsgWindow);
|
|
if (NS_SUCCEEDED(rv) && mailboxurl)
|
|
rv = mailboxurl->QueryInterface(NS_GET_IID(nsIURI), (void **) aURL);
|
|
return rv;
|
|
Index: local/src/nsPop3Sink.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/local/src/nsPop3Sink.cpp,v
|
|
retrieving revision 1.127
|
|
diff -u -w -p -8 -r1.127 nsPop3Sink.cpp
|
|
--- local/src/nsPop3Sink.cpp 7 Aug 2005 15:43:53 -0000 1.127
|
|
+++ mailnews/local/src/nsPop3Sink.cpp 21 Oct 2005 15:52:28 -0000
|
|
@@ -803,17 +803,16 @@ nsPop3Sink::IncorporateComplete(nsIMsgWi
|
|
m_outFileStream->flush();
|
|
m_outFileStream->close();
|
|
m_newMailParser->FinishHeader();
|
|
// need to re-open the inbox file stream.
|
|
if (!m_tmpDownloadFileSpec.Exists())
|
|
return HandleTempDownloadFailed(aMsgWindow);
|
|
|
|
m_outFileStream->Open(m_tmpDownloadFileSpec, (PR_RDWR | PR_CREATE_FILE));
|
|
-
|
|
m_newMailParser->ApplyFilters(&moved, aMsgWindow, 0);
|
|
if (!moved)
|
|
{
|
|
if (m_outFileStream->is_open())
|
|
{
|
|
nsFileSpec destFolderSpec;
|
|
|
|
nsCOMPtr<nsIFileSpec> path;
|
|
Index: mime/src/mimedrft.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/mime/src/mimedrft.cpp,v
|
|
retrieving revision 1.142
|
|
diff -u -w -p -8 -r1.142 mimedrft.cpp
|
|
--- mime/src/mimedrft.cpp 20 Jul 2005 11:49:43 -0000 1.142
|
|
+++ mailnews/mime/src/mimedrft.cpp 21 Oct 2005 15:52:38 -0000
|
|
@@ -2077,16 +2077,20 @@ mime_bridge_create_draft_stream(
|
|
goto FAIL;
|
|
|
|
rv = msgService->GetUrlForUri(turl.get(), getter_AddRefs(aURL), nsnull);
|
|
if (NS_FAILED(rv))
|
|
goto FAIL;
|
|
|
|
if (NS_SUCCEEDED(aURL->GetSpec(urlString)))
|
|
{
|
|
+ PRInt32 typeIndex = urlString.Find("&type=application/x-message-display");
|
|
+ if (typeIndex != kNotFound)
|
|
+ urlString.Cut(typeIndex, sizeof("&type=application/x-message-display") - 1);
|
|
+
|
|
mdd->url_name = ToNewCString(urlString);
|
|
if (!(mdd->url_name))
|
|
goto FAIL;
|
|
}
|
|
|
|
newPluginObj2->GetForwardInline(&mdd->forwardInline);
|
|
newPluginObj2->GetIdentity(getter_AddRefs(mdd->identity));
|
|
newPluginObj2->GetOriginalMsgURI(&mdd->originalMsgURI);
|
|
Index: mime/src/mimei.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/mime/src/mimei.cpp,v
|
|
retrieving revision 1.77
|
|
diff -u -w -p -8 -r1.77 mimei.cpp
|
|
--- mime/src/mimei.cpp 13 Jun 2005 18:34:05 -0000 1.77
|
|
+++ mailnews/mime/src/mimei.cpp 21 Oct 2005 15:52:41 -0000
|
|
@@ -1367,16 +1367,26 @@ mime_set_url_part(const char *url, const
|
|
const char *part_begin = 0;
|
|
const char *part_end = 0;
|
|
PRBool got_q = PR_FALSE;
|
|
const char *s;
|
|
char *result;
|
|
|
|
if (!url || !part) return 0;
|
|
|
|
+ nsCAutoString urlString(url);
|
|
+ PRInt32 typeIndex = urlString.Find("?type=application/x-message-display");
|
|
+ if (typeIndex != kNotFound)
|
|
+ {
|
|
+ urlString.Cut(typeIndex, sizeof("?type=application/x-message-display") - 1);
|
|
+ if (urlString.CharAt(typeIndex) == '&')
|
|
+ urlString.SetCharAt('?', typeIndex);
|
|
+ url = urlString.get();
|
|
+ }
|
|
+
|
|
for (s = url; *s; s++)
|
|
{
|
|
if (*s == '?')
|
|
{
|
|
got_q = PR_TRUE;
|
|
if (!nsCRT::strncasecmp(s, "?part=", 6))
|
|
part_begin = (s += 6);
|
|
}
|
|
@@ -1665,34 +1675,32 @@ mime_parse_url_options(const char *url,
|
|
options->headers = MimeHeadersMicro;
|
|
else if (end > value && !nsCRT::strncasecmp ("cite", value, end - value))
|
|
options->headers = MimeHeadersCitation;
|
|
else if (end > value && !nsCRT::strncasecmp ("citation", value, end-value))
|
|
options->headers = MimeHeadersCitation;
|
|
else
|
|
options->headers = default_headers;
|
|
}
|
|
- else if (!nsCRT::strncasecmp ("part", q, name_end - q))
|
|
+ else if (!nsCRT::strncasecmp ("part", q, name_end - q) &&
|
|
+ options->format_out != nsMimeOutput::nsMimeMessageBodyQuoting)
|
|
{
|
|
PR_FREEIF (options->part_to_load);
|
|
if (end > value)
|
|
{
|
|
options->part_to_load = (char *) PR_MALLOC(end - value + 1);
|
|
if (!options->part_to_load)
|
|
return MIME_OUT_OF_MEMORY;
|
|
memcpy(options->part_to_load, value, end-value);
|
|
options->part_to_load[end-value] = 0;
|
|
}
|
|
}
|
|
else if (!nsCRT::strncasecmp ("rot13", q, name_end - q))
|
|
{
|
|
- if (end <= value || !nsCRT::strncasecmp ("true", value, end - value))
|
|
- options->rot13_p = PR_TRUE;
|
|
- else
|
|
- options->rot13_p = PR_FALSE;
|
|
+ options->rot13_p = end <= value || !nsCRT::strncasecmp ("true", value, end - value);
|
|
}
|
|
|
|
q = end;
|
|
if (*q)
|
|
q++;
|
|
}
|
|
|
|
|
|
@@ -1751,16 +1759,17 @@ mime_parse_url_options(const char *url,
|
|
and leaves them incompatible for:
|
|
|
|
= the first part of a top-level multipart
|
|
= all elements deeper than the outermost part
|
|
|
|
Life s#$%s when you don't properly think out things that end up turning
|
|
into de-facto standards...
|
|
*/
|
|
+
|
|
if (options->part_to_load &&
|
|
!PL_strchr(options->part_to_load, '.')) /* doesn't contain a dot */
|
|
{
|
|
if (!nsCRT::strcmp(options->part_to_load, "0")) /* 0 */
|
|
{
|
|
PR_Free(options->part_to_load);
|
|
options->part_to_load = nsCRT::strdup("1");
|
|
if (!options->part_to_load)
|
|
@@ -1774,17 +1783,16 @@ mime_parse_url_options(const char *url,
|
|
if (!s) return MIME_OUT_OF_MEMORY;
|
|
PL_strcpy(s, prefix);
|
|
PL_strcat(s, options->part_to_load);
|
|
PR_Free(options->part_to_load);
|
|
options->part_to_load = s;
|
|
}
|
|
}
|
|
|
|
-
|
|
return 0;
|
|
}
|
|
|
|
|
|
/* Some output-generation utility functions...
|
|
*/
|
|
|
|
int
|
|
@@ -1949,16 +1957,28 @@ MimeObject_output_init(MimeObject *obj,
|
|
|
|
char *
|
|
mime_get_base_url(const char *url)
|
|
{
|
|
if (!url)
|
|
return nsnull;
|
|
|
|
const char *s = strrchr(url, '?');
|
|
+ if (s && !strncmp(s, "?type=application/x-message-display", sizeof("?type=application/x-message-display") - 1))
|
|
+ {
|
|
+ const char *nextTerm = strchr(s, '&');
|
|
+ s = (nextTerm) ? nextTerm : s + strlen(s) - 1;
|
|
+ }
|
|
+ // we need to keep the ?number part of the url, or we won't know
|
|
+ // which local message the part belongs to.
|
|
+ if (s && *s && *(s+1) && !strncmp(s + 1, "number=", sizeof("number=") - 1))
|
|
+ {
|
|
+ const char *nextTerm = strchr(++s, '&');
|
|
+ s = (nextTerm) ? nextTerm : s + strlen(s) - 1;
|
|
+ }
|
|
char *result = (char *) PR_MALLOC(strlen(url) + 1);
|
|
NS_ASSERTION(result, "out of memory");
|
|
if (!result)
|
|
return nsnull;
|
|
|
|
memcpy(result, url, s - url);
|
|
result[s - url] = 0;
|
|
return result;
|
|
Index: mime/src/nsStreamConverter.cpp
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/mime/src/nsStreamConverter.cpp,v
|
|
retrieving revision 1.128
|
|
diff -u -w -p -8 -r1.128 nsStreamConverter.cpp
|
|
--- mime/src/nsStreamConverter.cpp 16 Aug 2005 14:23:00 -0000 1.128
|
|
+++ mailnews/mime/src/nsStreamConverter.cpp 21 Oct 2005 15:52:42 -0000
|
|
@@ -403,17 +403,17 @@ nsStreamConverter::DetermineOutputFormat
|
|
// Don't muck with this data!
|
|
*aNewType = nsMimeOutput::nsMimeMessageRaw;
|
|
return NS_OK;
|
|
}
|
|
}
|
|
|
|
// is this is a part that should just come out raw
|
|
const char *part = FindQueryElementData(queryPart, "part=");
|
|
- if (part)
|
|
+ if (part && !mToType.Equals("application/vnd.mozilla.xul+xml"))
|
|
{
|
|
// default for parts
|
|
mOutputFormat = "raw";
|
|
*aNewType = nsMimeOutput::nsMimeMessageRaw;
|
|
|
|
// if we are being asked to fetch a part....it should have a
|
|
// content type appended to it...if it does, we want to remember
|
|
// that as mOutputFormat
|
|
@@ -1096,16 +1096,19 @@ NS_IMETHODIMP nsStreamConverter::AsyncCo
|
|
SetMimeHeadersListener(quoteListener, nsMimeOutput::nsMimeMessageQuoting);
|
|
rv = aMsgQuote->GetQuoteChannel(getter_AddRefs(aChannel));
|
|
}
|
|
else
|
|
{
|
|
aChannel = do_QueryInterface(aCtxt, &rv);
|
|
}
|
|
|
|
+ mFromType = aFromType;
|
|
+ mToType = aToType;
|
|
+
|
|
NS_ASSERTION(aChannel && NS_SUCCEEDED(rv), "mailnews mime converter has to have the channel passed in...");
|
|
if (NS_FAILED(rv)) return rv;
|
|
|
|
nsCOMPtr<nsIURI> aUri;
|
|
aChannel->GetURI(getter_AddRefs(aUri));
|
|
return Init(aUri, aListener, aChannel);
|
|
}
|
|
|
|
Index: mime/src/nsStreamConverter.h
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mailnews/mime/src/nsStreamConverter.h,v
|
|
retrieving revision 1.25
|
|
diff -u -w -p -8 -r1.25 nsStreamConverter.h
|
|
--- mime/src/nsStreamConverter.h 1 Jun 2004 17:22:01 -0000 1.25
|
|
+++ mailnews/mime/src/nsStreamConverter.h 21 Oct 2005 15:52:42 -0000
|
|
@@ -102,16 +102,18 @@ private:
|
|
nsCString mOverrideFormat; // this is a possible override for emitter creation
|
|
PRBool mWrapperOutput; // Should we output the frame split message display
|
|
|
|
nsCOMPtr<nsIMimeStreamConverterListener> mMimeStreamConverterListener;
|
|
PRBool mForwardInline;
|
|
nsCOMPtr<nsIMsgIdentity> mIdentity;
|
|
nsCString mOriginalMsgURI;
|
|
|
|
+ nsCString mFromType;
|
|
+ nsCString mToType;
|
|
#ifdef DEBUG_mscott
|
|
PRTime mConvertContentTime;
|
|
#endif
|
|
nsIRequest * mPendingRequest; // used when we need to delay to fire onStartRequest
|
|
nsISupports * mPendingContext; // used when we need to delay to fire onStartRequest
|
|
};
|
|
|
|
#endif /* nsStreamConverter_h_ */
|
|
Index: mailWindowOverlay.js
|
|
===================================================================
|
|
RCS file: /cvsroot/mozilla/mail/base/content/mailWindowOverlay.js,v
|
|
retrieving revision 1.103
|
|
diff -u -w -p -8 -r1.103 mailWindowOverlay.js
|
|
--- mailWindowOverlay.js 12 Oct 2005 21:32:51 -0000 1.103
|
|
+++ mail/base/content/mailWindowOverlay.js 27 Oct 2005 16:46:58 -0000
|
|
@@ -2391,17 +2391,17 @@ function HandleMDNResponse(aUrl)
|
|
if (IsNewsMessage(msgURI))
|
|
return;
|
|
|
|
// if the message is marked as junk, do NOT attempt to process a return receipt
|
|
// in order to better protect the user
|
|
if (SelectedMessagesAreJunk())
|
|
return;
|
|
|
|
- var msgHdr = messenger.messageServiceFromURI(msgURI).messageURIToMsgHdr(msgURI);
|
|
+ var msgHdr = messenger.msgHdrFromURI(msgURI);
|
|
var mimeHdr;
|
|
|
|
try {
|
|
mimeHdr = aUrl.mimeHeaders;
|
|
} catch (ex) {
|
|
return;
|
|
}
|
|
|