summaryrefslogtreecommitdiff
path: root/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js
diff options
context:
space:
mode:
authorRuben Rodriguez <ruben@gnu.org>2015-11-28 15:24:36 -0600
committerRuben Rodriguez <ruben@gnu.org>2015-11-28 16:27:06 -0600
commite4a3586a14996bbece3b26c9e3b7704ea6af8615 (patch)
tree499bdd16b3a90c30b01e4b47a5882d13b4800f50 /data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js
parent4dbc2fae927bb02ef243c87938e638af9afee8fa (diff)
LibreJS upgraded to 6.0.10
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js')
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js
new file mode 100644
index 0000000..3ed13d0
--- /dev/null
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/storage.js
@@ -0,0 +1,126 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+'use strict';
+
+const { Cc, Ci, Cu, components } = require('chrome');
+const { id } = require('sdk/self');
+const unload = require('sdk/system/unload');
+const { defer } = require('sdk/core/promise');
+
+const { Instances } = require('./chrome/instances');
+const { Services } = require('./chrome/services');
+const { NetUtil } = require('./chrome/net-utils');
+
+const { FileUtils } = Cu.import('resource://gre/modules/FileUtils.jsm', {});
+
+const JETPACK_DIR_BASENAME = "jetpack";
+
+let saving = false;
+
+function getStorageFile() {
+ const file = Services.dirsvc.get('ProfD', Ci.nsIFile);
+ file.append(JETPACK_DIR_BASENAME);
+ file.append(id);
+ file.append('pathfinder');
+ file.append('storage');
+
+ if (!file.exists())
+ file.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt('0755', 8));
+
+ file.append('storage.blob');
+ return file;
+}
+
+function get(options) {
+ options = options || {};
+ let charset = options.charset || 'UTF-8';
+
+ const { promise, resolve } = defer();
+ const file = getStorageFile();
+ const channel = NetUtil.newChannel(file);
+
+ if (!file.exists()) {
+ resolve({ data: '' });
+ }
+ else {
+ NetUtil.asyncFetch(channel, function(iStream, aResult) {
+ if (!components.isSuccessCode(aResult)) {
+ reject();
+ }
+ else {
+ let text = NetUtil.readInputStreamToString(iStream, iStream.available());
+
+ let conv = Instances.suc;
+ conv.charset = charset;
+
+ text = conv.ConvertToUnicode(text);
+
+ resolve({
+ data: text,
+ charset: charset
+ });
+ }
+ });
+ }
+
+ return promise;
+}
+exports.get = get;
+
+function set({ data, charset }) {
+ charset = charset || 'UTF-8';
+ data = data || '';
+ const { promise, resolve, reject } = defer();
+ const file = getStorageFile();
+
+ if (data == '') {
+ if (file.exists()) {
+ file.remove(false);
+ }
+
+ resolve({
+ data: '',
+ charset: charset
+ });
+ }
+ else {
+ const converter = Instances.suc;
+ converter.charset = "UTF-8";
+
+ if (isSaving()) {
+ throw Error('Storage is currently in the process of saving..');
+ }
+ saving = true;
+
+ let iStream = converter.convertToInputStream(data);
+ let oStream = FileUtils.openSafeFileOutputStream(file);
+
+ NetUtil.asyncCopy(
+ iStream,
+ oStream,
+ function(aResult) {
+ FileUtils.closeSafeFileOutputStream(oStream);
+ saving = false;
+
+ if (!components.isSuccessCode(aResult)) {
+ reject();
+ }
+ else {
+ resolve({
+ data: data,
+ charset: charset
+ });
+ }
+ }
+ );
+ }
+
+ return promise;
+}
+exports.set = set;
+
+function isSaving() {
+ return saving;
+}
+exports.isSaving = isSaving;