Index: mailnews/mailnews.js =================================================================== RCS file: /cvsroot/mozilla/mailnews/mailnews.js,v retrieving revision 3.249 diff -u -r3.249 mailnews.js --- mailnews/mailnews.js 9 Aug 2005 00:36:31 -0000 3.249 +++ mailnews/mailnews.js 15 Aug 2005 01:12:06 -0000 @@ -196,6 +196,7 @@ pref("mailnews.reply_header_locale", ""); pref("mailnews.reply_header_authorwrote", "chrome://messenger/locale/messengercompose/composeMsgs.properties"); pref("mailnews.reply_header_ondate", "chrome://messenger/locale/messengercompose/composeMsgs.properties"); +pref("mailnews.clobber_list_reply", false); // separator to separate between date and author pref("mailnews.reply_header_separator", ", "); --- mailnews/compose/src/nsMsgCompose.cpp.old 2006-08-14 09:32:18.000000000 +0200 +++ mailnews/compose/src/nsMsgCompose.cpp 2006-08-14 09:44:25.000000000 +0200 @@ -2106,6 +2106,7 @@ NS_IMETHODIMP QuotingOutputStreamListene nsAutoString messageId; nsAutoString references; nsAutoString listPost; + PRBool clobberListReply = PR_FALSE; nsXPIDLCString outCString; PRBool needToRemoveDup = PR_FALSE; if (!mMimeConverter) @@ -2115,6 +2116,77 @@ NS_IMETHODIMP QuotingOutputStreamListene } nsXPIDLCString charset; compFields->GetCharacterSet(getter_Copies(charset)); + + nsCOMPtr prefBranch (do_GetService(NS_PREFSERVICE_CONTRACTID)); + if (prefBranch) + prefBranch->GetBoolPref("mailnews.clobber_list_reply", &clobberListReply); + + mHeaders->ExtractHeader(HEADER_REPLY_TO, PR_FALSE, getter_Copies(outCString)); + if (outCString) + mMimeConverter->DecodeMimeHeader(outCString, replyTo, charset); + + mHeaders->ExtractHeader(HEADER_MAIL_REPLY_TO, PR_TRUE, getter_Copies(outCString)); + if (outCString) + mMimeConverter->DecodeMimeHeader(outCString, mailReplyTo, charset); + + if (clobberListReply) { + /* the 'Al fix'. Try to fake up Mail-Reply-To: and Mail-Followup-To: headers if + * we don't have any, and if it looks like it came via a mailing list. + * + * Currently only supports List-Post header. + */ + + mHeaders->ExtractHeader(HEADER_MAIL_FOLLOWUP_TO, PR_TRUE, getter_Copies(outCString)); + if (outCString) + mMimeConverter->DecodeMimeHeader(outCString, mailFollowupTo, charset); + + if (mailFollowupTo.IsEmpty()) { + nsAutoString mailingList; + + mHeaders->ExtractHeader(HEADER_LIST_POST, PR_TRUE, getter_Copies(outCString)); + if (outCString) + { + mMimeConverter->DecodeMimeHeader(outCString, mailingList, charset); + /* s//$1/; */ + if (StringBeginsWith(mailingList, NS_LITERAL_STRING(""))) { + + mailingList = Substring(mailingList, 8, mailingList.Length() - 9); + } + } + + mailFollowupTo = mailingList; + } + + if (mailReplyTo.IsEmpty()) { + nsAutoString from; + nsAutoString xReplyTo; + + mHeaders->ExtractHeader(HEADER_FROM, PR_FALSE, getter_Copies(outCString)); + if (outCString) + { + mMimeConverter->DecodeMimeHeader(outCString, from, charset); + } + + mHeaders->ExtractHeader(HEADER_X_REPLY_TO, PR_FALSE, getter_Copies(outCString)); + if (outCString) + { + mMimeConverter->DecodeMimeHeader(outCString, xReplyTo, charset); + } + + if (replyTo == mailFollowupTo) { + if (!xReplyTo.IsEmpty()) { + mailReplyTo = xReplyTo; + } + else { + mailReplyTo = from; + } + } + else { + mailReplyTo = replyTo; + } + } + } if (type == nsIMsgCompType::ReplyAll) { @@ -2129,11 +2201,13 @@ NS_IMETHODIMP QuotingOutputStreamListene { mMimeConverter->DecodeMimeHeader(outCString, cc, charset); } - - mHeaders->ExtractHeader(HEADER_MAIL_FOLLOWUP_TO, PR_TRUE, getter_Copies(outCString)); - if (outCString) - { - mMimeConverter->DecodeMimeHeader(outCString, mailFollowupTo, charset); + + if (!clobberListReply) { // else we've already looked this up earlier + mHeaders->ExtractHeader(HEADER_MAIL_FOLLOWUP_TO, PR_TRUE, getter_Copies(outCString)); + if (outCString) + { + mMimeConverter->DecodeMimeHeader(outCString, mailFollowupTo, charset); + } } if (! mailFollowupTo.IsEmpty()) @@ -2174,18 +2248,6 @@ NS_IMETHODIMP QuotingOutputStreamListene } } - mHeaders->ExtractHeader(HEADER_REPLY_TO, PR_FALSE, getter_Copies(outCString)); - if (outCString) - { - mMimeConverter->DecodeMimeHeader(outCString, replyTo, charset); - } - - mHeaders->ExtractHeader(HEADER_MAIL_REPLY_TO, PR_TRUE, getter_Copies(outCString)); - if (outCString) - { - mMimeConverter->DecodeMimeHeader(outCString, mailReplyTo, charset); - } - mHeaders->ExtractHeader(HEADER_NEWSGROUPS, PR_FALSE, getter_Copies(outCString)); if (outCString) {