fix 16360 auto save of drafts, sr=mscott

This commit is contained in:
bienvenu%nventure.com 2005-01-19 01:16:42 +00:00
Родитель 51faac852b
Коммит 089451abb8
7 изменённых файлов: 67 добавлений и 18 удалений

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

@ -97,6 +97,8 @@ var gReceiptOptionChanged;
var gAttachVCardOptionChanged;
var gMailSession;
var gAutoSaveInterval;
var gAutoSaveTimeout;
const kComposeAttachDirPrefName = "mail.compose.attach.dir";
@ -227,6 +229,8 @@ var gComposeRecyclingListener = {
var event = document.createEvent('Events');
event.initEvent('compose-window-close', false, true);
document.getElementById("msgcomposeWindow").dispatchEvent(event);
if (gAutoSaveTimeout)
clearTimeout(gAutoSaveTimeout);
},
onReopen: function(params) {
@ -1376,6 +1380,12 @@ function ComposeStartup(recycled, aParams)
if (document.getElementById("sidebar").getAttribute("src") == "")
setTimeout(toggleAddressPicker, 0); // do this on a delay so we don't hurt perf. on bringing up a new compose window
}
gAutoSaveInterval = sPrefs.getBoolPref("mail.compose.autosave")
? sPrefs.getIntPref("mail.compose.autosaveinterval") * 60000
: 0;
if (gAutoSaveInterval)
gAutoSaveTimeout = setTimeout("AutoSave()", gAutoSaveInterval);
}
// The new, nice, simple way of getting notified when a new editor has been created
@ -1454,7 +1464,6 @@ function ComposeLoad()
// do nothing...
}
if (gLogComposePerformance)
sMsgComposeService.TimeStamp("Start initializing the compose window (ComposeLoad)", false);
@ -1514,6 +1523,8 @@ function ComposeUnload()
RemoveDirectorySettingsObserver(gCurrentAutocompleteDirectory);
if (gMsgCompose)
gMsgCompose.UnregisterStateListener(stateListener);
if (gAutoSaveTimeout)
clearTimeout(gAutoSaveTimeout);
}
function SetDocumentCharacterSet(aCharset)
@ -1762,6 +1773,7 @@ function GenericSendMessage( msgType )
msgType == nsIMsgCompDeliverMode.Later ||
msgType == nsIMsgCompDeliverMode.Save ||
msgType == nsIMsgCompDeliverMode.SaveAsDraft ||
msgType == nsIMsgCompDeliverMode.AutoSaveAsDraft ||
msgType == nsIMsgCompDeliverMode.SaveAsTemplate)
{
var fallbackCharset = new Object;
@ -3262,3 +3274,12 @@ function loadHTMLMsgPrefs()
}
} catch (e) {}
}
function AutoSave()
{
if (gMsgCompose.editor && (gContentChanged || gMsgCompose.bodyModified))
GenericSendMessage(nsIMsgCompDeliverMode.AutoSaveAsDraft);
gAutoSaveTimeout = setTimeout("AutoSave()", gAutoSaveInterval);
}

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

@ -13,7 +13,8 @@
<script type="application/x-javascript">
<![CDATA[
var _elementIDs = ["forwardMessageMode", "spellCheckBeforeSend", "strictlyMime",
"wrapLength", "mailWarnOnSendAccelKey",
"wrapLength", "mailWarnOnSendAccelKey", "autoSave",
"autoSaveInterval",
// auto complete prefs
"addressingAutocomplete", "autocompleteLDAP",
"directoriesList"];
@ -78,6 +79,12 @@
<checkbox id="mailWarnOnSendAccelKey" label="&warnOnSendAccelKey.label;"
prefstring="mail.warn_on_send_accel_key"
accesskey="&warnOnSendAccelKey.accesskey;"/>
<hbox align="center" pack="start">
<checkbox id="autoSave" label="&autoSave.label;" prefstring="mail.compose.autosave"/>
<textbox id="autoSaveInterval" size="2" preftype="int" prefstring="mail.compose.autosaveinterval"/>
<label value="&autoSaveEnd.label;"/>
</hbox>
<hbox align="center">
<label value="&wrapOutMsg.label;" accesskey="&wrapOutMsg.accesskey;" control="wrapLength"/>

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

@ -15,6 +15,8 @@
<!ENTITY useMIME.accesskey "o">
<!ENTITY warnOnSendAccelKey.label "Confirm when using keyboard shortcut to send message">
<!ENTITY warnOnSendAccelKey.accesskey "C">
<!ENTITY autoSave.label "AutoSave every">
<!ENTITY autoSaveEnd.label "minutes">
<!-- LOCALIZATION NOTE (wrapOutMsg.label): This will concatenate with "xxx characters", using a number and (char.label). -->
<!ENTITY wrapOutMsg.label "Wrap plain text messages at">
<!ENTITY wrapOutMsg.accesskey "l">

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

@ -59,7 +59,7 @@ interface nsIMsgCompSaveType {
typedef long MSG_DeliverMode;
[scriptable, uuid(f338eba4-7530-11d3-8833-006008948010)]
[scriptable, uuid(a9f27dd7-8f89-4de3-8fbf-41b789c16ee5)]
interface nsIMsgCompDeliverMode {
const long Now = 0;
const long Later = 1;
@ -68,6 +68,7 @@ interface nsIMsgCompDeliverMode {
const long SaveAsDraft = 4;
const long SaveAsTemplate = 5;
const long SendUnsent = 6;
const long AutoSaveAsDraft = 7;
};
[scriptable, uuid(f38ea280-e090-11d3-a449-e3153319347c)]

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

@ -879,6 +879,13 @@ nsresult nsMsgCompose::_SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity *ide
if (!composeSendListener)
return NS_ERROR_OUT_OF_MEMORY;
// right now, AutoSaveAsDraft is identical to SaveAsDraft as
// far as the msg send code is concerned. This way, we don't have
// to add an nsMsgDeliverMode for autosaveasdraft, and add cases for
// it in the msg send code.
if (deliverMode == nsIMsgCompDeliverMode::AutoSaveAsDraft)
deliverMode = nsIMsgCompDeliverMode::SaveAsDraft;
composeSendListener->SetMsgCompose(this);
composeSendListener->SetDeliverMode(deliverMode);
@ -1003,25 +1010,29 @@ NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity
if (progress)
{
mProgress = progress;
nsAutoString msgSubject;
m_compFields->GetSubject(msgSubject);
PRBool showProgress = PR_FALSE;
nsCOMPtr<nsIPrefBranch> prefBranch (do_GetService(NS_PREFSERVICE_CONTRACTID));
if (prefBranch)
if (deliverMode != nsIMsgCompDeliverMode::AutoSaveAsDraft)
{
prefBranch->GetBoolPref("mailnews.show_send_progress", &showProgress);
if (showProgress)
{
nsCOMPtr<nsIMsgComposeProgressParams> params = do_CreateInstance(NS_MSGCOMPOSEPROGRESSPARAMS_CONTRACTID, &rv);
if (NS_FAILED(rv) || !params)
return NS_ERROR_FAILURE;
nsAutoString msgSubject;
m_compFields->GetSubject(msgSubject);
params->SetSubject(msgSubject.get());
params->SetDeliveryMode(deliverMode);
PRBool showProgress = PR_FALSE;
nsCOMPtr<nsIPrefBranch> prefBranch (do_GetService(NS_PREFSERVICE_CONTRACTID));
if (prefBranch)
{
prefBranch->GetBoolPref("mailnews.show_send_progress", &showProgress);
if (showProgress)
{
nsCOMPtr<nsIMsgComposeProgressParams> params = do_CreateInstance(NS_MSGCOMPOSEPROGRESSPARAMS_CONTRACTID, &rv);
if (NS_FAILED(rv) || !params)
return NS_ERROR_FAILURE;
params->SetSubject(msgSubject.get());
params->SetDeliveryMode(deliverMode);
mProgress->OpenProgressDialog(m_window, aMsgWindow, "chrome://messenger/content/messengercompose/sendProgress.xul", params);
mProgress->GetPrompter(getter_AddRefs(prompt));
mProgress->OpenProgressDialog(m_window, aMsgWindow, "chrome://messenger/content/messengercompose/sendProgress.xul", params);
mProgress->GetPrompter(getter_AddRefs(prompt));
}
}
}
@ -1099,6 +1110,7 @@ NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_DeliverMode deliverMode, nsIMsgIdentity
case nsIMsgCompDeliverMode::Later:
nsMsgDisplayMessageByID(prompt, NS_MSG_UNABLE_TO_SEND_LATER);
break;
case nsIMsgCompDeliverMode::AutoSaveAsDraft:
case nsIMsgCompDeliverMode::SaveAsDraft:
nsMsgDisplayMessageByID(prompt, NS_MSG_UNABLE_TO_SAVE_DRAFT);
break;

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

@ -401,6 +401,7 @@ NS_IMETHODIMP nsMsgSendReport::DisplayReport(nsIPrompt *prompt, PRBool showError
preStrId = NS_MSG_UNABLE_TO_SEND_LATER;
break;
case nsIMsgCompDeliverMode::AutoSaveAsDraft:
case nsIMsgCompDeliverMode::SaveAsDraft:
titleID = NS_MSG_SAVE_DRAFT_TITLE;
preStrId = NS_MSG_UNABLE_TO_SAVE_DRAFT;

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

@ -71,6 +71,9 @@ pref("mailnews.headers.showUserAgent", false);
// is displayed in the message pane or not...
pref("mailnews.headers.showOrganization", false);
// mailnews tcp read+write timeout in seconds.
pref("mailnews.tcptimeout", 60);
// Mail server preferences, pop by default
pref("mail.server_type", 0); // 0 pop, 1 imap,
// (Unix only:)
@ -152,6 +155,8 @@ pref("mail.html_compose", true);
// this will show up in the address picker in the compose window
// examples: "X-Face" or "Approved,X-No-Archive"
pref("mail.compose.other.header", "");
pref("mail.compose.autosave", false);
pref("mail.compose.autosaveinterval", 5); // in minutes
pref("mail.fcc_folder", "");
pref("mail.encrypt_outgoing_mail", false);
pref("mail.crypto_sign_outgoing_mail", false);