I made a new, simple, extension for changing the default file type for saved e-mail messages after BuBB1eS asked about it in #maildev. You can change the type by going to the Preferences (Tools -> Add-ons -> Options under File Type Selector). You should change it to only one of the following: txt, eml, html. It will work if the period is included in the preference, too. Let me know if you want to localize it; there are only two strings: “File Type Selector Preferences” and “Default extension for saved e-mail messages (ex txt, html, or eml)”. 😉
You can read about it and download it here.
How it works
It overrides the SaveAsFile function in mail/base/content/mailCommands.js from:
function SaveAsFile(uri) { if (uri) { var filename = null; try { var subject = messenger.messageServiceFromURI(uri) .messageURIToMsgHdr(uri).mime2DecodedSubject; filename = GenerateValidFilename(subject, ".eml"); } catch (ex) {} messenger.saveAs(uri, true, null, filename); } }
to:
function mySaveAsFile(aUri) {
var type;
try {
// get the preference for the default extension type
var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService)
.getBranch("extensions.filetypeselector.")
.QueryInterface(Components.interfaces.nsIPrefBranch2);
type = prefBranch.getCharPref("defaultExtension");
if (type.indexOf(".") == -1)
type = "." + type;
} catch(e) {}
// if there isn't a type set it to the .eml default
if (!type)
type = ".eml";
if (aUri) {
var filename = null;
try {
var subject = messenger.messageServiceFromURI(aUri)
.messageURIToMsgHdr(aUri)
.mime2DecodedSubject;
filename = GenerateValidFilename(subject, type);
} catch (ex) {}
messenger.saveAs(aUri, true, null, filename);
}
}
It overrides the SaveAsFile function by adding an overlay to both chrome://messenger/content/messenger.xul (the main TB window) and chrome://messenger/content/messageWindow.xul (the window for viewing messages) and setting an event listener that overrides the function when the window loads:
// when the window finishes loading, override the SaveAsFile function with
// the mySaveAsFile function below
window.addEventListener("load", function(e) { SaveAsFile = mySaveAsFile; }, false);
0 Comments