From dfc650cdbfd11fd7851f46e5c76ee5cb06829671 Mon Sep 17 00:00:00 2001 From: "nhotta%netscape.com" Date: Tue, 12 Feb 2002 22:21:11 +0000 Subject: [PATCH] Changed QuotingOutputStreamListener to pass charset and charsetoverride to the constructor, also added MimeConverter to the class because it is used in multiple places, bug 115869, r=ducarroz, sr=bienvenu. --- mailnews/compose/src/nsMsgCompose.cpp | 43 +++++++++++++++++---------- mailnews/compose/src/nsMsgCompose.h | 6 +++- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/mailnews/compose/src/nsMsgCompose.cpp b/mailnews/compose/src/nsMsgCompose.cpp index dd1e11ab779a..4e426c56adfc 100644 --- a/mailnews/compose/src/nsMsgCompose.cpp +++ b/mailnews/compose/src/nsMsgCompose.cpp @@ -1535,7 +1535,9 @@ QuotingOutputStreamListener::~QuotingOutputStreamListener() QuotingOutputStreamListener::QuotingOutputStreamListener(const char * originalMsgURI, PRBool quoteHeaders, PRBool headersOnly, - nsIMsgIdentity *identity) + nsIMsgIdentity *identity, + const char *charset, + PRBool charetOverride) { nsresult rv; mQuoteHeaders = quoteHeaders; @@ -1660,23 +1662,29 @@ QuotingOutputStreamListener::QuotingOutputStreamListener(const char * originalMs } - nsXPIDLString author; - rv = originalMsgHdr->GetMime2DecodedAuthor(getter_Copies(author)); + nsXPIDLCString author; + rv = originalMsgHdr->GetAuthor(getter_Copies(author)); + if (NS_SUCCEEDED(rv)) { + nsXPIDLCString decodedString; + mMimeConverter = do_GetService(kCMimeConverterCID); + if (mMimeConverter) + mMimeConverter->DecodeMimeHeader(author.get(), getter_Copies(decodedString), charset, charetOverride); + nsCOMPtr parser (do_GetService(NS_MAILNEWS_MIME_HEADER_PARSER_CONTRACTID)); if (parser) { nsXPIDLCString authorName; - rv = parser->ExtractHeaderAddressName("UTF-8", NS_ConvertUCS2toUTF8(author).get(), + rv = parser->ExtractHeaderAddressName("UTF-8", decodedString.get(), getter_Copies(authorName)); // take care "%s wrote" PRUnichar *formatedString = nsnull; if (NS_SUCCEEDED(rv) && authorName) formatedString = nsTextFormatter::smprintf(replyHeaderAuthorwrote.get(), authorName.get()); else - formatedString = nsTextFormatter::smprintf(replyHeaderAuthorwrote.get(), NS_ConvertUCS2toUTF8(author).get()); + formatedString = nsTextFormatter::smprintf(replyHeaderAuthorwrote.get(), author.get()); if (formatedString) { citePrefixAuthor.Assign(formatedString); @@ -1787,7 +1795,11 @@ NS_IMETHODIMP QuotingOutputStreamListener::OnStopRequest(nsIRequest *request, ns nsXPIDLCString outCString; PRUnichar emptyUnichar = 0; PRBool needToRemoveDup = PR_FALSE; - nsCOMPtr mimeConverter = do_GetService(kCMimeConverterCID); + if (!mMimeConverter) + { + mMimeConverter = do_GetService(kCMimeConverterCID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + } nsXPIDLCString charset; compFields->GetCharacterSet(getter_Copies(charset)); @@ -1796,13 +1808,13 @@ NS_IMETHODIMP QuotingOutputStreamListener::OnStopRequest(nsIRequest *request, ns mHeaders->ExtractHeader(HEADER_TO, PR_TRUE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, recipient, charset); + mMimeConverter->DecodeMimeHeader(outCString, recipient, charset); } mHeaders->ExtractHeader(HEADER_CC, PR_TRUE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, cc, charset); + mMimeConverter->DecodeMimeHeader(outCString, cc, charset); } if (recipient.Length() > 0 && cc.Length() > 0) @@ -1816,31 +1828,31 @@ NS_IMETHODIMP QuotingOutputStreamListener::OnStopRequest(nsIRequest *request, ns mHeaders->ExtractHeader(HEADER_REPLY_TO, PR_FALSE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, replyTo, charset); + mMimeConverter->DecodeMimeHeader(outCString, replyTo, charset); } mHeaders->ExtractHeader(HEADER_NEWSGROUPS, PR_FALSE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, newgroups, charset); + mMimeConverter->DecodeMimeHeader(outCString, newgroups, charset); } mHeaders->ExtractHeader(HEADER_FOLLOWUP_TO, PR_FALSE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, followUpTo, charset); + mMimeConverter->DecodeMimeHeader(outCString, followUpTo, charset); } mHeaders->ExtractHeader(HEADER_MESSAGE_ID, PR_FALSE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, messageId, charset); + mMimeConverter->DecodeMimeHeader(outCString, messageId, charset); } mHeaders->ExtractHeader(HEADER_REFERENCES, PR_FALSE, getter_Copies(outCString)); if (outCString) { - mimeConverter->DecodeMimeHeader(outCString, references, charset); + mMimeConverter->DecodeMimeHeader(outCString, references, charset); } if (! replyTo.IsEmpty()) @@ -1879,7 +1891,7 @@ NS_IMETHODIMP QuotingOutputStreamListener::OnStopRequest(nsIRequest *request, ns if (outCString) { nsAutoString from; - mimeConverter->DecodeMimeHeader(outCString, from, charset); + mMimeConverter->DecodeMimeHeader(outCString, from, charset); compFields->SetTo(from.get()); } } @@ -2053,7 +2065,8 @@ nsMsgCompose::QuoteOriginalMessage(const char *originalMsgURI, PRInt32 what) // // Create the consumer output stream.. this will receive all the HTML from libmime mQuoteStreamListener = - new QuotingOutputStreamListener(originalMsgURI, what != 1, !bAutoQuote, m_identity); + new QuotingOutputStreamListener(originalMsgURI, what != 1, !bAutoQuote, m_identity, + m_compFields->GetCharacterSet(), mCharsetOverride); if (!mQuoteStreamListener) { diff --git a/mailnews/compose/src/nsMsgCompose.h b/mailnews/compose/src/nsMsgCompose.h index e6328a003c4c..7dfaabda1157 100644 --- a/mailnews/compose/src/nsMsgCompose.h +++ b/mailnews/compose/src/nsMsgCompose.h @@ -55,6 +55,7 @@ #include "nsIAbCard.h" #include "nsIWebProgressListener.h" #include "nsIAbDirectory.h" +#include "nsIMimeConverter.h" // Forward declares class QuotingOutputStreamListener; @@ -165,7 +166,9 @@ public: QuotingOutputStreamListener(const char *originalMsgURI, PRBool quoteHeaders, PRBool headersOnly, - nsIMsgIdentity *identity); + nsIMsgIdentity *identity, + const char *charset, + PRBool charetOverride); virtual ~QuotingOutputStreamListener(void); NS_DECL_ISUPPORTS @@ -186,6 +189,7 @@ private: nsCOMPtr mHeaders; nsCOMPtr mIdentity; nsString mCiteReference; + nsCOMPtr mMimeConverter; }; ////////////////////////////////////////////////////////////////////////////////////