]> gitweb @ CieloNegro.org - Rakka.git/blob - js/localFile.js
localFile.js works again!
[Rakka.git] / js / localFile.js
1 (function () {
2
3      Rakka.canAccessLocalFile = function () {
4          return $.browser.mozilla;
5      };
6
7      var loadBin_mozilla = function (localFile) {
8          /* localFile: nsILocalFile */
9
10          try {
11              netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
12          }
13          catch (e) {
14              alert("Permission to read local file was denied. " +
15                    "Open about:config and check that " +
16                    "signed.applets.codebase_principal_support is set to true.");
17          }
18
19          var stream
20              = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(
21                  Components.interfaces.nsIFileInputStream);
22          stream.init(localFile, 0x01, 00004, null);
23
24          var bstream
25              = Components.classes["@mozilla.org/network/buffered-input-stream;1"].getService();
26          bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
27          bstream.init(stream, 1000);
28          bstream.QueryInterface(Components.interfaces.nsIInputStream);
29
30          var binary
31              = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(
32                  Components.interfaces.nsIBinaryInputStream);
33          binary.setInputStream(stream);
34
35          return binary.readBytes(binary.available());
36      };
37
38      var selectFile_mozilla = function (title, mode) {
39          try {
40              netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
41          }
42          catch (e) {
43              alert("Permission to select local file was denied. " +
44                    "Open about:config and check that " +
45                    "signed.applets.codebase_principal_support is set to true.");
46          }
47
48          var nsIFilePicker = Components.interfaces.nsIFilePicker;
49
50          var modeID;
51          if (mode == "open") {
52              modeID = nsIFilePicker.modeOpen;
53          }
54          else if (mode == "save") {
55              modeID = nsIFilePicker.modeSave;
56          }
57          else if (mode == "getFolder") {
58              modeID = nsIFilePicker.modeGetFolder;
59          }
60          else if (mode == "modeOpenMultiple") {
61              modeID = nsIFilePicker.modeOpenMultiple;
62          }
63          else {
64              throw new Error("Unknown file picker mode: " + mode);
65          }
66
67          var picker = Components
68                           .classes["@mozilla.org/filepicker;1"]
69                               .createInstance(nsIFilePicker);
70          picker.init(window, title, modeID);
71          picker.appendFilters(nsIFilePicker.filterAll);
72
73          var ret = picker.show();
74          if (ret == nsIFilePicker.returnOK || ret == nsIFilePicker.returnReplace) {
75              return picker.file;
76          }
77          else {
78              return null;
79          }
80      };
81
82      Rakka.selectFile = function (title, mode) {
83          if ($.browser.mozilla) {
84              return selectFile_mozilla(title, mode);
85          }
86          else {
87              throw new Error("It's not possible to select local files using JavaScript with your browser. Consider using Firefox.");
88          }
89      };
90
91      Rakka.loadLocalBinaryFile = function (file) {
92          if ($.browser.mozilla) {
93              return loadBin_mozilla(file);
94          }
95          else {
96              throw new Error("It's not possible to load local files using JavaScript with your browser. Consider using Firefox.");
97          }
98      };
99
100 })();