X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Rakka.git;a=blobdiff_plain;f=js%2FlocalFile.js;h=40d4ac8376c8c43e9d219887703176f21b09473f;hp=1a6fbfec73a012872318dbefc2ab58daa52a14b9;hb=a039dfc12ba7b8b703e9f0ee7deaaffbfbdd0b8f;hpb=9a1da61204cdcf932d8260c87c69bd8fa1992533 diff --git a/js/localFile.js b/js/localFile.js index 1a6fbfe..40d4ac8 100644 --- a/js/localFile.js +++ b/js/localFile.js @@ -1,44 +1,100 @@ (function () { - Rakka.canAccessLocalFile = function () { - return $.browser.mozilla; - }; - - var loadBin_mozilla = function (path) { - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - } - catch (e) { - alert("Permission to read local file was denied. " + - "Open about:config and check that " + - "signed.applets.codebase_principal_support is set to true."); - } - - var localFile - = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); - localFile.initWithPath(path); - - var stream - = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); - stream.init(localFile, 0x01, 00004, null); - - var bstream - = Components.classes["@mozilla.org/network/buffered-input-stream;1"].getService(); - bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream); - bstream.init(stream, 1000); - bstream.QueryInterface(Components.interfaces.nsIInputStream); - - var binary - = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); - binary.setInputStream(stream); - - return binary.readBytes(binary.available()); - }; - - Rakka.loadLocalBinaryFile = function (path) { - if ($.browser.mozilla) { - return loadBin_mozilla(path); - } - }; - + Rakka.canAccessLocalFile = function () { + return $.browser.mozilla; + }; + + var loadBin_mozilla = function (path) { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + } + catch (e) { + alert("Permission to read local file was denied. " + + "Open about:config and check that " + + "signed.applets.codebase_principal_support is set to true."); + } + + var localFile + = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); + localFile.initWithPath(path); + + var stream + = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); + stream.init(localFile, 0x01, 00004, null); + + var bstream + = Components.classes["@mozilla.org/network/buffered-input-stream;1"].getService(); + bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream); + bstream.init(stream, 1000); + bstream.QueryInterface(Components.interfaces.nsIInputStream); + + var binary + = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); + binary.setInputStream(stream); + + return binary.readBytes(binary.available()); + }; + + var selectFile_mozilla = function (title, mode) { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + } + catch (e) { + alert("Permission to select local file was denied. " + + "Open about:config and check that " + + "signed.applets.codebase_principal_support is set to true."); + } + + var nsIFilePicker = Components.interfaces.nsIFilePicker; + + var modeID; + if (mode == "open") { + modeID = nsIFilePicker.modeOpen; + } + else if (mode == "save") { + modeID = nsIFilePicker.modeSave; + } + else if (mode == "getFolder") { + modeID = nsIFilePicker.modeGetFolder; + } + else if (mode == "modeOpenMultiple") { + modeID = nsIFilePicker.modeOpenMultiple; + } + else { + throw new Error("Unknown file picker mode: " + mode); + } + + var picker = Components + .classes["@mozilla.org/filepicker;1"] + .createInstance(nsIFilePicker); + picker.init(window, title, modeID); + picker.appendFilters(nsIFilePicker.filterAll); + + var ret = picker.show(); + if (ret == nsIFilePicker.returnOK || ret == nsIFilePicker.returnReplace) { + return picker.file.path; + } + else { + return null; + } + }; + + Rakka.selectFile = function (title, mode) { + if ($.browser.mozilla) { + return selectFile_mozilla(title, mode); + } + else { + throw new Error("It's not possible to select local files using JavaScript with your browser. Consider using Firefox."); + } + }; + + Rakka.loadLocalBinaryFile = function (path) { + if ($.browser.mozilla) { + return loadBin_mozilla(path); + } + else { + throw new Error("It's not possible to load local files using JavaScript with your browser. Consider using Firefox."); + } + }; + })(); \ No newline at end of file