BangleApps/apps/qmsched/lib.js

96 lines
2.8 KiB
JavaScript
Raw Normal View History

/**
2022-01-12 18:08:19 +00:00
* Apply appropriate theme for given mode
* @param {int} mode Quiet Mode
*/
function switchTheme(mode) {
function cl(x) { return g.setColor(x).getColor(); }
const readTheme = function(name) {
const n = require("Storage").readJSON(name);
return {
fg:cl(n.fg), bg:cl(n.bg),
fg2:cl(n.fg2), bg2:cl(n.bg2),
fgH:cl(n.fgH), bgH:cl(n.bgH),
dark:n.dark
};
}
const s = require("Storage").readJSON("setting.json", 1) || {};
// default themes, copied from settings.js:showThemeMenu()
const q = require("Storage").readJSON("qmsched.json", 1) || {};
let quietTheme = {
2022-01-12 18:08:19 +00:00
// 'Dark BW'
fg:cl("#fff"), bg:cl("#000"),
fg2:cl("#fff"), bg2:cl("#004"),
fgH:cl("#fff"), bgH:cl("#00f"),
dark:true
};
let normalTheme = {
2022-01-12 18:08:19 +00:00
// 'Light BW'
fg:cl("#000"), bg:cl("#fff"),
fg2:cl("#000"), bg2:cl("#cff"),
fgH:cl("#000"), bgH:cl("#0ff"),
dark:false
2022-01-12 18:08:19 +00:00
};
let miss = false;
// ensure referenced theme files actually exist or remove reference
if (q.normalTheme && require("Storage").read(q.normalTheme) == undefined){
delete q.normalTheme;
miss = true;
}
if (q.quietTheme && require("Storage").read(q.quietTheme) == undefined){
delete q.quietTheme;
miss = true;
}
if (miss)
require("Storage").writeJSON("qmsched.json", q);
// load theme files
if (q.normalTheme)
normalTheme = readTheme(q.normalTheme);
if (q.quietTheme)
quietTheme = readTheme(q.quietTheme);
const newTheme = mode ? quietTheme : normalTheme;
let changed = false;
for (const c in newTheme) {
if (!(c in g.theme) || newTheme[c] !== g.theme[c]) {
changed = true;
break;
}
}
if (changed) {
s.theme = newTheme;
require("Storage").writeJSON("setting.json", s);
// reload clocks with new theme, otherwise just wait for user to switch apps
if (Bangle.CLOCK) load(global.__FILE__);
}
2022-01-12 18:08:19 +00:00
}
/**
* Apply LCD options and theme for given mode
* @param {int} mode Quiet Mode
*/
exports.applyOptions = function(mode) {
const s = require("Storage").readJSON(mode ? "qmsched.json" : "setting.json", 1) || {};
const get = (k, d) => k in s ? s[k] : d;
Bangle.setOptions(get("options", {}));
Bangle.setLCDBrightness(get("brightness", 1));
Bangle.setLCDTimeout(get("timeout", 10));
2022-01-12 18:08:19 +00:00
if ((require("Storage").readJSON("qmsched.json", 1) || {}).switchTheme) switchTheme(mode);
};
2021-03-25 22:25:04 +00:00
/**
* Set new Quiet Mode and apply Bangle options
* @param {int} mode Quiet Mode
*/
exports.setMode = function(mode) {
require("Storage").writeJSON("setting.json", Object.assign(
require("Storage").readJSON("setting.json", 1) || {},
{quiet:mode}
));
exports.applyOptions(mode);
if (typeof WIDGETS === "object" && "qmsched" in WIDGETS) WIDGETS["qmsched"].draw();
if (global.setAppQuietMode) setAppQuietMode(mode); // current app knows how to update itself
};