Fix the window close problem for saveAs in .js, enable the charset alert in .cpp and some clean up,

bug 89655, r=ducarroz, sr=bienvenu.
This commit is contained in:
nhotta%netscape.com 2001-10-23 23:25:02 +00:00
Родитель 037bd4facf
Коммит 8465fb9bac
6 изменённых файлов: 58 добавлений и 30 удалений

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

@ -522,8 +522,11 @@ PRBool nsMsgI18N7bit_data_part(const char *charset, const char *inString, const
return result;
}
PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString& inString)
PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const PRUnichar* inString)
{
if (!charset || !*charset || !inString || !*inString)
return PR_TRUE;
nsAutoString aCharset; aCharset.AssignWithConversion(charset);
nsresult res;
PRBool result = PR_TRUE;
@ -536,15 +539,15 @@ PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString&
// get an unicode converter
res = ccm->GetUnicodeEncoder(&aCharset, getter_AddRefs(encoder));
if(NS_SUCCEEDED(res)) {
const PRUnichar *originalPtr = inString.get();
PRInt32 originalLen = inString.Length();
const PRUnichar *originalPtr = inString;
PRInt32 originalLen = nsCRT::strlen(inString);
PRUnichar *currentSrcPtr = NS_CONST_CAST(PRUnichar *, originalPtr);
char localBuff[512];
PRInt32 consumedLen = 0;
PRInt32 srcLen;
PRInt32 dstLength;
// convert to unicode
// convert from unicode
while (consumedLen < originalLen) {
srcLen = originalLen - consumedLen;
dstLength = 512;

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

@ -91,7 +91,7 @@ NS_MSG_BASE PRBool nsMsgI18N7bit_data_part(const char *charset, const char *s
* @return True if the string can be converted within the charset range.
* False if one or more characters cannot be converted to the target charset.
*/
NS_MSG_BASE PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const nsString& inString);
NS_MSG_BASE PRBool nsMsgI18Ncheck_data_in_charset_range(const char *charset, const PRUnichar* inString);
/**
* Return accept language.

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

@ -61,6 +61,7 @@ var contentChanged = false;
var gCurrentIdentity = null;
var defaultSaveOperation = "draft";
var sendOrSaveOperationInProgress = false;
var gCloseWindowAfterSave = false;
var isOffline = false;
var sessionAdded = false;
var currentAutocompleteDirectory = null;
@ -112,7 +113,12 @@ var stateListener = {
{
contentChanged = false;
msgCompose.bodyModified = false;
if (gCloseWindowAfterSave)
msgCompose.CloseWindow();
}
gCloseWindowAfterSave = false;
},
SaveInFolderDone: function(folderURI) {
@ -1843,8 +1849,9 @@ function ComposeCanClose()
case 0: //Save
if (LastToClose())
NotifyQuitApplication();
gCloseWindowAfterSave = true;
SaveAsDraft();
break;
return false;
case 1: //Cancel
return false;
case 2: //Don't Save

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

@ -255,24 +255,54 @@ mime_generate_headers (nsMsgCompFields *fields,
const char* pReference;
const char* pOtherHdr;
nsCAutoString headerBuf; // accumulate header strings for charset conversion check
headerBuf.Truncate(0);
NS_ASSERTION (fields, "null fields");
if (!fields)
return nsnull;
/* Multiply by 3 here to make enough room for MimePartII conversion */
pFrom = fields->GetFrom(); if (pFrom) size += 3 * PL_strlen (pFrom);
pReplyTo =fields->GetReplyTo(); if (pReplyTo) size += 3 * PL_strlen (pReplyTo);
pTo = fields->GetTo(); if (pTo) size += 3 * PL_strlen (pTo);
pCc = fields->GetCc(); if (pCc) size += 3 * PL_strlen (pCc);
pFrom = fields->GetFrom();
if (pFrom)
headerBuf.Append(pFrom);
pReplyTo =fields->GetReplyTo();
if (pReplyTo)
headerBuf.Append(pReplyTo);
pTo = fields->GetTo();
if (pTo)
headerBuf.Append(pTo);
pCc = fields->GetCc();
if (pCc)
headerBuf.Append(pCc);
pNewsGrp = fields->GetNewsgroups(); if (pNewsGrp) size += 3 * PL_strlen (pNewsGrp);
pFollow= fields->GetFollowupTo(); if (pFollow) size += 3 * PL_strlen (pFollow);
pSubject = fields->GetSubject(); if (pSubject) size += 3 * PL_strlen (pSubject);
pReference = fields->GetReferences(); if (pReference) size += 3 * PL_strlen (pReference);
pOrg= fields->GetOrganization(); if (pOrg) size += 3 * PL_strlen (pOrg);
pSubject = fields->GetSubject();
if (pSubject)
headerBuf.Append(pSubject);
pReference = fields->GetReferences(); if (pReference) size += 3 * PL_strlen (pReference);
pOrg= fields->GetOrganization();
if (pOrg)
headerBuf.Append(pOrg);
pOtherHdr= fields->GetOtherRandomHeaders(); if (pOtherHdr) size += 3 * PL_strlen (pOtherHdr);
pPriority = fields->GetPriority(); if (pPriority) size += 3 * PL_strlen (pPriority);
pMessageID = fields->GetMessageId(); if (pMessageID) size += PL_strlen (pMessageID);
/* Multiply by 3 here to make enough room for MimePartII conversion */
size += 3 * headerBuf.Length();
const char *pBcc = fields->GetBcc();
if (pBcc)
headerBuf.Append(pBcc);
// alert the user if headers contain characters out of charset range (e.g. multilingual data)
if (!nsMsgI18Ncheck_data_in_charset_range(charset, NS_ConvertUTF8toUCS2(headerBuf.get()).get())) {
PRBool proceedTheSend;
rv = nsMsgAskBooleanQuestionByID(aPrompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
if (!proceedTheSend) {
*status = NS_ERROR_ABORT;
return nsnull;
}
}
/* Add a bunch of slop for the static parts of the headers. */
/* size += 2048; */
size += 2560;
@ -643,18 +673,6 @@ mime_generate_headers (nsMsgCompFields *fields,
}
if (pSubject && *pSubject) {
// alert the user if the subject contains characters out of charset range (e.g. multilingual data)
nsAutoString u; // need to convert from UTF-8 to UCS2
if (NS_OK == nsMsgI18NConvertToUnicode(nsCAutoString(msgCompHeaderInternalCharset()), nsCAutoString(pSubject), u) &&
!nsMsgI18Ncheck_data_in_charset_range(charset, u) &&
nsIMsgSend::nsMsgDeliverNow == deliver_mode) {
PRBool proceedTheSend;
rv = nsMsgAskBooleanQuestionByID(aPrompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
if (!proceedTheSend) {
*status = NS_ERROR_BUT_DONT_SHOW_ALERT;
return nsnull;
}
}
char *convbuf;
PUSH_STRING ("Subject: ");

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

@ -888,12 +888,12 @@ nsresult nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *ide
if (NS_SUCCEEDED(rv) && nsnull != outCString)
{
// body contains multilingual data, confirm send to the user
if (NS_ERROR_UENC_NOMAPPING == rv && nsIMsgSend::nsMsgDeliverNow == deliverMode) {
if (NS_ERROR_UENC_NOMAPPING == rv) {
PRBool proceedTheSend;
rv = nsMsgAskBooleanQuestionByID(prompt, NS_MSG_MULTILINGUAL_SEND, &proceedTheSend);
if (!proceedTheSend) {
PR_FREEIF(outCString);
return NS_ERROR_BUT_DONT_SHOW_ALERT;
return NS_ERROR_ABORT;
}
}
m_compFields->SetBody(outCString);

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

@ -1392,7 +1392,7 @@ nsMsgComposeAndSend::GetBodyFromEditor()
PR_FREEIF(outCString);
rv = nsMsgI18NSaveAsCharset(TEXT_PLAIN, aCharset, bodyText, &outCString);
if (NS_ERROR_UENC_NOMAPPING == rv && nsIMsgSend::nsMsgDeliverNow == m_deliver_mode) {
if (NS_ERROR_UENC_NOMAPPING == rv) {
PRBool proceedTheSend;
nsCOMPtr<nsIPrompt> prompt;
GetDefaultPrompt(getter_AddRefs(prompt));
@ -1401,7 +1401,7 @@ nsMsgComposeAndSend::GetBodyFromEditor()
PR_FREEIF(attachment1_body);
PR_FREEIF(outCString);
Recycle(bodyText);
return NS_ERROR_BUT_DONT_SHOW_ALERT;
return NS_ERROR_ABORT;
}
}
}