2022-02-11 08:29:02 +00:00
|
|
|
(function(back) {
|
2022-05-20 15:17:30 +00:00
|
|
|
// define settings filename
|
2022-02-11 08:29:02 +00:00
|
|
|
var filename = "sleeplog.json";
|
2022-05-20 15:17:30 +00:00
|
|
|
// define logging prompt display status
|
|
|
|
var thresholdsPrompt = true;
|
2022-02-11 08:29:02 +00:00
|
|
|
|
2022-05-20 15:17:30 +00:00
|
|
|
// define default vaules
|
|
|
|
var defaults = {
|
|
|
|
// main settings
|
|
|
|
enabled: true, // en-/disable completely
|
|
|
|
// threshold settings
|
|
|
|
maxAwake: 36E5, // [ms] maximal awake time to count for consecutive sleep
|
|
|
|
minConsec: 18E5, // [ms] minimal time to count for consecutive sleep
|
|
|
|
deepTh: 100, // threshold for deep sleep
|
|
|
|
lightTh: 200, // threshold for light sleep
|
|
|
|
// app settings
|
|
|
|
breakToD: 12, // [h] time of day when to start/end graphs
|
2022-05-20 16:22:11 +00:00
|
|
|
appTimeout: 0 // lock and backlight timeouts for the app
|
2022-05-20 15:17:30 +00:00
|
|
|
};
|
2022-02-11 08:29:02 +00:00
|
|
|
|
2022-05-20 15:17:30 +00:00
|
|
|
// assign loaded settings to default values
|
|
|
|
var settings = Object.assign(defaults, require("Storage").readJSON(filename, true) || {});
|
2022-02-11 08:29:02 +00:00
|
|
|
|
2022-05-20 15:17:30 +00:00
|
|
|
// write change to storage
|
|
|
|
function writeSetting() {
|
|
|
|
require("Storage").writeJSON(filename, settings);
|
2022-02-12 00:43:58 +00:00
|
|
|
}
|
|
|
|
|
2022-05-20 15:17:30 +00:00
|
|
|
// show menu to change thresholds
|
|
|
|
function showThresholds() {
|
|
|
|
// setup logging menu
|
|
|
|
var menu;
|
|
|
|
var thresholdsMenu = {
|
2022-02-11 08:29:02 +00:00
|
|
|
"": {
|
2022-05-20 15:17:30 +00:00
|
|
|
title: /*LANG*/"Thresholds"
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"< Back": () => showMain(2),
|
|
|
|
/*LANG*/"Max Awake": {
|
|
|
|
value: settings.maxAwake / 6E4,
|
|
|
|
step: 10,
|
|
|
|
min: 10,
|
2022-02-15 18:47:15 +00:00
|
|
|
max: 120,
|
|
|
|
wrap: true,
|
2022-05-20 15:17:30 +00:00
|
|
|
noList: true,
|
|
|
|
format: v => v + /*LANG*/"min",
|
|
|
|
onchange: v => {
|
|
|
|
settings.maxAwake = v * 6E4;
|
|
|
|
writeSetting();
|
|
|
|
}
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"Min Consecutive": {
|
|
|
|
value: settings.minConsec / 6E4,
|
|
|
|
step: 10,
|
|
|
|
min: 10,
|
2022-02-15 18:47:15 +00:00
|
|
|
max: 120,
|
|
|
|
wrap: true,
|
2022-05-20 15:17:30 +00:00
|
|
|
noList: true,
|
|
|
|
format: v => v + /*LANG*/"min",
|
|
|
|
onchange: v => {
|
|
|
|
settings.minConsec = v * 6E4;
|
|
|
|
writeSetting();
|
2022-02-12 00:43:58 +00:00
|
|
|
}
|
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"Deep Sleep": {
|
|
|
|
value: settings.deepTh,
|
2022-02-13 19:54:26 +00:00
|
|
|
step: 1,
|
2022-05-20 15:17:30 +00:00
|
|
|
min: 30,
|
2022-02-15 18:47:15 +00:00
|
|
|
max: 200,
|
|
|
|
wrap: true,
|
2022-05-20 15:17:30 +00:00
|
|
|
noList: true,
|
|
|
|
onchange: v => {
|
|
|
|
settings.deepTh = v;
|
|
|
|
writeSetting();
|
|
|
|
}
|
2022-02-12 00:43:58 +00:00
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"Light Sleep": {
|
|
|
|
value: settings.lightTh,
|
|
|
|
step: 10,
|
|
|
|
min: 100,
|
|
|
|
max: 400,
|
2022-02-15 18:47:15 +00:00
|
|
|
wrap: true,
|
2022-05-20 15:17:30 +00:00
|
|
|
noList: true,
|
|
|
|
onchange: v => {
|
|
|
|
settings.lightTh = v;
|
|
|
|
writeSetting();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
/*LANG*/"Reset to Default": () => {
|
|
|
|
settings.maxAwake = defaults.maxAwake;
|
|
|
|
settings.minConsec = defaults.minConsec;
|
|
|
|
settings.deepTh = defaults.deepTh;
|
|
|
|
settings.lightTh = defaults.lightTh;
|
|
|
|
writeSetting();
|
|
|
|
showThresholds();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// display info/warning prompt or menu
|
|
|
|
if (thresholdsPrompt) {
|
|
|
|
thresholdsPrompt = false;
|
|
|
|
E.showPrompt("Changes take affect from now on, not retrospective", {
|
|
|
|
title: /*LANG*/"Thresholds",
|
|
|
|
buttons: {
|
|
|
|
/*LANG*/"Ok": 0
|
|
|
|
}
|
|
|
|
}).then(() => menu = E.showMenu(thresholdsMenu));
|
|
|
|
} else {
|
|
|
|
menu = E.showMenu(thresholdsMenu);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// show menu or promt to change debugging
|
|
|
|
function showDebug() {
|
|
|
|
// check if sleeplog is available
|
|
|
|
if (global.sleeplog) {
|
|
|
|
// get debug status, file and duration
|
|
|
|
var enabled = !!sleeplog.debug;
|
|
|
|
var file = typeof sleeplog.debug === "object";
|
|
|
|
var duration = 0;
|
|
|
|
// setup debugging menu
|
|
|
|
var debugMenu = {
|
|
|
|
"": {
|
|
|
|
title: /*LANG*/"Debugging"
|
|
|
|
},
|
|
|
|
/*LANG*/"< Back": () => {
|
|
|
|
// check if some value has changed
|
|
|
|
if (enabled !== !!sleeplog.debug || file !== (typeof sleeplog.debug === "object") || duration)
|
|
|
|
require("sleeplog").setDebug(enabled, file ? duration || 12 : undefined);
|
|
|
|
// redraw main menu
|
|
|
|
showMain(7);
|
|
|
|
},
|
|
|
|
/*LANG*/"Display log": () => {
|
|
|
|
// choose log...
|
|
|
|
E.showPrompt( /*LANG*/"Function\nunder\nconstruction.", {
|
|
|
|
title: /*LANG*/"Debug log",
|
|
|
|
buttons: {
|
|
|
|
/*LANG*/"Back": 0
|
|
|
|
}
|
|
|
|
}).then(() => menu = E.showMenu(debugMenu));
|
|
|
|
},
|
2022-05-20 16:28:05 +00:00
|
|
|
/*LANG*/"Enable": {
|
2022-05-20 15:17:30 +00:00
|
|
|
value: enabled,
|
|
|
|
onchange: v => enabled = v
|
|
|
|
},
|
2022-05-20 16:28:05 +00:00
|
|
|
/*LANG*/"write File": {
|
2022-05-20 15:17:30 +00:00
|
|
|
value: file,
|
|
|
|
onchange: v => file = v
|
|
|
|
},
|
|
|
|
/*LANG*/"Duration": {
|
|
|
|
value: file ? (sleeplog.debug.writeUntil - Date.now()) / 36E5 | 0 : 12,
|
|
|
|
min: 1,
|
|
|
|
max: 96,
|
|
|
|
wrap: true,
|
|
|
|
format: v => v + /*LANG*/ "h",
|
|
|
|
onchange: v => duration = v
|
|
|
|
},
|
|
|
|
/*LANG*/"Cancel": () => showMain(7),
|
|
|
|
};
|
|
|
|
// show menu
|
|
|
|
var menu = E.showMenu(debugMenu);
|
|
|
|
} else {
|
|
|
|
// show error prompt
|
|
|
|
E.showPrompt("Sleeplog" + /*LANG*/"not enabled!", {
|
|
|
|
title: /*LANG*/"Debugging",
|
|
|
|
buttons: {
|
|
|
|
/*LANG*/"Back": 7
|
|
|
|
}
|
|
|
|
}).then(showMain);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// show main menu
|
|
|
|
function showMain(selected) {
|
|
|
|
// set debug image
|
|
|
|
var debugImg = !global.sleeplog ?
|
|
|
|
"FBSBAOAAfwAP+AH3wD4+B8Hw+A+fAH/gA/wAH4AB+AA/wAf+APnwHw+D4Hx8A++AH/AA/gAH" : // X
|
|
|
|
typeof sleeplog.debug === "object" ?
|
|
|
|
"FBSBAB/4AQDAF+4BfvAX74F+CBf+gX/oFJKBf+gUkoF/6BSSgX/oFJ6Bf+gX/oF/6BAAgf/4" : // file
|
|
|
|
sleeplog.debug ?
|
|
|
|
"FBSBAP//+f/V///4AAGAABkAAZgAGcABjgAYcAGDgBhwAY4AGcABmH+ZB/mAABgAAYAAH///" : // console
|
|
|
|
0; // off
|
|
|
|
debugImg = debugImg ? "\0" + atob(debugImg) : false;
|
|
|
|
// set menu
|
|
|
|
var mainMenu = {
|
|
|
|
"": {
|
|
|
|
title: "Sleep Log",
|
|
|
|
selected: selected
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"< Back": () => back(),
|
|
|
|
/*LANG*/"Thresholds": () => showThresholds(),
|
|
|
|
/*LANG*/"Break ToD": {
|
|
|
|
value: settings.breakToD,
|
2022-02-11 08:29:02 +00:00
|
|
|
step: 1,
|
2022-05-20 15:17:30 +00:00
|
|
|
min: 0,
|
|
|
|
max: 23,
|
|
|
|
wrap: true,
|
|
|
|
noList: true,
|
|
|
|
format: v => v + ":00",
|
|
|
|
onchange: v => {
|
|
|
|
settings.breakToD = v;
|
|
|
|
writeSetting();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
/*LANG*/"App Timeout": {
|
|
|
|
value: settings.appTimeout / 1E3,
|
|
|
|
step: 10,
|
2022-05-20 16:22:11 +00:00
|
|
|
min: 0,
|
2022-05-20 15:17:30 +00:00
|
|
|
max: 120,
|
2022-02-15 18:47:15 +00:00
|
|
|
wrap: true,
|
2022-05-20 15:17:30 +00:00
|
|
|
noList: true,
|
2022-05-20 16:22:11 +00:00
|
|
|
format: v => v ? v + "s" : "-",
|
2022-05-20 15:17:30 +00:00
|
|
|
onchange: v => {
|
|
|
|
settings.appTimeout = v * 1E3;
|
|
|
|
writeSetting();
|
|
|
|
}
|
2022-02-11 08:29:02 +00:00
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"Enabled": {
|
2022-02-11 08:29:02 +00:00
|
|
|
value: settings.enabled,
|
2022-05-20 15:17:30 +00:00
|
|
|
onchange: v => {
|
2022-02-12 00:43:58 +00:00
|
|
|
settings.enabled = v;
|
2022-05-20 15:17:30 +00:00
|
|
|
require("sleeplog").setEnabled(v);
|
2022-02-11 08:29:02 +00:00
|
|
|
}
|
|
|
|
},
|
2022-05-20 15:17:30 +00:00
|
|
|
/*LANG*/"Debugging": {
|
|
|
|
value: debugImg,
|
|
|
|
onchange: () => setTimeout(showDebug, 10)
|
2022-02-12 00:43:58 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
var menu = E.showMenu(mainMenu);
|
2022-02-11 08:29:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// draw main menu
|
|
|
|
showMain();
|
|
|
|
})
|