diff --git a/apps/slpquiet/boot.js b/apps/slpquiet/boot.js index ffb2be69f..65d9340c0 100644 --- a/apps/slpquiet/boot.js +++ b/apps/slpquiet/boot.js @@ -24,7 +24,7 @@ if (typeof (global.sleeplog || {}).trigger === "object") { delete aSettings; if ((data.status === 3 || data.status === 4) && (data.prevStatus !== 3 && data.prevStatus !== 4)) { - bSettings = require("Storage").readJSON('setting.json', true) || {}; + let bSettings = require("Storage").readJSON('setting.json', true) || {}; let current = 0 | bSettings.quiet; console.log("quiet mode is:" + current); if (current !== quietMode) { @@ -37,7 +37,7 @@ if (typeof (global.sleeplog || {}).trigger === "object") { if ((data.status === 2 || data.status === 1) && (data.prevStatus !== 2 && data.prevStatus !== 1)) { let bSettings = require("Storage").readJSON('setting.json', true) || {}; - current = 0 | bSettings.quiet; + let current = 0 | bSettings.quiet; console.log("quiet mode is:" + current); if (current !== 0) { console.log("woken up"); diff --git a/apps/thmswtch/app.js b/apps/thmswtch/app.js index 8391e1a13..90cd8f0af 100644 --- a/apps/thmswtch/app.js +++ b/apps/thmswtch/app.js @@ -1,221 +1,71 @@ const SETTINGS_FILE = "themeSwitch.json"; const storage = require("Storage"); -var sunrise, sunset, date; -var SunCalc = require("suncalc"); // from modules folder let settings = storage.readJSON('setting.json', 1); let saved = storage.readJSON(SETTINGS_FILE, 1) || {}; -if (settings.theme.fg > 0) { - saved.darkModeActive = 1; -} else { - saved.darkModeActive = 0; -} -let dmH, dmM, lmH, lmM; -if (require("Storage").readJSON("themeSwitch.json", 1) !== undefined) { - dmH = parseInt(saved.darkModeAt.split(":")[0] | 0); - dmM = parseInt(saved.darkModeAt.split(":")[1] | 0); - lmH = parseInt(saved.lightModeAt.split(":")[0] | 0); - lmM = parseInt(saved.lightModeAt.split(":")[1] | 0); -} else { - dmH = 0; - dmM = 0; - lmH = 0; - lmM = 0; -} -// Main menu - -var mainmenu = { - "": { - "title": "Theme Switch" - }, - "< Back": function () { load(); }, - "Automatic Dark Mode": { - value: saved.darkMode | false, - format: v => v ? "On" : "Off", - min: 0, max: 1, step: 1, - onchange: v => { - saved.darkMode = v; - storage.writeJSON(SETTINGS_FILE, saved); - } - }, - "Dark Mode Active": { - value: saved.darkModeActive | false, - format: v => v ? "On" : "Off", - min: 0, max: 1, step: 1, - onchange: v => { - saved.darkModeActive = v; - storage.writeJSON(SETTINGS_FILE, saved); - if (v !== 0) { - setDarkTheme(); - Bangle.drawWidgets(); - } else { - setLightTheme(); - Bangle.drawWidgets(); - } - } - }, - "Dark Mode by Sun": { - value: saved.darkModeBySun | false, - format: v => v ? "On" : "Off", - min: 0, max: 1, step: 1, - onchange: v => { - saved.darkModeBySun = v; - if (v !== 0) { - //print("calculating sun times"); - calculateSunTimes(); - saved.lightModeAt = sunrise; - saved.darkModeAt = sunset; - //print("sunrise" +sunrise); - //print("sunset" +sunset); - } - storage.writeJSON(SETTINGS_FILE, saved); - }, - }, - "light mode at": { - value: saved.lightModeAt, - format: v => saved.lightModeAt, - onchange: function () { - if (saved.darkModeBySun === 0) { - E.showMenu(lightModeAtMenu); - } - else { - E.showAlert("Deactivate dark mode first!", "Action Blocked").then( - function () { E.showMenu(mainmenu); }); - } - } - }, - "dark mode at": { - value: saved.darkModeAt, - format: v => saved.darkModeAt, - onchange: function () { - if (saved.darkModeBySun === 0) { - E.showMenu(darkModeAtMenu); - } - else { - E.showAlert("Deactivate dark mode first!", "Action Blocked").then(function () { E.showMenu(mainmenu); }); - } - } - }, - "Exit": function () { load(); }, -}; - -var lightModeAtMenu = { - "": { - "title": "light mode at" - }, - "Hour": { - value: lmH, - min: 0, max: 23, step: 1, - onchange: v => { lmH = v; } - }, - "Minute": { - value: lmM, - min: 0, max: 59, step: 1, - onchange: v => { lmM = v; } - }, - "< Back": function () { - saved.lightModeAt = fixTime(lmH, lmM); - storage.writeJSON(SETTINGS_FILE, saved); - E.showMenu(mainmenu); - }, -}; - -var darkModeAtMenu = { - "": { - "title": "dark mode at" - }, - "Hour": { - value: dmH, - min: 0, max: 23, step: 1, - onchange: v => { dmH = v; } - }, - "Minute": { - value: dmM, - min: 0, max: 59, step: 1, - onchange: v => { dmM = v; } - }, - "< Back": function () { - saved.darkModeAt = fixTime(dmH, dmM); - storage.writeJSON(SETTINGS_FILE, saved); - E.showMenu(mainmenu); - }, -}; - -// Actually display the menu -E.showMenu(mainmenu); - -// Function to fix time format -function fixTime(h, m) { - if (h.toString().length < 2) { - h = "0" + h.toString(); - } - if (m.toString().length < 2) { - m = "0" + m.toString(); - } - return h.toString() + ":" + m.toString(); -} - -function calculateSunTimes() { - var location = require("Storage").readJSON("mylocation.json", 1) || {}; - location.lat = location.lat || 51.5072; - location.lon = location.lon || 0.1276; // London - date = new Date(Date.now()); - var times = SunCalc.getTimes(date, location.lat, location.lon); - sunrise = fixTime(times.sunrise.getHours(), times.sunrise.getMinutes()); - sunset = fixTime(times.sunset.getHours(), times.sunset.getMinutes()); - /* do we want to re-calculate this every day? Or we just assume - that 'show' will get called once a day? */ -} function cl(x) { return g.setColor(x).getColor(); } function upd(th) { - g.theme = th; - settings.theme = th; - storage.write('setting.json', settings); - delete g.reset; - g._reset = g.reset; - g.reset = function (n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; - g.clear = function (n) { if (n) g.reset(); return g.clearRect(0, 0, g.getWidth(), g.getHeight()); }; - g.clear(1); + g.theme = th; + settings.theme = th; + storage.write('setting.json', settings); + delete g.reset; + g._reset = g.reset; + g.reset = function (n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; + g.clear = function (n) { if (n) g.reset(); return g.clearRect(0, 0, g.getWidth(), g.getHeight()); }; + g.clear(1); } -//flipTheme function to be used in future version -// function flipTheme() { -// if (!g.theme.dark) { -// upd({ -// fg: cl("#fff"), bg: cl("#000"), -// fg2: cl("#fff"), bg2: cl("#004"), -// fgH: cl("#fff"), bgH: cl("#00f"), -// dark: true -// }); -// } else { -// upd({ -// fg: cl("#000"), bg: cl("#fff"), -// fg2: cl("#000"), bg2: cl("#cff"), -// fgH: cl("#000"), bgH: cl("#0ff"), -// dark: false -// }); -// } -// } +function flipTheme(saved) { + if (!g.theme.dark) { + upd({ + fg: cl("#fff"), bg: cl("#000"), + fg2: cl("#fff"), bg2: cl("#004"), + fgH: cl("#fff"), bgH: cl("#00f"), + dark: true + }); + + saved.darkModeActive = 1; + } else { + upd({ + fg: cl("#000"), bg: cl("#fff"), + fg2: cl("#000"), bg2: cl("#cff"), + fgH: cl("#000"), bgH: cl("#0ff"), + dark: false + }); + saved.darkModeActive = 0; + } + return saved; +} function setDarkTheme() { - if (!g.theme.dark) { - upd({ - fg: cl("#fff"), bg: cl("#000"), - fg2: cl("#fff"), bg2: cl("#004"), - fgH: cl("#fff"), bgH: cl("#00f"), - dark: true - }); - } + if (!g.theme.dark) { + upd({ + fg: cl("#fff"), bg: cl("#000"), + fg2: cl("#fff"), bg2: cl("#004"), + fgH: cl("#fff"), bgH: cl("#00f"), + dark: true + }); + } } function setLightTheme() { - if (g.theme.dark) { - upd({ - fg: cl("#000"), bg: cl("#fff"), - fg2: cl("#000"), bg2: cl("#cff"), - fgH: cl("#000"), bgH: cl("#0ff"), - dark: false - }); - } + if (g.theme.dark) { + upd({ + fg: cl("#000"), bg: cl("#fff"), + fg2: cl("#000"), bg2: cl("#cff"), + fgH: cl("#000"), bgH: cl("#0ff"), + dark: false + }); + } } + +if (settings.theme.fg > 0) { + saved.darkModeActive = 1; +} else { + saved.darkModeActive = 0; +} + +saved = flipTheme(saved); +storage.writeJSON(SETTINGS_FILE, saved); +Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/thmswtch/boot.js b/apps/thmswtch/boot.js index c02f05b5b..e4cf0c491 100644 --- a/apps/thmswtch/boot.js +++ b/apps/thmswtch/boot.js @@ -91,7 +91,7 @@ nextH = dmH; nextM = dmM; } - nextDecH = parseFloat(nextH) + parseFloat(nextM) / parseFloat(60); + let nextDecH = parseFloat(nextH) + parseFloat(nextM) / parseFloat(60); let t = 3600000 * (nextDecH - hr); // timeout in milliseconds if (t < 0) { t += 86400000; } // scheduled for tomorrow: add a day /* update theme mode at the correct time. */ diff --git a/apps/thmswtch/metadata.json b/apps/thmswtch/metadata.json index e2826acdd..581cbaff9 100644 --- a/apps/thmswtch/metadata.json +++ b/apps/thmswtch/metadata.json @@ -9,6 +9,7 @@ "readme": "README.md", "storage": [ {"name":"thmswtch.app.js","url":"app.js"}, + {"name":"thmswtch.settings.js","url":"settings.js"}, {"name":"thmswtch.boot.js","url":"boot.js"}, {"name":"thmswtch.img","url":"app-icon.js","evaluate":true} ] diff --git a/apps/thmswtch/settings.js b/apps/thmswtch/settings.js new file mode 100644 index 000000000..83ce6010f --- /dev/null +++ b/apps/thmswtch/settings.js @@ -0,0 +1,202 @@ +const SETTINGS_FILE = "themeSwitch.json"; +const storage = require("Storage"); +var sunrise, sunset, date; +var SunCalc = require("suncalc"); // from modules folder +let settings = storage.readJSON('setting.json', 1); +let saved = storage.readJSON(SETTINGS_FILE, 1) || {}; +if (settings.theme.fg > 0) { + saved.darkModeActive = 1; +} else { + saved.darkModeActive = 0; +} +let dmH, dmM, lmH, lmM; +if (require("Storage").readJSON("themeSwitch.json", 1) !== undefined) { + dmH = parseInt(saved.darkModeAt.split(":")[0] | 0); + dmM = parseInt(saved.darkModeAt.split(":")[1] | 0); + lmH = parseInt(saved.lightModeAt.split(":")[0] | 0); + lmM = parseInt(saved.lightModeAt.split(":")[1] | 0); +} else { + dmH = 0; + dmM = 0; + lmH = 0; + lmM = 0; +} +// Main menu + +var mainmenu = { + "": { + "title": "Theme Switch" + }, + "< Back": function () { load(); }, + "Automatic Dark Mode": { + value: saved.darkMode | false, + format: v => v ? "On" : "Off", + min: 0, max: 1, step: 1, + onchange: v => { + saved.darkMode = v; + storage.writeJSON(SETTINGS_FILE, saved); + } + }, + "Dark Mode Active": { + value: saved.darkModeActive | false, + format: v => v ? "On" : "Off", + min: 0, max: 1, step: 1, + onchange: v => { + saved.darkModeActive = v; + storage.writeJSON(SETTINGS_FILE, saved); + if (v !== 0) { + setDarkTheme(); + Bangle.drawWidgets(); + } else { + setLightTheme(); + Bangle.drawWidgets(); + } + } + }, + "Dark Mode by Sun": { + value: saved.darkModeBySun | false, + format: v => v ? "On" : "Off", + min: 0, max: 1, step: 1, + onchange: v => { + saved.darkModeBySun = v; + if (v !== 0) { + //print("calculating sun times"); + calculateSunTimes(); + saved.lightModeAt = sunrise; + saved.darkModeAt = sunset; + //print("sunrise" +sunrise); + //print("sunset" +sunset); + } + storage.writeJSON(SETTINGS_FILE, saved); + }, + }, + "light mode at": { + value: saved.lightModeAt, + format: v => saved.lightModeAt, + onchange: function () { + if (saved.darkModeBySun === 0) { + E.showMenu(lightModeAtMenu); + } + else { + E.showAlert("Deactivate dark mode first!", "Action Blocked").then( + function () { E.showMenu(mainmenu); }); + } + } + }, + "dark mode at": { + value: saved.darkModeAt, + format: v => saved.darkModeAt, + onchange: function () { + if (saved.darkModeBySun === 0) { + E.showMenu(darkModeAtMenu); + } + else { + E.showAlert("Deactivate dark mode first!", "Action Blocked").then(function () { E.showMenu(mainmenu); }); + } + } + }, + "Exit": function () { load(); }, +}; + +var lightModeAtMenu = { + "": { + "title": "light mode at" + }, + "Hour": { + value: lmH, + min: 0, max: 23, step: 1, + onchange: v => { lmH = v; } + }, + "Minute": { + value: lmM, + min: 0, max: 59, step: 1, + onchange: v => { lmM = v; } + }, + "< Back": function () { + saved.lightModeAt = fixTime(lmH, lmM); + storage.writeJSON(SETTINGS_FILE, saved); + E.showMenu(mainmenu); + }, +}; + +var darkModeAtMenu = { + "": { + "title": "dark mode at" + }, + "Hour": { + value: dmH, + min: 0, max: 23, step: 1, + onchange: v => { dmH = v; } + }, + "Minute": { + value: dmM, + min: 0, max: 59, step: 1, + onchange: v => { dmM = v; } + }, + "< Back": function () { + saved.darkModeAt = fixTime(dmH, dmM); + storage.writeJSON(SETTINGS_FILE, saved); + E.showMenu(mainmenu); + }, +}; + +// Actually display the menu +E.showMenu(mainmenu); + +// Function to fix time format +function fixTime(h, m) { + if (h.toString().length < 2) { + h = "0" + h.toString(); + } + if (m.toString().length < 2) { + m = "0" + m.toString(); + } + return h.toString() + ":" + m.toString(); +} + +function calculateSunTimes() { + var location = require("Storage").readJSON("mylocation.json", 1) || {}; + location.lat = location.lat || 51.5072; + location.lon = location.lon || 0.1276; // London + date = new Date(Date.now()); + var times = SunCalc.getTimes(date, location.lat, location.lon); + sunrise = fixTime(times.sunrise.getHours(), times.sunrise.getMinutes()); + sunset = fixTime(times.sunset.getHours(), times.sunset.getMinutes()); + /* do we want to re-calculate this every day? Or we just assume + that 'show' will get called once a day? */ +} + +function cl(x) { return g.setColor(x).getColor(); } + +function upd(th) { + g.theme = th; + settings.theme = th; + storage.write('setting.json', settings); + delete g.reset; + g._reset = g.reset; + g.reset = function (n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; + g.clear = function (n) { if (n) g.reset(); return g.clearRect(0, 0, g.getWidth(), g.getHeight()); }; + g.clear(1); +} + +function setDarkTheme() { + if (!g.theme.dark) { + upd({ + fg: cl("#fff"), bg: cl("#000"), + fg2: cl("#fff"), bg2: cl("#004"), + fgH: cl("#fff"), bgH: cl("#00f"), + dark: true + }); + } +} + +function setLightTheme() { + if (g.theme.dark) { + upd({ + fg: cl("#000"), bg: cl("#fff"), + fg2: cl("#000"), bg2: cl("#cff"), + fgH: cl("#000"), bgH: cl("#0ff"), + dark: false + }); + } +} \ No newline at end of file