mirror of https://github.com/espruino/BangleApps
thmswtch + slpquiet
-further linter fixes thmswtch -movement of menu to config file and creation of app.js for switching onlypull/3258/head
parent
f26169856e
commit
cd8e2379db
|
@ -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");
|
||||
|
|
|
@ -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();
|
|
@ -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. */
|
||||
|
|
|
@ -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}
|
||||
]
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue