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.
This commit is contained in:
nhotta%netscape.com 2002-02-12 22:21:11 +00:00
Родитель 0c3f8b9a6b
Коммит dfc650cdbf
2 изменённых файлов: 33 добавлений и 16 удалений

Просмотреть файл

@ -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<nsIMsgHeaderParser> 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<nsIMimeConverter> 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)
{

Просмотреть файл

@ -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<nsIMimeHeaders> mHeaders;
nsCOMPtr<nsIMsgIdentity> mIdentity;
nsString mCiteReference;
nsCOMPtr<nsIMimeConverter> mMimeConverter;
};
////////////////////////////////////////////////////////////////////////////////////