odoo/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/exportTools.js

242 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].
getService(Components.interfaces.nsIStringBundleService);
var mboximportbundle = MBstrBundleService.createBundle("chrome://openerp_plugin/locale/mboximport.properties");
function saveMsgAsEML(msguri,file,append,uriArray,hdrArray,fileArray) {
var myEMLlistner = {
scriptStream : null,
emailtext : "",
QueryInterface : function(iid) {
if (iid.equals(Components.interfaces.nsIStreamListener) ||
iid.equals(Components.interfaces.nsIMsgHeaderSink) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
return 0;
},
onStartRequest : function (aRequest, aContext) {
this.scriptStream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
},
onStopRequest : function (aRequest, aContext, aStatusCode) {
this.scriptStream = null;
if (append) {
if (this.emailtext != "") {
var data = this.emailtext + "\n";
// Some Imap servers don't add to the message the "From" prologue
if (data && ! data.match(/^From/)) {
var now = new Date;
var prologue = "From - " + now.toString() + "\n";
data = prologue+data;
}
data = IETescapeBeginningFrom(data);
}
var fileClone = file.clone();
IETwriteDataOnDisk(fileClone,data,true,this.sub,null);
}
else {
if (! hdrArray)
var sub = getSubjectForHdr(hdr);
else {
var parts = hdrArray[IETexported].split("§][§^^§");
var sub = parts[4];
}
var data = this.emailtext.replace(/^From.+\r?\n]/, "");
data = IETescapeBeginningFrom(data);
var clone = file.clone();
// The name is taken from the subject "corrected"
clone.append(sub+".eml");
clone.createUnique(0,0644);
var time = (hdr.dateInSeconds)*1000;
IETwriteDataOnDisk(clone,data,false,null,time);
}
IETexported = IETexported + 1;
IETwritestatus(mboximportbundle.GetStringFromName("exported")+" "+IETexported+" "+mboximportbundle.GetStringFromName("msgs")+" "+IETtotal);
if (IETexported < IETtotal) {
if (fileArray) {
var nextUri = uriArray[IETexported];
var nextFile = fileArray[IETexported];
}
else if (! hdrArray) {
var nextUri = uriArray[IETexported];
var nextFile = file;
}
else {
parts = hdrArray[IETexported].split("§][§^^§");
var nextUri = parts[5];
var nextFile = file;
}
saveMsgAsEML(nextUri,nextFile,append,uriArray,hdrArray,fileArray);
}
else {
IETexported = 0;
IETtotal = 0;
}
},
onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
this.scriptStream.setInputStream(aInputStream);
var chunk = this.scriptStream.readBytes(aCount);
this.emailtext += chunk;
}
};
var mms = messenger.messageServiceFromURI(msguri).QueryInterface(Components.interfaces.nsIMsgMessageService);
var hdr = mms.messageURIToMsgHdr(msguri);
mms.streamMessage(msguri, myEMLlistner, msgWindow, null, false, null);
}
function nametoascii(str) {
if (! gPrefBranch.getBoolPref("mboximport.export.filenames_toascii")) {
str = str.replace(/[\x00-\x19]/g,"_");
return str.replace(/[\/\\:,<>*\?\"\|]/g,"_");
}
if (str)
str = str.replace(/[^a-zA-Z0-9]/g,"_");
else
str = "Undefinied_or_empty";
return str;
}
function IETwriteDataOnDisk(file,data,append,name,time) {
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
if (append) {
file.append(name);
foStream.init(file, 0x02 | 0x08 | 0x10, 0664, 0); // write, create, append
}
else
foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
if (data)
foStream.write(data,data.length);
foStream.close();
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
if (time && prefs.getBoolPref("mboximport.export.set_filetime"))
file.lastModifiedTime = time;
}
function IETescapeBeginningFrom(data) {
// Workaround to fix the "From " in beginning line problem in body messages
// See https://bugzilla.mozilla.org/show_bug.cgi?id=119441 and
// https://bugzilla.mozilla.org/show_bug.cgi?id=194382
// TB2 has uncorrect beahviour with html messages
// This is not very fine, but I didnt' find anything better...
var datacorrected = data.replace(/\nFrom /g, "\n From ");
return datacorrected;
}
function getPredefinedFolder(type) {
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
// type 0 = folder
// type 1 = all messages
// type 2 = selected messages
var use_dir = "mboximport.exportMSG.use_dir";
var dirService = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).get("Home", Components.interfaces.nsIFile);
var homeDir = dirService.path;
var dir_path = ((homeDir.search(/\\/) != -1) ? homeDir + "\\" : homeDir + "/")
try {
var localFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
localFile.initWithPath(dir_path);
return localFile;
}
catch(e) {
return null;
}
}
function getSubjectForHdr(hdr) {
var emlNameType = gPrefBranch.getIntPref("mboximport.exportEML.filename_format");
var mustcorrectname = gPrefBranch.getBoolPref("mboximport.export.filenames_toascii");
var subMaxLen = gPrefBranch.getIntPref("mboximport.subject.max_length")-1;
if (hdr.mime2DecodedSubject)
var subj = hdr.mime2DecodedSubject.substring(0, subMaxLen);
else
var subj =IETnosub;
subj = nametoascii(subj);
var dateInSec = hdr.dateInSeconds;
var msgDate8601string = dateInSecondsTo8601(dateInSec);
var key = hdr.messageKey;
if (emlNameType == 2) {
var pattern = gPrefBranch.getCharPref("mboximport.export.filename_pattern");
pattern = pattern.replace("%s",subj);
pattern = pattern.replace("%k",key);
pattern = pattern.replace("%d", msgDate8601string);
pattern = pattern.replace(/-%e/g, "");
pattern = pattern.replace(/[\x00-\x19]/g,"_");
var fname = pattern;
}
else {
var fname = msgDate8601string+"-"+subj+"-"+hdr.messageKey;
}
setFileName(fname)
fname = fname.replace(/[\x00-\x19]/g,"_");
if (mustcorrectname)
fname = nametoascii(fname);
else
fname = fname.replace(/[\/\\:,<>*\?\"\|]/g,"_");
return fname;
}
function dateInSecondsTo8601(secs) {
var addTime = gPrefBranch.getBoolPref("mboximport.export.filenames_addtime");
var msgDate = new Date(secs*1000);
var msgDate8601 = msgDate.getFullYear();
if (msgDate.getMonth() < 9)
var month = "0"+(msgDate.getMonth()+1);
else
var month = msgDate.getMonth()+1;
if (msgDate.getDate() < 10)
var day = "0"+ msgDate.getDate();
else
var day = msgDate.getDate();
var msgDate8601string = msgDate8601.toString()+month.toString()+day.toString();
if (addTime && gPrefBranch.getIntPref("mboximport.exportEML.filename_format") == 2) {
if (msgDate.getHours() < 10)
var hours = "0"+msgDate.getHours();
else
var hours = msgDate.getHours();
if (msgDate.getMinutes() < 10)
var min = "0"+msgDate.getMinutes();
else
var min = msgDate.getMinutes();
msgDate8601string += "-"+ hours.toString() + min.toString();
}
return msgDate8601string;
}
function IETwritestatus(text) {
document.getElementById("statusText").setAttribute("label", text);
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
var delay = prefs.getIntPref("mboximport.delay.clean_statusbar");
if (delay > 0)
window.setTimeout(function(){IETdeletestatus(text);}, delay);
}
function IETdeletestatus(text) {
if (document.getElementById("statusText").getAttribute("label") == text)
document.getElementById("statusText").setAttribute("label", "");
}