2023-04-13 16:51:04 +00:00
|
|
|
type DrainedSettings = {
|
|
|
|
battery?: number,
|
2023-04-19 17:13:23 +00:00
|
|
|
restore?: number,
|
2023-04-13 16:51:04 +00:00
|
|
|
interval?: number,
|
2023-05-07 09:36:31 +00:00
|
|
|
keepStartup?: ShortBoolean,
|
2023-05-07 09:39:14 +00:00
|
|
|
exceptions?: string[],
|
2023-04-13 16:51:04 +00:00
|
|
|
};
|
|
|
|
|
2023-04-20 12:06:29 +00:00
|
|
|
(back => {
|
2023-04-08 07:25:27 +00:00
|
|
|
const SETTINGS_FILE = "drained.setting.json";
|
|
|
|
|
|
|
|
const storage = require("Storage")
|
2023-04-13 16:51:04 +00:00
|
|
|
const settings: DrainedSettings = storage.readJSON(SETTINGS_FILE, true) || {};
|
2023-04-08 07:25:27 +00:00
|
|
|
settings.battery ??= 5;
|
2023-04-19 17:13:23 +00:00
|
|
|
settings.restore ??= 20;
|
2023-04-08 07:25:27 +00:00
|
|
|
settings.interval ??= 10;
|
2023-05-07 09:36:31 +00:00
|
|
|
settings.keepStartup ??= true;
|
2023-05-07 09:39:14 +00:00
|
|
|
settings.exceptions ??= ["widdst.0"]; // daylight savings
|
2023-04-08 07:25:27 +00:00
|
|
|
|
|
|
|
const save = () => {
|
|
|
|
storage.writeJSON(SETTINGS_FILE, settings)
|
|
|
|
};
|
|
|
|
|
2023-05-07 09:39:14 +00:00
|
|
|
const menu: Menu = {
|
2023-04-08 07:25:27 +00:00
|
|
|
"": { "title": "Drained" },
|
|
|
|
"< Back": back,
|
2023-04-11 17:25:11 +00:00
|
|
|
"Trigger at batt%": {
|
2023-04-08 07:25:27 +00:00
|
|
|
value: settings.battery,
|
|
|
|
min: 0,
|
|
|
|
max: 95,
|
|
|
|
step: 5,
|
2023-04-11 17:25:11 +00:00
|
|
|
format: (v: number) => `${v}%`,
|
2023-04-08 07:25:27 +00:00
|
|
|
onchange: (v: number) => {
|
|
|
|
settings.battery = v;
|
|
|
|
save();
|
|
|
|
},
|
|
|
|
},
|
2023-04-11 17:25:11 +00:00
|
|
|
"Poll interval": {
|
2023-04-08 07:25:27 +00:00
|
|
|
value: settings.interval,
|
|
|
|
min: 1,
|
|
|
|
max: 60 * 2,
|
|
|
|
step: 5,
|
2023-04-11 17:25:11 +00:00
|
|
|
format: (v: number) => `${v} mins`,
|
2023-04-08 07:25:27 +00:00
|
|
|
onchange: (v: number) => {
|
|
|
|
settings.interval = v;
|
|
|
|
save();
|
|
|
|
},
|
|
|
|
},
|
2023-04-19 17:13:23 +00:00
|
|
|
"Restore watch at %": {
|
|
|
|
value: settings.restore,
|
|
|
|
min: 0,
|
|
|
|
max: 95,
|
|
|
|
step: 5,
|
|
|
|
format: (v: number) => `${v}%`,
|
|
|
|
onchange: (v: number) => {
|
|
|
|
settings.restore = v;
|
|
|
|
save();
|
|
|
|
},
|
|
|
|
},
|
2023-05-07 09:36:31 +00:00
|
|
|
"Keep startup code": {
|
|
|
|
value: settings.keepStartup as boolean,
|
|
|
|
onchange: (b: boolean) => {
|
|
|
|
settings.keepStartup = b;
|
|
|
|
save();
|
2023-05-10 20:24:47 +00:00
|
|
|
updateAndRedraw();
|
2023-05-07 09:36:31 +00:00
|
|
|
},
|
|
|
|
},
|
2023-05-07 09:39:14 +00:00
|
|
|
};
|
|
|
|
|
2023-05-10 20:24:47 +00:00
|
|
|
const updateAndRedraw = () => {
|
|
|
|
// will change the menu, queue redraw:
|
|
|
|
setTimeout(() => { E.showMenu(menu) }, 10);
|
|
|
|
|
2023-05-07 09:39:14 +00:00
|
|
|
if (settings.keepStartup) {
|
|
|
|
delete menu["Startup exceptions"];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
menu["Startup exceptions"] = () => E.showMenu(bootExceptions);
|
|
|
|
|
|
|
|
const bootExceptions: Menu = {
|
|
|
|
"": { "title" : "Startup exceptions" },
|
|
|
|
"< Back": () => E.showMenu(menu),
|
|
|
|
};
|
|
|
|
|
|
|
|
storage.list(/\.boot\.js/)
|
|
|
|
.map(name => name.replace(".boot.js", ""))
|
|
|
|
.forEach((name: string) => {
|
|
|
|
bootExceptions[name] = {
|
|
|
|
value: settings.exceptions!.indexOf(name) >= 0,
|
|
|
|
onchange: (b: boolean) => {
|
|
|
|
if (b) {
|
|
|
|
settings.exceptions!.push(name);
|
|
|
|
} else {
|
|
|
|
const i = settings.exceptions!.indexOf(name);
|
|
|
|
if (i >= 0) settings.exceptions!.splice(i, 1);
|
|
|
|
}
|
|
|
|
save();
|
|
|
|
},
|
|
|
|
};
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2023-05-10 20:24:47 +00:00
|
|
|
updateAndRedraw();
|
2023-04-20 12:06:29 +00:00
|
|
|
}) satisfies SettingsFunc
|