// This method is called during the sending of message from nsMsgCompose::CheckAndPopulateRecipients() nsresult nsMsgCompFields::SplitRecipientsEx(const nsAString &recipients, nsTArray<nsMsgRecipient> &aResult) { nsresult rv; nsCOMPtr<nsIMsgHeaderParser> parser = do_GetService(NS_MAILNEWS_MIME_HEADER_PARSER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMimeConverter> converter = do_GetService(NS_MIME_CONVERTER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCAutoString recipientsStr; char *names; char *addresses; PRUint32 numAddresses; CopyUTF16toUTF8(recipients, recipientsStr); rv = parser->ParseHeaderAddresses(recipientsStr.get(), &names, &addresses, &numAddresses); if (NS_SUCCEEDED(rv)) { char *pNames = names; char *pAddresses = addresses; for (PRUint32 i = 0; i < numAddresses; ++i) { nsCString fullAddress; nsCString decodedName; converter->DecodeMimeHeaderToCharPtr(pNames, GetCharacterSet(), false, true, getter_Copies(decodedName)); rv = parser->MakeFullAddressString((!decodedName.IsEmpty() ? decodedName.get() : pNames), pAddresses, getter_Copies(fullAddress)); nsMsgRecipient msgRecipient; rv = ConvertToUnicode("UTF-8", NS_SUCCEEDED(rv) ? fullAddress.get() : pAddresses, msgRecipient.mAddress); if (NS_FAILED(rv)) return rv; rv = ConvertToUnicode("UTF-8", pAddresses, msgRecipient.mEmail); if (NS_FAILED(rv)) return rv; aResult.AppendElement(msgRecipient); pNames += PL_strlen(pNames) + 1; pAddresses += PL_strlen(pAddresses) + 1; } PR_FREEIF(names); PR_FREEIF(addresses); } return rv; }
NS_IMETHODIMP nsMsgCompFields::CheckCharsetConversion(char **fallbackCharset, bool *_retval) { NS_ENSURE_ARG_POINTER(_retval); nsCAutoString headers; for (PRInt16 i = 0; i < MSG_MAX_HEADERS; i++) headers.Append(m_headers[i]); // charset conversion check *_retval = nsMsgI18Ncheck_data_in_charset_range(GetCharacterSet(), NS_ConvertUTF8toUTF16(headers.get()).get(), fallbackCharset); return NS_OK; }
NS_IMETHODIMP nsMsgCompFields::ConvertBodyToPlainText() { nsresult rv = NS_OK; if (!m_body.IsEmpty()) { nsAutoString body; rv = GetBody(body); if (NS_SUCCEEDED(rv)) { rv = ConvertBufToPlainText(body, UseFormatFlowed(GetCharacterSet())); if (NS_SUCCEEDED(rv)) rv = SetBody(body); } } return rv; }
NS_IMETHODIMP WebBrowserPersistLocalDocument::GetCharacterSet(nsACString& aCharSet) { GetCharacterSet()->Name(aCharSet); return NS_OK; }
// This method is called during the creation of a new window. NS_IMETHODIMP nsMsgCompFields::SplitRecipients(const nsAString &aRecipients, bool aEmailAddressOnly, PRUint32 *aLength, PRUnichar*** aResult) { NS_ENSURE_ARG_POINTER(aLength); NS_ENSURE_ARG_POINTER(aResult); *aLength = 0; *aResult = nsnull; nsresult rv; nsCOMPtr<nsIMsgHeaderParser> parser = do_GetService(NS_MAILNEWS_MIME_HEADER_PARSER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMimeConverter> converter = do_GetService(NS_MIME_CONVERTER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); char * names; char * addresses; PRUint32 numAddresses; rv = parser->ParseHeaderAddresses(NS_ConvertUTF16toUTF8(aRecipients).get(), &names, &addresses, &numAddresses); if (NS_SUCCEEDED(rv)) { PRUint32 i = 0; char * pNames = names; char * pAddresses = addresses; PRUnichar** result = (PRUnichar**) NS_Alloc(sizeof(PRUnichar*) * numAddresses); if (!result) return NS_ERROR_OUT_OF_MEMORY; for (i = 0; i < numAddresses; ++i) { nsCString fullAddress; nsAutoString recipient; if (!aEmailAddressOnly) { nsCString decodedName; converter->DecodeMimeHeaderToCharPtr(pNames, GetCharacterSet(), false, true, getter_Copies(decodedName)); rv = parser->MakeFullAddressString((!decodedName.IsEmpty() ? decodedName.get() : pNames), pAddresses, getter_Copies(fullAddress)); } if (NS_SUCCEEDED(rv) && !aEmailAddressOnly) rv = ConvertToUnicode("UTF-8", fullAddress, recipient); else rv = ConvertToUnicode("UTF-8", nsDependentCString(pAddresses), recipient); if (NS_FAILED(rv)) break; result[i] = ToNewUnicode(recipient); if (!result[i]) { rv = NS_ERROR_OUT_OF_MEMORY; break; } pNames += PL_strlen(pNames) + 1; pAddresses += PL_strlen(pAddresses) + 1; } if (NS_FAILED(rv)) { NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, result); } else { *aResult = result; *aLength = numAddresses; } PR_FREEIF(names); PR_FREEIF(addresses); } return rv; }