simplify Settings library
parent
477b2e5fdc
commit
68569cd9ba
|
|
@ -6,21 +6,21 @@ Usage:
|
||||||
// open settings for an app
|
// open settings for an app
|
||||||
var appSettings = require('Settings').app(appname);
|
var appSettings = require('Settings').app(appname);
|
||||||
// read a single setting
|
// read a single setting
|
||||||
value = appSettings.get(path, default);
|
value = appSettings.get(key, default);
|
||||||
// omit path to read all app settings
|
// omit key to read all app settings
|
||||||
value = appSettings.get();
|
value = appSettings.get();
|
||||||
// write a single app setting
|
// write a single app setting
|
||||||
appSettings.set(path, value)
|
appSettings.set(key, value)
|
||||||
// omit path and pass an object as values to overwrite all settings for an app
|
// omit key and pass an object as values to overwrite all settings for an app
|
||||||
appSettings.set(values)
|
appSettings.set(values)
|
||||||
|
|
||||||
// open Bangle settings
|
// open Bangle settings
|
||||||
var globalSettings = require('Settings').Bangle();
|
var globalSettings = require('Settings').Bangle();
|
||||||
value = globalSettings.get(path, default);
|
value = globalSettings.get(key, default);
|
||||||
// read all global settings
|
// read all global settings
|
||||||
values = globalSettings.get();
|
values = globalSettings.get();
|
||||||
// write a global setting
|
// write a global setting
|
||||||
globalSettings.set(path, value)
|
globalSettings.set(key, value)
|
||||||
// overwrite all global settings
|
// overwrite all global settings
|
||||||
globalSettings.set(values)
|
globalSettings.set(values)
|
||||||
```
|
```
|
||||||
|
|
@ -28,20 +28,15 @@ globalSettings.set(values)
|
||||||
For example:
|
For example:
|
||||||
```
|
```
|
||||||
var settings = require('Settings').app('test');
|
var settings = require('Settings').app('test');
|
||||||
settings.set('foo.bar.baz', 123); // writes to 'test.settings.json'
|
settings.set('foo', 123); // writes to 'test.settings.json'
|
||||||
settings.set('foo.bar.bam', 456); // updates 'test.settings.json'
|
settings.set('bar', 456); // updates 'test.settings.json'
|
||||||
// 'test.settings.json' now contains {foo:{bar:{baz:123,bam:456}}}
|
// 'test.settings.json' now contains {baz:123,bam:456}
|
||||||
baz = settings.get('foo.bar.baz'); // baz = 123
|
baz = settings.get('foo'); // baz = 123
|
||||||
bar = settings.get('foo.bar'); // bar = {baz: 123, bam:456}
|
def = settings.get('jkl', 789); // def = 789
|
||||||
def = settings.get('asdf.jkl', 123); // def = 123
|
all = settings.get(); // all = {foo: 123, bar: 456}
|
||||||
all = settings.get(); // all = {foo: { bar: {baz: 123, bam:456} } }
|
baz = settings.get('baz'); // baz = undefined
|
||||||
|
|
||||||
settings.set({fuz: 789}); // overwrites 'test.settings.json'
|
vibrate = require('Settings').Bangle().get('vibrate', true);
|
||||||
// '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);
|
|
||||||
```
|
```
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
@ -49,63 +44,39 @@ wakeOnTouch = require('Settings').Bangle().get('options.wakeOnTouch', false);
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param{string} file Settings file
|
* @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
|
* @param def Default value
|
||||||
* @return {*} Setting
|
* @return {*} Setting
|
||||||
*/
|
*/
|
||||||
function get(file, path, def) {
|
function get(file, key, def) {
|
||||||
let setting = require("Storage").readJSON(file);
|
var s = require("Storage").readJSON(file);
|
||||||
if (def===undefined && ["object", "undefined"].includes(typeof path)) {
|
if (def===undefined && ["object", "undefined"].includes(typeof key)) {
|
||||||
// get(app) or get(app, def): get all settings
|
// get(file) or get(file, def): get all settings
|
||||||
def = path;
|
return (s!==undefined) ? s : key;
|
||||||
path = [];
|
|
||||||
} else {
|
|
||||||
path = path.split(".");
|
|
||||||
}
|
}
|
||||||
if (path.includes("")) {
|
if (typeof s!=="object" || !(key in s)) {
|
||||||
throw "Settings: path cannot contain empty elements";
|
return def;
|
||||||
}
|
}
|
||||||
while(path.length) {
|
return s[key];
|
||||||
const key = path.shift();
|
|
||||||
if (typeof setting!=="object" || !(key in setting)) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
setting = setting[key];
|
|
||||||
}
|
|
||||||
return setting;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} file Settings file
|
* @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
|
* @param value Value to store
|
||||||
*/
|
*/
|
||||||
function set(file, path, value) {
|
function set(file, key, value) {
|
||||||
if (value===undefined && typeof path==="object") {
|
if (value===undefined && typeof key==="object") {
|
||||||
// set(file, value): overwrite settings completely
|
// set(file, value): overwrite settings completely
|
||||||
require("Storage").writeJSON(file, path);
|
require("Storage").writeJSON(file, key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
path = path.split("."); // empty string is not OK (becomes [""])
|
var s = require("Storage").readJSON(file,1);
|
||||||
if (path.includes("")) {
|
if (typeof s!=="object") {
|
||||||
throw "Settings: path cannot contain empty elements";
|
s = {};
|
||||||
}
|
}
|
||||||
let setting;
|
s[key] = value;
|
||||||
try {setting = get(file);} catch(e) {} // if reading old settings failed we write a fresh object
|
require("Storage").write(file, s);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -116,8 +87,8 @@ function set(file, path, value) {
|
||||||
*/
|
*/
|
||||||
function open(file) {
|
function open(file) {
|
||||||
return {
|
return {
|
||||||
set: (path, val) => set(file, path, val),
|
set: (key, val) => set(file, key, val),
|
||||||
get: (path, def) => get(file, path, def),
|
get: (key, def) => get(file, key, def),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue