ADDED gc_lang/fr/tb/content/file_handler.js Index: gc_lang/fr/tb/content/file_handler.js ================================================================== --- gc_lang/fr/tb/content/file_handler.js +++ gc_lang/fr/tb/content/file_handler.js @@ -0,0 +1,79 @@ +// JavaScript + +"use strict"; + +// Assuming that Cc, Ci and Cu are already loaded + +const {TextDecoder, TextEncoder, OS} = Components.utils.import("resource://gre/modules/osfile.jsm", {}); + + +const oFileHandler = { + // https://developer.mozilla.org/fr/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread + + xDataFolder: null, + + prepareDataFolder: function () { + let xDirectoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties); + // this is a reference to the profile dir (ProfD) now. + let xExtFolder = xDirectoryService.get("ProfD", Ci.nsIFile); + xExtFolder.append("grammalecte-data"); + if (!xExtFolder.exists() || !xExtFolder.isDirectory()) { + // read and write permissions to owner and group, read-only for others. + xExtFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 774); + } + this.xDataFolder = xExtFolder; + }, + + createPathFileName: function (sFilename) { + let spfDest = this.xDataFolder.path; + spfDest += (/^[A-Z]:/.test(this.xDataFolder.path)) ? "\\" + sFilename : "/" + sFilename; + return spfDest; + }, + + loadFile: async function (sFilename) { + if (!this.xDataFolder) { + this.prepareDataFolder(); + } + try { + let xDecoder = new TextDecoder(); + let array = await OS.File.read(this.createPathFileName(sFilename)); + return xDecoder.decode(array); + } + catch (e) { + console.error(e); + return null; + } + }, + + saveFile: function (sFilename, sData) { + if (!this.xDataFolder) { + this.prepareDataFolder(); + } + let xEncoder = new TextEncoder(); + let xEncodedRes = xEncoder.encode(sData); + console.log("save dictionary: " + this.createPathFileName(sFilename)); + OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes); + //OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes, {tmpPath: "file.txt.tmp"}); // error with a temporary file (can’t move it) + }, + + deleteFile: function (sFilename) { + if (!this.xDataFolder) { + this.prepareDataFolder(); + } + OS.File.remove(this.createPathFileName(sFilename), {ignoreAbsent: true}); + }, + + saveAs: function (sData) { + // save anywhere with file picker + let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); + xFilePicker.init(window, "Enregistrer sous", Ci.nsIFilePicker.modeSave); + xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText); + xFilePicker.open(function (nReturnValue) { + if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) { + let xEncoder = new TextEncoder(); + let xEncodedRes = xEncoder.encode(sData); + OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"}); + } + }); + } +} Index: gc_lang/fr/tb/content/lex_editor.js ================================================================== --- gc_lang/fr/tb/content/lex_editor.js +++ gc_lang/fr/tb/content/lex_editor.js @@ -5,12 +5,10 @@ const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); -const {TextDecoder, TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {}); - /* Common functions */ @@ -474,86 +472,14 @@ let sJSON = JSON.stringify(this.oIBDAWG.getJSON()); oFileHandler.saveAs(sJSON); } } - -const oFileHandler = { - // https://developer.mozilla.org/fr/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread - - xDataFolder: null, - - createDataFolder: function () { - let xDirectoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties); - // this is a reference to the profile dir (ProfD) now. - let xExtFolder = xDirectoryService.get("ProfD", Ci.nsIFile); - xExtFolder.append("grammalecte-data"); - if (!xExtFolder.exists() || !xExtFolder.isDirectory()) { - // read and write permissions to owner and group, read-only for others. - xExtFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 774); - } - this.xDataFolder = xExtFolder; - }, - - createPathFileName: function (sFilename) { - let spfDest = this.xDataFolder.path; - spfDest += (/^[A-Z]:/.test(this.xDataFolder.path)) ? "\\" + sFilename : "/" + sFilename; - return spfDest; - }, - - loadFile: async function (sFilename) { - if (!this.xDataFolder) { - this.createDataFolder(); - } - try { - let xDecoder = new TextDecoder(); - let array = await OS.File.read(this.createPathFileName(sFilename)); - return xDecoder.decode(array); - } - catch (e) { - console.error(e); - return ""; - } - }, - - saveFile: function (sFilename, sData) { - if (!this.xDataFolder) { - this.createDataFolder(); - } - let xEncoder = new TextEncoder(); - let xEncodedRes = xEncoder.encode(sData); - console.log("save dictionary: " + this.createPathFileName(sFilename)); - OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes); - //OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes, {tmpPath: "file.txt.tmp"}); // error with a temporary file (can’t move it) - }, - - deleteFile: function (sFilename) { - if (!this.xDataFolder) { - this.createDataFolder(); - } - OS.File.remove(this.createPathFileName(sFilename), {ignoreAbsent: true}); - }, - - saveAs: function (sData) { - // save anywhere with file picker - let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); - xFilePicker.init(window, "Enregistrer sous", Ci.nsIFilePicker.modeSave); - xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText); - xFilePicker.open(function (nReturnValue) { - if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) { - let xEncoder = new TextEncoder(); - let xEncodedRes = xEncoder.encode(sData); - OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"}); - } - }); - } -} - const oGenWordsTable = new Table("generated_words_table", ["Flexions", "Étiquettes"], [1, 1], "progress_new_words"); const oLexiconTable = new Table("lexicon_table", ["Flexions", "Lemmes", "Étiquettes"], [10, 7, 10], "progress_lexicon", "num_entries"); conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json")); oBinaryDict.load(); oBinaryDict.listen(); oGenerator.listen(); Index: gc_lang/fr/tb/content/lex_editor.xul ================================================================== --- gc_lang/fr/tb/content/lex_editor.xul +++ gc_lang/fr/tb/content/lex_editor.xul @@ -217,8 +217,9 @@