diff --git a/modules/Settings.js b/modules/Settings.js index 94767643d..4b0d87230 100644 --- a/modules/Settings.js +++ b/modules/Settings.js @@ -6,21 +6,21 @@ Usage: // open settings for an app var appSettings = require('Settings').app(appname); // read a single setting -value = appSettings.get(path, default); -// omit path to read all app settings +value = appSettings.get(key, default); +// omit key to read all app settings value = appSettings.get(); // write a single app setting -appSettings.set(path, value) -// omit path and pass an object as values to overwrite all settings for an app +appSettings.set(key, value) +// omit key and pass an object as values to overwrite all settings for an app appSettings.set(values) // open Bangle settings var globalSettings = require('Settings').Bangle(); -value = globalSettings.get(path, default); +value = globalSettings.get(key, default); // read all global settings values = globalSettings.get(); // write a global setting -globalSettings.set(path, value) +globalSettings.set(key, value) // overwrite all global settings globalSettings.set(values) ``` @@ -28,20 +28,15 @@ globalSettings.set(values) For example: ``` var settings = require('Settings').app('test'); -settings.set('foo.bar.baz', 123); // writes to 'test.settings.json' -settings.set('foo.bar.bam', 456); // updates 'test.settings.json' -// 'test.settings.json' now contains {foo:{bar:{baz:123,bam:456}}} -baz = settings.get('foo.bar.baz'); // baz = 123 -bar = settings.get('foo.bar'); // bar = {baz: 123, bam:456} -def = settings.get('asdf.jkl', 123); // def = 123 -all = settings.get(); // all = {foo: { bar: {baz: 123, bam:456} } } +settings.set('foo', 123); // writes to 'test.settings.json' +settings.set('bar', 456); // updates 'test.settings.json' +// 'test.settings.json' now contains {baz:123,bam:456} +baz = settings.get('foo'); // baz = 123 +def = settings.get('jkl', 789); // def = 789 +all = settings.get(); // all = {foo: 123, bar: 456} +baz = settings.get('baz'); // baz = undefined -settings.set({fuz: 789}); // overwrites 'test.settings.json' -// 'test.settings.json' now contains {fuz:789} -fuz = settings.get('fuz'); // fuz = 789 -baz = settings.get('foo.bar.baz'); // baz = undefined - -wakeOnTouch = require('Settings').Bangle().get('options.wakeOnTouch', false); +vibrate = require('Settings').Bangle().get('vibrate', true); ``` */ @@ -49,63 +44,39 @@ wakeOnTouch = require('Settings').Bangle().get('options.wakeOnTouch', false); /** * * @param{string} file Settings file - * @param path Path to setting, omit to get complete settings object + * @param key Setting to get, omit to get all settings as object * @param def Default value * @return {*} Setting */ -function get(file, path, def) { - let setting = require("Storage").readJSON(file); - if (def===undefined && ["object", "undefined"].includes(typeof path)) { - // get(app) or get(app, def): get all settings - def = path; - path = []; - } else { - path = path.split("."); +function get(file, key, def) { + var s = require("Storage").readJSON(file); + if (def===undefined && ["object", "undefined"].includes(typeof key)) { + // get(file) or get(file, def): get all settings + return (s!==undefined) ? s : key; } - if (path.includes("")) { - throw "Settings: path cannot contain empty elements"; + if (typeof s!=="object" || !(key in s)) { + return def; } - while(path.length) { - const key = path.shift(); - if (typeof setting!=="object" || !(key in setting)) { - return def; - } - setting = setting[key]; - } - return setting; + return s[key]; } /** * @param {string} file Settings file - * @param path Path to setting, omit to replace all settings + * @param key Setting to change, omit to replace all settings * @param value Value to store */ -function set(file, path, value) { - if (value===undefined && typeof path==="object") { +function set(file, key, value) { + if (value===undefined && typeof key==="object") { // set(file, value): overwrite settings completely - require("Storage").writeJSON(file, path); + require("Storage").writeJSON(file, key); return; } - path = path.split("."); // empty string is not OK (becomes [""]) - if (path.includes("")) { - throw "Settings: path cannot contain empty elements"; + var s = require("Storage").readJSON(file,1); + if (typeof s!=="object") { + s = {}; } - let setting; - try {setting = get(file);} catch(e) {} // if reading old settings failed we write a fresh object - if (typeof setting!=="object") { - setting = {}; - } - let root = setting; // keep a reference to root object - const leaf = path.pop(); - while(path.length) { - const key = path.shift(); - if (!(key in setting) || typeof (setting[key])!=="object") { - setting[key] = {}; - } - setting = setting[key]; - } - setting[leaf] = value; - require("Storage").write(file, root); + s[key] = value; + require("Storage").write(file, s); } /** @@ -116,8 +87,8 @@ function set(file, path, value) { */ function open(file) { return { - set: (path, val) => set(file, path, val), - get: (path, def) => get(file, path, def), + set: (key, val) => set(file, key, val), + get: (key, def) => get(file, key, def), }; }