diff --git a/apps/qmsched/app.js b/apps/qmsched/app.js index 8e1141058..cc698ae1d 100644 --- a/apps/qmsched/app.js +++ b/apps/qmsched/app.js @@ -84,7 +84,6 @@ function formatTime(t) { */ function applyTheme() { const theme = (STORAGE.readJSON("setting.json", 1) || {}).theme; - if (theme && theme.dark===g.theme.dark) return; // already correct g.theme = theme; delete g.reset; g._reset = g.reset; @@ -105,24 +104,8 @@ function showThemeMenu(back, quiet){ function cl(x) { return g.setColor(x).getColor(); } var themesMenu = { '':{title:/*LANG*/'Theme', back: back}, - /*LANG*/'Dark BW': ()=>{ - set(option, { - fg:cl("#fff"), bg:cl("#000"), - fg2:cl("#fff"), bg2:cl("#004"), - fgH:cl("#fff"), bgH:cl("#00f"), - dark:true, - quiet: true - }); - back(); - }, - /*LANG*/'Light BW': ()=>{ - set(option, { - fg:cl("#000"), bg:cl("#fff"), - fg2:cl("#000"), bg2:cl("#cff"), - fgH:cl("#000"), bgH:cl("#0ff"), - dark:false, - quiet: true - }); + /*LANG*/'Default': ()=>{ + unset(option); back(); } }; @@ -131,14 +114,8 @@ function showThemeMenu(back, quiet){ n => { let newTheme = STORAGE.readJSON(n); themesMenu[newTheme.name ? newTheme.name : n] = () => { - set(option, { - fg:cl(newTheme.fg), bg:cl(newTheme.bg), - fg2:cl(newTheme.fg2), bg2:cl(newTheme.bg2), - fgH:cl(newTheme.fgH), bgH:cl(newTheme.bgH), - dark:newTheme.dark, - quiet: quiet - }); - back(); + set(option, n); + back(); }; } ); diff --git a/apps/qmsched/lib.js b/apps/qmsched/lib.js index f6107df5f..1d636f263 100644 --- a/apps/qmsched/lib.js +++ b/apps/qmsched/lib.js @@ -3,37 +3,70 @@ * @param {int} mode Quiet Mode */ function switchTheme(mode) { - let s = require("Storage").readJSON("setting.json", 1) || {}; - if (!!mode === s.theme.quiet) return; // nothing to do - // default themes, copied from settings.js:showThemeMenu() 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() - let q = require("Storage").readJSON("qmsched.json", 1) || {}; + const q = require("Storage").readJSON("qmsched.json", 1) || {}; let quietTheme = { // 'Dark BW' - fg: cl("#fff"), bg: cl("#000"), - fg2: cl("#0ff"), bg2: cl("#000"), - fgH: cl("#fff"), bgH: cl("#00f"), - dark: true, - quiet: true + fg:cl("#fff"), bg:cl("#000"), + fg2:cl("#fff"), bg2:cl("#004"), + fgH:cl("#fff"), bgH:cl("#00f"), + dark:true }; let normalTheme = { // 'Light BW' - fg: cl("#000"), bg: cl("#fff"), - fg2: cl("#000"), bg2: cl("#cff"), - fgH: cl("#000"), bgH: cl("#0ff"), - dark: false, - quiet: false + fg:cl("#000"), bg:cl("#fff"), + fg2:cl("#000"), bg2:cl("#cff"), + fgH:cl("#000"), bgH:cl("#0ff"), + dark:false }; - if (q.normalTheme) normalTheme = q.normalTheme; - if (q.quietTheme) quietTheme = q.quietTheme; + let miss = false; - s.theme = mode ? quietTheme : normalTheme; + // 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); - 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__); + // 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__); + } } /** * Apply LCD options and theme for given mode