PK
Ak6 chrome/PK
Bk6D*ɏ^ ^ chrome/memotoothunderbird.jarPK
y3 content/PK
GX(32( ( content/bmsyncNetworkService.js// this code was written by Torisugari
var gBookmarksSynchronizerUploadService=
{
_channel:null,
_callback:null,
_data:"",
_scheme:"",
_errorData:"",
start:function(aStr,aURI,aType,aCallback)
{
if( !aStr || !aURI)
return false;
this._callback=aCallback;
this._scheme=aURI.scheme;
const ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
const stringStream=Components.classes["@mozilla.org/io/string-input-stream;1"]
.createInstance(Components.interfaces.nsIStringInputStream);
this._channel = ioService.newChannelFromURI( aURI )
.QueryInterface(Components.interfaces.nsIUploadChannel);
try{
stringStream.setData(aStr, -1);
this._channel.setUploadStream(stringStream,aType,-1);
this._channel.asyncOpen(this, null);
this._callback("send",status);
this._data=aStr;
return true;
}catch(e){window.alert("__netwerk__\n\n"+"e");}
return false;
},
cancel:function()
{
if(this._channel)
this._channel.cancel(0x804b0002);
},
onDataAvailable: function (channel, ctxt, input, sourceOffset, count){
const sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance(Components.interfaces.nsIScriptableInputStream);
sis.init(input);
this._errorData +=sis.read(count);
},
onStartRequest: function (channel, ctxt){},
onStopRequest: function (channel, ctxt, status)
{
if(this._scheme != "ftp")
{
var res=0;
try{
res = channel.QueryInterface(Components.interfaces.nsIHttpChannel)
.responseStatus;
}catch(e){}
if(res==200||res==201 || res==204)
status=0;
/*
200:OK
201:Created
204:No Content
This is an uploading channel, no need to "GET" the file contents.
*/
if(this._errorData || res==401)
status=res;
if(this._errorData && res==200)
alert(this._errorData);
}
if(this._callback)
this._callback("done",status);
}
};
var gBookmarksSynchronizerDownloadService=
{
_channel:null,
_scheme:"",
_callback:null,
_startTime:0,
_endTime:0,
streamLoader:null,
data:null,
length:null,
start:function(aURI,aCallback)
{
if( !aURI )
return false;
this._callback=aCallback;
this._scheme=aURI.scheme;
try{
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
this.streamLoader=Components.classes["@mozilla.org/network/stream-loader;1"]
.createInstance(Components.interfaces.nsIStreamLoader);
this._channel = ioService.newChannelFromURI( aURI );
if(aURI.scheme=="http" || aURI.scheme=="https")
this._channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
this.streamLoader.init(this._channel, this , null);
this._startTime=(new Date()).getTime();
}catch(e){ alert(e); return false;}
return true;
},
cancel:function()
{
if(this._channel)
this._channel.cancel(0x804b0002);
},
onStreamComplete :function ( loader , ctxt , status , resultLength , result )
{
this.data="";
this._endTime=(new Date()).getTime();
if(status==0)
{
this.length=resultLength;
if(typeof(result)=="string")
this.data=result;
else
{
while(result.length > (256*192) )
{
this.data += String.fromCharCode.apply(this,result.splice(0,256*192));
}
this.data += String.fromCharCode.apply(this,result);
}
}
if(this._scheme != "ftp")
{
var res=0;
try{
res = this._channel.QueryInterface(Components.interfaces.nsIHttpChannel)
.responseStatus;
}catch(e){}
if(res==401)
status=res;
}
if(this._callback)
this._callback("done",status);
},
get time(){
return this._endTime-this._startTime;
}
};
PK
3P` content/contents.rdf
chrome://memotoothunderbird/content/memotoothunderbirdOverlay.xulchrome://memotoothunderbird/content/memotoothunderbirdOverlayAddressBook.xulPK
S3bW# W# content/functions.js/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s){ if (s.length=="32" || s.length=="0") return s; else return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}
/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
return str;
}
function winopen(page,largeur,hauteur,chrome)
{
var top = (screen.height-hauteur)/2;
var left = (screen.width-largeur)/2;
if (top>40)
{
top = top-40;
}
if (chrome==1)
window.open(""+page,"_blank","chrome,resizable,modal,width="+largeur+",height="+hauteur+",top="+top+",left="+left);
else
{
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance();
messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger);
messenger.launchExternalURL(page);
}
}
function URLEncode(plaintext)
{
// The Javascript escape and unescape functions do not correspond
// with what browsers actually do...
var SAFECHARS = "0123456789" + // Numeric
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
"abcdefghijklmnopqrstuvwxyz" +
"-_.!~*'()"; // RFC2396 Mark characters
var HEX = "0123456789ABCDEF";
var encoded = "";
for (var i = 0; i < plaintext.length; i++ ) {
var ch = plaintext.charAt(i);
if (ch == " ") {
encoded += "+"; // x-www-urlencoded, rather than %20
} else if (SAFECHARS.indexOf(ch) != -1) {
encoded += ch;
} else {
var charCode = ch.charCodeAt(0);
if (charCode > 255) {
alert( "Unicode Character '"
+ ch
+ "' cannot be encoded using standard URL encoding.\n" +
"(URL encoding only supports 8-bit characters.)\n" +
"A space (+) will be substituted." );
encoded += "+";
} else {
encoded += "%";
encoded += HEX.charAt((charCode >> 4) & 0xF);
encoded += HEX.charAt(charCode & 0xF);
}
}
} // for
return encoded;
}PK
qsa3g*f[ [ content/importDialog.js/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
var importType = null;
var gImportMsgsBundle;
var importService = 0;
var successStr = null;
var errorStr = null;
var inputStr = null ;
var progressInfo = null;
var selectedModuleName = null;
var selLocIsHome = false ;
var addInterface = null ;
function OnLoadImportDialog()
{
gImportMsgsBundle = document.getElementById("bundle_importMsgs");
importService = Components.classes["@mozilla.org/import/import-service;1"].getService();
importService = top.importService.QueryInterface(Components.interfaces.nsIImportService);
progressInfo = { };
progressInfo.progressWindow = null;
progressInfo.importInterface = null;
progressInfo.mainWindow = window;
progressInfo.intervalState = 0;
progressInfo.importSuccess = false;
progressInfo.importType = null;
progressInfo.localFolderExists = false;
// look in arguments[0] for parameters
if (window.arguments && window.arguments.length >= 1 &&
"importType" in window.arguments[0] && window.arguments[0].importType)
{
// keep parameters in global for later
importType = window.arguments[0].importType;
progressInfo.importType = top.importType;
}
else
{
importType = "addressbook";
progressInfo.importType = "addressbook";
}
// MemotooThunderbird: DEBUT
importType = "addressbook";
progressInfo.importType = "addressbook";
// MemotooThunderbird: FIN
SetUpImportType();
// MemotooThunderbird: DEBUT
next();
next();
// MemotooThunderbird: FIN
// on startup, set the focus to the control element
// for accessibility reasons.
// if we used the wizardOverlay, we would get this for free.
// see bug #101874
document.getElementById("importFields").focus();
}
function SetUpImportType()
{
// set dialog title
var typeRadioGroup = document.getElementById("importFields");
switch (importType)
{
case "mail":
typeRadioGroup.selectedItem = document.getElementById("mailRadio");
break;
case "addressbook":
typeRadioGroup.selectedItem = document.getElementById("addressbookRadio");
break;
case "settings":
typeRadioGroup.selectedItem = document.getElementById("settingsRadio");
break;
}
ListModules();
}
function SetDivText(id, text)
{
var div = document.getElementById(id);
if (div) {
if (!div.childNodes.length) {
var textNode = document.createTextNode(text);
div.appendChild(textNode);
}
else if ( div.childNodes.length == 1 ) {
div.childNodes[0].nodeValue = text;
}
}
}
function CheckIfLocalFolderExists()
{
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
if (acctMgr) {
try {
if (acctMgr.localFoldersServer)
progressInfo.localFolderExists = true;
}
catch (ex) {
progressInfo.localFolderExists = false;
}
}
}
function GetStringBundle(aURL)
{
var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService();
stringBundleService = stringBundleService.QueryInterface(Components.interfaces.nsIStringBundleService);
var stringBundle = stringBundleService.createBundle(aURL);
if (stringBundle)
return stringBundle.QueryInterface(Components.interfaces.nsIStringBundle);
}
function ImportDialogOKButton()
{
var listbox = document.getElementById('moduleList');
var deck = document.getElementById("stateDeck");
var header = document.getElementById("header");
var progressMeterEl = document.getElementById("progressMeter");
var progressStatusEl = document.getElementById("progressStatus");
var progressTitleEl = document.getElementById("progressTitle");
// better not mess around with navigation at this point
var nextButton = document.getElementById("forward");
nextButton.setAttribute("disabled", "true");
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
if ( listbox && listbox.selectedItems && (listbox.selectedItems.length == 1) )
{
var importTypeRadioGroup = document.getElementById("importFields");
importType = importTypeRadioGroup.selectedItem.getAttribute("value");
var index = listbox.selectedItems[0].getAttribute('list-index');
var module = importService.GetModule(importType, index);
var name = importService.GetModuleName(importType, index);
selectedModuleName = name;
if (module)
{
// Fix for Bug 57839 & 85219
// We use localFoldersServer(in nsIMsgAccountManager) to check if Local Folder exists.
// We need to check localFoldersServer before importing "mail" or "settings".
// Reason: We will create an account with an incoming server of type "none" after
// importing "mail", so the localFoldersServer is valid even though the Local Folder
// is not created.
if (importType == "mail" || importType == "settings")
CheckIfLocalFolderExists();
var meterText = "";
switch(importType)
{
case "mail":
top.successStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.successStr) {
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsString);
}
top.errorStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.errorStr)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsString);
if (ImportMail( module, top.successStr, top.errorStr) == true)
{
// We think it was a success, either, we need to
// wait for the import to finish
// or we are done!
if (top.progressInfo.importInterface == null) {
ShowImportResults(true, 'Mail');
return( true);
}
else {
meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
return( true);
}
}
else
{
ShowImportResults(false, 'Mail');
// enable back and next buttons so that users can retry or pick other import options.
nextButton.removeAttribute("disabled");
backButton.removeAttribute("disabled");
return( false);
}
break;
case "addressbook":
top.successStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.successStr)
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsString);
top.errorStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.errorStr)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsString);
top.inputStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.inputStr)
top.inputStr = top.inputStr.QueryInterface( Components.interfaces.nsISupportsString);
if (ImportAddress( module, top.successStr, top.errorStr) == true) {
// We think it was a success, either, we need to
// wait for the import to finish
// or we are done!
if (top.progressInfo.importInterface == null) {
ShowImportResults(true, 'Address');
return( true);
}
else {
meterText = gImportMsgsBundle.getFormattedString('AddrProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
return( true);
}
}
else
{
ShowImportResults(false, 'Address');
// re-enable the next button, as we are here
// because the user cancelled when picking an addressbook file to import.
// enable next, so they can try again
nextButton.removeAttribute("disabled");
// also enable back button so that users can pick other import options.
backButton.removeAttribute("disabled");
return( false);
}
break;
case "settings":
var error = new Object();
error.value = null;
var newAccount = new Object();
if (!ImportSettings( module, newAccount, error))
{
if (error.value)
ShowImportResultsRaw(gImportMsgsBundle.getString('ImportSettingsFailed'), null, false);
// the user canceled the operation, shoud we dismiss
// this dialog or not?
return false;
}
else
ShowImportResultsRaw(gImportMsgsBundle.getFormattedString('ImportSettingsSuccess', [ name ]), null, true);
break;
}
}
}
return true;
}
function SetStatusText( val)
{
var progressStatus = document.getElementById("progressStatus");
progressStatus.setAttribute( "label", val);
}
function SetProgress( val)
{
var progressMeter = document.getElementById("progressMeter");
progressMeter.setAttribute( "value", val);
}
function ContinueImportCallback()
{
progressInfo.mainWindow.ContinueImport( top.progressInfo);
}
function ImportSelectionChanged()
{
var listbox = document.getElementById('moduleList');
if ( listbox && listbox.selectedItems && (listbox.selectedItems.length == 1) )
{
var index = listbox.selectedItems[0].getAttribute('list-index');
SetDivText('description', top.importService.GetModuleDescription(top.importType, index));
}
}
function CompareImportModuleName(a, b)
{
if (a.name > b.name)
return 1;
if (a.name < b.name)
return -1;
return 0;
}
function ListModules() {
if (top.importService == null)
return;
var body = document.getElementById( "moduleList");
var max = body.childNodes.length - 1;
while (max >= 0) {
body.removeChild( body.childNodes[max]);
max--;
}
var count = top.importService.GetModuleCount(top.importType);
var i;
var moduleArray = new Array(count);
for (i = 0; i < count; i++) {
moduleArray[i] = {name:top.importService.GetModuleName(top.importType, i), index:i };
}
// sort the array of modules by name, so that they'll show up in the right order
moduleArray.sort(CompareImportModuleName);
for (i = 0; i < count; i++) {
AddModuleToList(moduleArray[i].name, moduleArray[i].index);
}
}
function AddModuleToList(moduleName, index)
{
var body = document.getElementById("moduleList");
var item = document.createElement('listitem');
item.setAttribute('label', moduleName);
item.setAttribute('list-index', index);
body.appendChild(item);
}
function ContinueImport( info) {
var isMail = info.importType == 'mail' ? true : false;
var clear = true;
var deck;
var pcnt;
if (info.importInterface) {
if (!info.importInterface.ContinueImport()) {
info.importSuccess = false;
clearInterval( info.intervalState);
if (info.progressWindow != null) {
deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
info.progressWindow = null;
}
ShowImportResults(false, isMail ? 'Mail' : 'Address');
}
else if ((pcnt = info.importInterface.GetProgress()) < 100) {
clear = false;
if (info.progressWindow != null) {
if (pcnt < 5)
pcnt = 5;
SetProgress( pcnt);
if (isMail) {
var mailName = info.importInterface.GetData( "currentMailbox");
if (mailName) {
mailName = mailName.QueryInterface( Components.interfaces.nsISupportsString);
if (mailName)
SetStatusText( mailName.data);
}
}
}
}
else {
dump("*** WARNING! sometimes this shows results too early. \n");
dump(" something screwy here. this used to work fine.\n");
clearInterval( info.intervalState);
info.importSuccess = true;
if (info.progressWindow) {
deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
info.progressWindow = null;
}
ShowImportResults(true, isMail ? 'Mail' : 'Address');
}
}
if (clear) {
info.intervalState = null;
info.importInterface = null;
}
}
function ShowResults(doesWantProgress, result)
{
if (result)
{
if (doesWantProgress)
{
var deck = document.getElementById("stateDeck");
var header = document.getElementById("header");
var progressStatusEl = document.getElementById("progressStatus");
var progressTitleEl = document.getElementById("progressTitle");
var meterText = gImportMsgsBundle.getFormattedString('AddrProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
}
else
{
ShowImportResults(true, 'Address');
}
}
else
{
ShowImportResults(false, 'Address');
}
return true ;
}
function ShowImportResults(good, module)
{
// The callers seem to set 'good' to true even if there's something
// in the error log. So we should only make it a success case if
// error log/str is empty.
var modSuccess = 'Import' + module + 'Success';
var modFailed = 'Import' + module + 'Failed';
var results, title;
if (good && !errorStr.data) {
title = gImportMsgsBundle.getFormattedString(modSuccess, [ selectedModuleName ? selectedModuleName : '' ]);
results = successStr.data;
}
else if (errorStr.data) {
title = gImportMsgsBundle.getFormattedString(modFailed, [ selectedModuleName ? selectedModuleName : '' ]);
results = errorStr.data;
}
if (results && title)
ShowImportResultsRaw(title, results, good);
}
function ShowImportResultsRaw(title, results, good)
{
SetDivText("status", title);
var header = document.getElementById("header");
header.setAttribute("description", title);
dump("*** results = " + results + "\n");
attachStrings("results", results);
var deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
var nextButton = document.getElementById("forward");
nextButton.label = nextButton.getAttribute("finishedval");
nextButton.removeAttribute("disabled");
var cancelButton = document.getElementById("cancel");
cancelButton.setAttribute("disabled", "true");
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
// If the Local Folder is not existed, create it after successfully
// import "mail" and "settings"
var checkLocalFolder = (top.progressInfo.importType == 'mail' || top.progressInfo.importType == 'settings') ? true : false;
if (good && checkLocalFolder && !top.progressInfo.localFolderExists) {
var messengerMigrator = Components.classes["@mozilla.org/messenger/migrator;1"].getService(Components.interfaces.nsIMessengerMigrator);
if (messengerMigrator)
messengerMigrator.createLocalMailAccount(false);
}
}
function attachStrings(aNode, aString)
{
var attachNode = document.getElementById(aNode);
if (!aString) {
attachNode.parentNode.setAttribute("hidden", "true");
return;
}
var strings = aString.split("\n");
for (var i = 0; i < strings.length; i++) {
if (strings[i]) {
var currNode = document.createTextNode(strings[i]);
attachNode.appendChild(currNode);
var br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br');
attachNode.appendChild( br);
}
}
}
function ShowAddressComplete( good)
{
var str = null;
if (good == true) {
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ top.selectedModuleName ]);
else
str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ "" ]);
str += "\n";
str += "\n" + top.successStr.data;
}
else {
if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ top.selectedModuleName ]);
else
str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ "" ]);
str += "\n" + top.errorStr.data;
}
}
if (str != null)
alert( str);
}
function CreateNewFileSpecFromPath( inPath)
{
var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
if (file != null) {
file = file.QueryInterface( Components.interfaces.nsIFileSpec);
if (file != null) {
file.nativePath = inPath;
}
}
return( file);
}
/*
Import Settings from a specific module, returns false if it failed
and true if successful. A "local mail" account is returned in newAccount.
This is only useful in upgrading - import the settings first, then
import mail into the account returned from ImportSettings, then
import address books.
An error string is returned as error.value
*/
function ImportSettings( module, newAccount, error) {
var setIntf = module.GetImportInterface( "settings");
if (setIntf != null)
setIntf = setIntf.QueryInterface( Components.interfaces.nsIImportSettings);
if (setIntf == null) {
error.value = gImportMsgsBundle.getString('ImportSettingsBadModule');
return( false);
}
// determine if we can auto find the settings or if we need to ask the user
var location = new Object();
var description = new Object();
var result = setIntf.AutoLocate( description, location);
if (result == false) {
// In this case, we couldn't not find the settings
if (location.value != null) {
// Settings were not found, however, they are specified
// in a file, so ask the user for the settings file.
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker != null) {
var file = null;
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectSettings'), Components.interfaces.nsIFilePicker.modeOpen);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
file = CreateNewFileSpecFromPath( filePicker.file.path);
else
file = null;
}
catch(ex) {
file = null;
error.value = null;
return( false);
}
if (file != null) {
setIntf.SetLocation( file);
}
else {
error.value = null;
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
// interesting, we need to return the account that new
// mail should be imported into?
// that's really only useful for "Upgrade"
result = setIntf.Import( newAccount);
if (result == false) {
error.value = gImportMsgsBundle.getString('ImportSettingsFailed');
}
return( result);
}
function CreateNewFileSpec( inFile)
{
var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
if (file != null) {
file = file.QueryInterface( Components.interfaces.nsIFileSpec);
if (file != null) {
file.fromFileSpec( inFile);
}
}
return( file);
}
function ImportMail( module, success, error) {
if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
return( false);
}
top.progressInfo.importSuccess = false;
var mailInterface = module.GetImportInterface( "mail");
if (mailInterface != null)
mailInterface = mailInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
if (mailInterface == null) {
error.data = gImportMsgsBundle.getString('ImportMailBadModule');
return( false);
}
var loc = mailInterface.GetData( "mailLocation");
if (loc == null) {
// No location found, check to see if we can ask the user.
if (mailInterface.GetStatus( "canUserSetLocation") != 0) {
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
{
var errorValue = true;
//open the profile dialog.
var comm4xprofile = Components.classes["@mozilla.org/comm4xProfile;1"].createInstance();
if(comm4xprofile != null) {
comm4xprofile = comm4xprofile.QueryInterface( Components.interfaces.nsIComm4xProfile);
if(comm4xprofile != null) {
var length = {value:0};
var profileList = comm4xprofile.getProfileList(length);
if (profileList)
{
var selected = {value:0};
if (length.value == 1)
{
errorValue = false;
}
else {
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
if (promptService) {
var clickedOk = false;
clickedOk = promptService.select(window,
gImportMsgsBundle.getString('profileTitle'),
gImportMsgsBundle.getString('profileText'),
length.value, profileList, selected);
if (clickedOk) {
errorValue = false;
}
else {
// users cancel the pick list dialog so just return and
// don't set error string so that current dialog can stay.
return( false);
}
} // promptService
}
if (!errorValue) {
var profileDir = comm4xprofile.getMailDir(profileList[selected.value]);
var localfile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
localfile.initWithPath(profileDir);
mailInterface.SetData( "mailLocation", localfile);
}
} // profileList
} // comm4xprofile
} // comm4xprofile
if (errorValue) {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return(false);
}
}
else {
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker != null) {
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectMailDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
mailInterface.SetData( "mailLocation", filePicker.file);
else
return( false);
} catch( ex) {
// don't show an error when we return!
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
if (mailInterface.WantsProgress()) {
if (mailInterface.BeginImport( success, error, false)) {
top.progressInfo.importInterface = mailInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return true;
}
else
return false;
}
else
return mailInterface.BeginImport( success, error, false) ? true : false;
}
// The address import! A little more complicated than the mail import
// due to field maps...
function ImportAddress( module, success, error) {
if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
return( false);
}
top.progressInfo.importSuccess = false;
addInterface = module.GetImportInterface( "addressbook");
if (addInterface != null)
addInterface = addInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
if (addInterface == null) {
error.data = gImportMsgsBundle.getString('ImportAddressBadModule');
return( false);
}
var path ;
// MemotooThunderbird: DEBUT
/*
var loc = addInterface.GetStatus( "autoFind");
if (loc == false) {
loc = addInterface.GetData( "addressLocation");
if (loc != null) {
loc = loc.QueryInterface( Components.interfaces.nsIFileSpec);
if (loc != null) {
if (!loc.exists)
loc = null;
}
}
}
if (loc == null) {
// Couldn't find the address book, see if we can
// as the user for the location or not?
if (addInterface.GetStatus( "canUserSetLocation") == 0) {
// an autofind address book that could not be found!
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker == null) {
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
// The address book location was not found.
// Determine if we need to ask for a directory
// or a single file.
var file = null;
if (addInterface.GetStatus( "supportsMultiple") != 0) {
// ask for dir
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
file = filePicker.file;
else
file = null;
} catch( ex) {
file = null;
}
}
else {
// ask for file
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrFile'), Components.interfaces.nsIFilePicker.modeOpen);
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
filePicker.appendFilter(gImportMsgsBundle.getString('Comm4xFiles'),"*.na2");
else {
var addressbookBundle = GetStringBundle("chrome://messenger/locale/addressbook/addressBook.properties");
filePicker.appendFilter(addressbookBundle.GetStringFromName('LDIFFiles'), "*.ldi; *.ldif");
filePicker.appendFilter(addressbookBundle.GetStringFromName('CSVFiles'), "*.csv");
filePicker.appendFilter(addressbookBundle.GetStringFromName('TABFiles'), "*.tab; *.txt");
filePicker.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
}
if (filePicker.show() == Components.interfaces.nsIFilePicker.returnCancel)
return false;
if (filePicker.file && (filePicker.file.path.length > 0))
file = filePicker.file;
else
file = null;
} catch( ex) {
dump("ImportAddress(): failure when picking a file to import: " + ex + "\n");
file = null;
}
}
path = filePicker.file.leafName;
if (file == null) {
return( false);
}
addInterface.SetData("addressLocation", file);
}
*/
var fichierTmp = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("TmpD", Components.interfaces.nsIFile);
fichierTmp.append("memotoo-contacts.ldif");
//alert("->"+fichierTmp.path);
if (! fichierTmp.exists())
{
alert("Erreur lors de l'importation fichier temporaire introuvable -> Contactez le webmaster de Memotoo.com");
}
addInterface.SetData("addressLocation", fichierTmp);
// MemotooThunderbird: FIN
// no need to use the fieldmap for 4.x import since we are using separate dialog
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
{
var deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "4");
var isHomeRadioGroup = document.getElementById("homeorwork");
isHomeRadioGroup.selectedItem = document.getElementById("workRadio");
var forwardButton = document.getElementById("forward");
forwardButton.removeAttribute("disabled");
var warning = document.getElementById("warning");
var textStr = " " + path ;
warning.setAttribute ('value', textStr) ;
return false;
}
var map = addInterface.GetData( "fieldMap");
if (map != null) {
map = map.QueryInterface( Components.interfaces.nsIImportFieldMap);
if (map != null) {
var result = new Object();
result.ok = false;
top.window.openDialog(
"chrome://messenger/content/fieldMapImport.xul",
"",
"chrome,modal,titlebar",
{fieldMap: map,
addInterface: addInterface,
result: result});
}
if (result.ok == false)
return( false);
}
if (addInterface.WantsProgress()) {
if (addInterface.BeginImport( success, error, selLocIsHome)) {
top.progressInfo.importInterface = addInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return( true);
}
else {
return( false);
}
}
else {
if (addInterface.BeginImport( success, error, selLocIsHome)) {
return( true);
}
else {
return( false);
}
}
}
function SwitchType( newType)
{
top.importType = newType;
top.progressInfo.importType = newType;
SetUpImportType();
SetDivText('description', "");
}
function next()
{
var deck = document.getElementById("stateDeck");
var index = deck.getAttribute("selectedIndex");
switch (index) {
case "0":
var backButton = document.getElementById("back");
backButton.removeAttribute("disabled");
var radioGroup = document.getElementById("importFields");
SwitchType(radioGroup.value);
deck.setAttribute("selectedIndex", "1");
SelectFirstItem();
enableAdvance();
break;
case "1":
ImportDialogOKButton();
break;
case "3":
close();
break;
case "4" :
var isHomeRadioGroup = document.getElementById("homeorwork");
if (isHomeRadioGroup.selectedItem.getAttribute("value") == "Home")
selLocIsHome = true ;
ExportComm4x() ;
break ;
}
}
function ExportComm4x()
{
var result ;
if (addInterface.WantsProgress())
{
result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
top.progressInfo.importInterface = addInterface;
ShowResults(true, result) ;
}
else
{
result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
ShowResults(false, result) ;
}
return true ;
}
function SelectFirstItem()
{
var listbox = document.getElementById("moduleList");
// MemotooThunderbird: DEBUT
//listbox.selectedIndex = 0;
listbox.selectedIndex = 3;
// MemotooThunderbird: FIN
ImportSelectionChanged();
}
function enableAdvance()
{
var listbox = document.getElementById("moduleList");
var nextButton = document.getElementById("forward");
if (listbox.selectedItems.length)
nextButton.removeAttribute("disabled");
else
nextButton.setAttribute("disabled", "true");
}
function back()
{
var deck = document.getElementById("stateDeck");
if (deck.getAttribute("selectedIndex") == "1") {
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
var nextButton = document.getElementById("forward");
nextButton.label = nextButton.getAttribute("nextval");
nextButton.removeAttribute("disabled");
deck.setAttribute("selectedIndex", "0");
}
}
PK
M43c+[ content/importDialog.xul
%brandDTD;
%importDTD;
]>
&importDescription.label;&importDescription2.label;&select.label;&selectDescription.label;
&FieldDiscInputText1.label;&FieldDiscInputText2.label;&FieldDiscWarning.label;
PK
3֛ content/MemotooThunderbird.jsfunction MemotooThunderbird() { this._init(); }
MemotooThunderbird.prototype =
{
settings:null,
addressBook:null,
stringbundle:null,
_console:null,
_ioService:null,
_init:function()
{
var sbSvc = Components.classes["@mozilla.org/intl/stringbundle;1"]
.getService(Components.interfaces.nsIStringBundleService);
this.stringbundle = sbSvc.createBundle("chrome://memotoothunderbird/locale/memotoothunderbird.properties");
this._console = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
this._ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
this.settings = new MemotooThunderbirdSettings(this);
},
get addressBookLDIF()
{
this.addressBook = new MemotooThunderbirdAddressBook(this);
this.addressBook.addressBook();
var source = "";
source += "";
return source;
},
uploadAddressBookLDIF:function()
{
var addressBookLDIFtmp = this.addressBookLDIF;
//alert(addressBookLDIFtmp);
/*
if (this.addressBook.addressBook.length>0)
{
if (this.settings.prefLogin=="" || this.settings.prefPassword=="")
{
alert(this.stringbundle.GetStringFromName("loginpasswordempty"));
return false;
}
var urlTmp = this.settings.prefUrl+"?l="+this.settings.prefLogin+"&p="+this.settings.prefPassword;
*/
/*
if (this.settings.prefIsDownloader)
urlTmp = urlTmp+"&isdownloader=1";
else
urlTmp = urlTmp+"&isdownloader=0";
*/
//alert(urlTmp);
/*
window.setCursor("wait");
//gBookmarksSynchronizerUploadService.start(addressBookLDIFtmp, this._ioService.newURI(urlTmp, null, null), "text/ldif", uploadCallback);
*/
alert("export");
/*
}
else
{
alert(this.stringbundle.GetStringFromName("upload0contact"));
gMemotooThunderbird.settings.prefIsUploader = true;
}
*/
return true;
},
downloadAddressBookLDIF:function()
{
if (this.settings.prefLogin=="" || this.settings.prefPassword=="")
{
alert(this.stringbundle.GetStringFromName("loginpasswordempty"));
return false;
}
var urlTmp = this.settings.prefUrl+"?l="+this.settings.prefLogin+"&p="+this.settings.prefPassword;
/*
if (this.settings.prefIsUploader)
urlTmp = urlTmp+"&isuploader=1";
else
urlTmp = urlTmp+"&isuploader=0";
*/
//alert(urlTmp);
window.setCursor("wait");
gBookmarksSynchronizerDownloadService.start(this._ioService.newURI(urlTmp, null, null), downloadCallback);
return true;
},
};
function uploadCallback(stat, err)
{
if (stat=="done")
{
window.setCursor("auto");
if (err==0)
{
var rien = confirm(gMemotooThunderbird.stringbundle.GetStringFromName("uploadok"));
gMemotooThunderbird.settings.prefIsUploader = true;
}
}
switch (err)
{
case -2:
break;
case 0:
break;
case -3:
break;
case 401:
alert(gMemotooThunderbird.stringbundle.GetStringFromName("loginpassworderror"));
break;
default:
break;
}
//setTimeout(close, 10000);
}
function downloadCallback(stat, err)
{
if (stat=="done")
{
window.setCursor("auto");
if (err==0)
{
// Copier les donnes dans un fichier en local
var addressBookLDIFtmp = gBookmarksSynchronizerDownloadService.data;
//alert(addressBookLDIFtmp);
var fichierTmp = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("TmpD", Components.interfaces.nsIFile);
fichierTmp.append("memotoo-contacts.ldif");
//alert("->"+fichierTmp.path);
if (! fichierTmp.exists())
{
fichierTmp.create(0, 0644);
}
// set up the output stream to the file
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
outputStream.init(fichierTmp, 0x20 | 0x02, 00004, null);
// write the LDIF source to the file
var result = outputStream.write(addressBookLDIFtmp, addressBookLDIFtmp.length);
outputStream.flush();
outputStream.close();
// Importation des favoris
//AddressBookCommandMemotoo.ImportAddress(fichierTmp);
winopen("chrome://memotoothunderbird/content/importDialog.xul",440,300,1);
gMemotooThunderbird.settings.prefIsDownloader = true;
}
}
switch (err)
{
case -2:
break;
case 0:
break;
case -3:
break;
case 401:
alert(gMemotooThunderbird.stringbundle.GetStringFromName("loginpassworderror"));
break;
default:
break;
}
//setTimeout(close, 10000);
}PK
3
*j j ( content/MemotooThunderbirdAddressBook.jsfunction MemotooThunderbirdAddressBook(MemotooThunderbird) { this._init(MemotooThunderbird); }
MemotooThunderbirdAddressBook.prototype =
{
_MemotooThunderbird:null,
_rootFolder:null,
_init:function(MemotooThunderbird)
{
this._MemotooThunderbird = MemotooThunderbird;
},
get addressBook()
{
//method for exporting contacts to vtigerCRM server
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
// get the datasource for the addressdirectory
var addressbookDS = RDF.GetDataSource("rdf:addressdirectory");
// moz-abdirectory:// is the RDF root to get all types of addressbooks.
var parentDir = RDF.GetResource("moz-abdirectory://").QueryInterface(Components.interfaces.nsIAbDirectory);
// the RDF resource URI for LDAPDirectory will be like: "moz-abmdbdirectory://abook-3.mab"
var ABdirectory = RDF.GetResource(expAburl).QueryInterface(Components.interfaces.nsIAbDirectory);
var childE = ABdirectory.childCards;
try
{
childE.first();
while(1)
{
var card = childE.currentItem().QueryInterface(Components.interfaces.nsIAbCard);
if(card.primaryEmail!="")
{
alert(card.primaryEmail);
}
childE.next();
}
}
catch(ex)
{
}
//return null;
},
};
PK
3 ҏ $ content/memotoothunderbirdOverlay.jsvar memotoothunderbirdService =
{
_MemotooThunderbird:null,
onload:function()
{
this._MemotooThunderbird = new MemotooThunderbird();
/*
this._MemotooThunderbird.settings.prefIsDownloader = false;
this._MemotooThunderbird.settings.prefIsUploader = false;
// Mise jour des contacts de Thunderbird par rapport Memotoo
if (this._MemotooThunderbird.settings.prefSyncOnLoad)
{
//this._MemotooThunderbird.downloadAddressBookLDIF();
}
*/
},
onunload:function()
{
/*
// Mise jour des contacts de Memotoo par rapport Thunderbird
if (this._MemotooThunderbird.settings.prefSyncOnExit)
{
//this._MemotooThunderbird.uploadAddressBookLDIF();
}
*/
},
importAddressBook:function()
{
if (this._MemotooThunderbird==null)
this._MemotooThunderbird = new MemotooThunderbird();
this._MemotooThunderbird.downloadAddressBookLDIF();
},
exportAddressBook:function()
{
if (this._MemotooThunderbird==null)
this._MemotooThunderbird = new MemotooThunderbird();
this._MemotooThunderbird.uploadAddressBookLDIF();
},
settings:function()
{
window.open("chrome://memotoothunderbird/content/options.xul","memotoothunderbird_options","chrome");
},
}PK
3#2 % content/memotoothunderbirdOverlay.xul
PK
y3y! ! 0 content/memotoothunderbirdOverlayAddressBook.xul
PK
3g2aG G % content/MemotooThunderbirdSettings.jsfunction MemotooThunderbirdSettings(memotoothunderbird) { this._init(memotoothunderbird); }
MemotooThunderbirdSettings.prototype = {
_memotoothunderbird:null,
_init:function(memotoothunderbird) { this._memotoothunderbird = memotoothunderbird; },
get _prefroot() { return "extensions.memotoothunderbird"; },
//set prefUrl(str) { this._setPref("", "url", str); },
set prefUrl(str) { },
get prefUrl() {
if (this.prefSSL)
return this._getPref("", "url", "https://www.memotoo.com/contactsLDIF.php");
else
return this._getPref("", "url", "http://www.memotoo.com/contactsLDIF.php");
},
set prefLogin(str) { this._setPref("", "login", str); },
get prefLogin() { return this._getPref("", "login", ""); },
set prefPassword(str) { this._setPref("", "password", str); },
get prefPassword() { return this._getPref("", "password", ""); },
set prefDossier(str) { this._setPref("", "dossier", str); },
get prefDossier() {
var folder = this._getPref("", "dossier", "");
return (folder) ? folder : "";
},
set prefIsUploader(b) { this._setBool("", "isuploader", b); },
get prefIsUploader() { return this._getBool("", "isuploader", false); },
set prefIsDownloader(b) { this._setBool("", "isdownloader", b); },
get prefIsDownloader() { return this._getBool("", "isdownloader", false); },
set prefSyncOnLoad(b) { this._setBool("", "autodownload", b); },
get prefSyncOnLoad() { return this._getBool("", "autodownload", false); },
set prefSyncOnExit(b) { this._setBool("", "autoupload", b); },
get prefSyncOnExit() { return this._getBool("", "autoupload", false); },
set prefSSL(b) { this._setBool("", "ssl", b); },
get prefSSL() { return this._getBool("", "ssl", false); },
_setOpts:function(mod, str) { nsPreferences.setUnicharPref(this._prefroot + mod, str); },
_getOpts:function(mod) { return nsPreferences.copyUnicharPref(this._prefroot + mod, ""); },
_setInt:function(mod, name, value) { this._setPref(mod, name, value); },
_getInt:function(mod, name, dfault) { return parseInt(this._getPref(mod, name, dfault)); },
_setBool:function(mod, name, value) { this._setInt(mod, name, (value) ? 1 : 0); },
_getBool:function(mod, name, dfault) { return (this._getInt(mod, name, dfault) == 1) ? true : false; },
_setPref:function(mod, name, value) {
var newopts = "";
// remove the name from the current options, if it exists
var pairs = this._getOpts(mod).split("&");
for (var idx = 0; idx < pairs.length; idx++) {
var pair = pairs[idx].split("=");
if ((pair[0] != name) && (pairs[idx] != "")) {
newopts += pairs[idx] + "&";
}
}
// add the new string to the options & save the options
newopts += name + "=" + escape(value);
this._setOpts(mod, newopts);
},
_getPref:function(mod, name, dfault) {
// scan for the name
var pairs = this._getOpts(mod).split("&");
for (var idx = 0; idx < pairs.length; idx++) {
var pair = pairs[idx].split("=");
if (pair[0] == name) {
return unescape(pair[1]);
}
}
// still here? not found...
return dfault;
},
};PK
3{U+ content/options.jsvar gMemotooThunderbird = null;
var gDossierId = "";
function loadSettings()
{
document.getElementById("login").value = gMemotooThunderbird.settings.prefLogin;
document.getElementById("password").value = gMemotooThunderbird.settings.prefPassword;
document.getElementById("ssl").checked = gMemotooThunderbird.settings.prefSSL;
initDossier(gMemotooThunderbird.settings.prefDossier);
//document.getElementById("sync").checked = gMemotooThunderbird.settings.prefSyncOnLoad;
}
function saveSettings()
{
gMemotooThunderbird.settings.prefLogin = document.getElementById("login").value;
gMemotooThunderbird.settings.prefPassword = hex_md5(document.getElementById("password").value);
gMemotooThunderbird.settings.prefSSL = document.getElementById("ssl").checked;
//gMemotooThunderbird.settings.prefDossier = gDossierId;
//gMemotooThunderbird.settings.prefSyncOnLoad = document.getElementById("sync").checked;
//gMemotooThunderbird.settings.prefSyncOnExit = document.getElementById("sync").checked;
gMemotooThunderbird.settings.prefIsUploader = false;
gMemotooThunderbird.settings.prefIsDownloader = false;
}
function onLoad()
{
gMemotooThunderbird = new MemotooThunderbird();
loadSettings();
}
function onSave()
{
saveSettings();
}
function initDossier(uri)
{
var count = opener.dirTree.view.rowCount;
var vtigerABURL = "";
var nsIndex = 0;
var ncount = 0;
for (var i = 0 ; i <= count-1; i++)
{
var res = opener.dirTree.builderView.getResourceAtIndex(i);
var Aburl = res.Value;
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
// get the datasource for the addressdirectory
var addressbookDS = RDF.GetDataSource("rdf:addressdirectory");
// moz-abdirectory:// is the RDF root to get all types of addressbooks.
var parentDir = RDF.GetResource("moz-abdirectory://").QueryInterface(Components.interfaces.nsIAbDirectory);
// the RDF resource URI for LDAPDirectory will be like: "moz-abmdbdirectory://abook-3.mab"
var ABdirectory = RDF.GetResource(Aburl).QueryInterface(Components.interfaces.nsIAbDirectory);
// Copy existing dir type category id and mod time so they won't get reset.
var ABProperties = ABdirectory.directoryProperties;
var menupopelmnt = document.getElementById("expopup");
if(ABProperties.description!="")
{
var typechild = document.createElement('menuitem');
typechild.setAttribute('label',ABProperties.description);
typechild.setAttribute('value',Aburl);
menupopelmnt.appendChild(typechild);
if(Aburl == opener.gselecteddir)
{
nsIndex = ncount;
}
ncount = ncount + 1;
}
}
document.getElementById('expablist').selectedIndex = nsIndex;
}
function browse()
{
winopen("chrome://memotoothunderbird/content/browse.xul",250,360,1);
}
function download()
{
saveSettings();
var result = gMemotooThunderbird.downloadAddressBookLDIF();
}
function upload()
{
saveSettings();
var result = gMemotooThunderbird.uploadAddressBookLDIF();
}PK
y3onm
m
content/options.xul
PK
ʉi4 locale/PK
3
locale/en-US/PK
HX(3p p locale/en-US/contents.rdf
PK
j"4> > # locale/en-US/memotoothunderbird.dtd
PK
j"4/U U * locale/en-US/memotoothunderbird.propertiesloginpasswordempty=Error: Login and password couldn't be empty
loginpassworderror=Error: Impossible to connect to Memotoo.com with this login and this password
uploadok=Update Memotoo.com Address book -> OK
downloadok=Update Thunderbird Address book -> OK
upload0contact=Update Memotoo.com impossible -> there is 0 contact in this folderPK
ىi4
locale/es-ES/PK
щi4p p locale/es-ES/contents.rdf
PK
Չi4Ww] ] # locale/es-ES/memotoothunderbird.dtd
PK
؉i4*~ ~ * locale/es-ES/memotoothunderbird.propertiesloginpasswordempty=Error: Usuario y contrase\u00F1a no pueden estar en blanco
loginpassworderror=Error: No se pudo conectar con Memotoo.com con este usuario y contrase\u00F1a
uploadok=Actualizar libreta direcciones Memotoo.com -> OK
downloadok=Actualizar libreta direcciones Thunderbird -> OK
upload0contact=No se pudo actualizar Memotoo.com -> hay 0 contactos en esta carpeta
PK
O4
locale/fr-FR/PK
HX(3~p p locale/fr-FR/contents.rdf
PK
O4YҖ # locale/fr-FR/memotoothunderbird.dtd
PK
6k"4E- * locale/fr-FR/memotoothunderbird.propertiesloginpasswordempty=Erreur: le login et le mot de passe ne peuvent pas \u00eatre vide
loginpassworderror=Erreur: Impossible de se connecter \u00e0 Memotoo.com avec ce login et ce mot de passe
uploadok=Mise \u00e0 jour du carnet d'adresses Memotoo.com -> OK
downloadok=Mise \u00e0 jour du carnet d'adresses Thunderbird -> OK
upload0contact=Mise \u00e0 jour Memotoo.com impossible -> Il n'y a 0 contact dans ce dossierPK
V$4
locale/it-IT/PK
$4:p p locale/it-IT/contents.rdf
PK
9$4h'C C # locale/it-IT/memotoothunderbird.dtd
PK
n$4beF * locale/it-IT/memotoothunderbird.propertiesloginpasswordempty=Errore: nome utente e password non possono essere vuoti
loginpassworderror=Errore: impossibile connettersi a Memotoo.com con questo nome utente e questa password
uploadok=Aggiornamento della Rubrica di Memotoo.com -> OK
downloadok=Aggiornamento della Rubrica di Thunderbird -> OK
upload0contact=Impossibile aggiornare la Rubrica di Memotoo.com -> in questa cartella non ci sono contattiPK
i4
locale/pt-BR/PK
i4p p locale/pt-BR/contents.rdf
PK
i4L" " # locale/pt-BR/memotoothunderbird.dtd
PK
i4]B * locale/pt-BR/memotoothunderbird.propertiesloginpasswordempty=Erro: Usu\u00E1rio e senha n\u00E3o podem estar vazios
loginpassworderror=Erro: Imposs\u00EDvel conectar ao Memotoo.com com este usu\u00E1rio e esta senha
uploadok=Atualizar cat\u00E1logo de endere\u00E7os Memotoo.com -> OK
downloadok=Atualizar cat\u00E1logo de endere\u00E7os do Thunderbird -> OK
upload0contact=Atualiza\u00E7\u00E3o do Memotoo.com imposs\u00EDvel -> n\u00E3o h\u00E1 contatos nesta pasta
PK
3 skin/PK
HX(3MZ skin/contents.rdf
PK
HX(3O?B skin/default.csstextbox.noframe, textbox.noframe > .textbox-internal-box, textbox.noframe > .textarea-internal-box {
background: transparent !important;
border: none;
padding: 0px;
-moz-appearance: none;
}PK
k6f skin/memotoo.pngPNG
IHDR D pHYs PLTE@` @ @ ``` f \ \@xP @xP ` Q\:h f@xP @xP$;7 $;g;K @xP$
Op;KZ\@x7E( f M:Z7MB M:ZCM^-E)@xP fAǡTBEBMȷtE%CE%ZE%btE%ldȷZBY p :h" pȺ d;7 ;gPEth X S
~s" @ ;KTk " pD p\p0 8p0Y]b 0
^<