[sleeplogalarm] Add settings and dependency

pull/2323/head
storm64 2022-11-10 15:14:53 +01:00
parent a07747ca25
commit 57f0696998
3 changed files with 129 additions and 20 deletions

View File

@ -7,22 +7,22 @@ This widget searches for active alarms and raises the alarm event up to the defi
---
#### Inside the settings: !!! dummy entries !!!
- __Thresholds__ submenu
- __Thresholds__ submenu
Changes take effect from now on, not retrospective!
- __Max Awake__ | maximal awake duration
- __Max Awake__ | maximal awake duration
_10min_ / _20min_ / ... / __60min__ / ... / _120min_
- __Min Consecutive__ | minimal consecutive sleep duration
- __Min Consecutive__ | minimal consecutive sleep duration
_10min_ / _20min_ / ... / __30min__ / ... / _120min_
- __Deep Sleep__ | deep sleep threshold
- __Deep Sleep__ | deep sleep threshold
_30_ / _31_ / ... / __100__ / ... / _200_
- __Light Sleep__ | light sleep threshold
_100_ / _110_ / ... / __200__ / ... / _400_
- __Light Sleep__ | light sleep threshold
_100_ / _110_ / ... / __200__ / ... / _400_
- __Reset to Default__ | reset to bold values above
- __BreakToD__ | time of day to break view
- __BreakToD__ | time of day to break view
_0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_
- __App Timeout__ | app specific lock timeout
- __App Timeout__ | app specific lock timeout
__0s__ / _10s_ / ... / _120s_
- __Enabled__ | completely en-/disables the background service
- __Enabled__ | completely en-/disables the background service
__on__ / _off_
---
@ -30,8 +30,6 @@ This widget searches for active alarms and raises the alarm event up to the defi
---
#### To do list
- widget.js
- settings.js
- README.md
#### Requests, Bugs and Feedback

View File

@ -8,6 +8,7 @@
"type": "widget",
"tags": "tool,widget",
"supports": ["BANGLEJS2"],
"dependencies": {"sleeplog": "app"},
"readme": "README.md",
"storage": [
{"name": "sleeplogalarm.settings.js", "url": "settings.js"},

View File

@ -1,19 +1,66 @@
(function(back) {
// define settings filename
var filename = "sleeplogalarm.json";
var filename = "sleeplogalarm.settings.json";
// define default vaules
var defaults = {
};
// assign loaded settings to default values
var settings = Object.assign(defaults, require("Storage").readJSON(filename, true) || {});
// define settings
var settings = Object.assign({
enabled: true,
hide: false,
drawRange: true,
color: g.theme.dark ? 65504 : 31, // yellow or blue
from: 4, // 0400
to: 8, // 0800
earlier: 30,
disableOnAlarm: false, // !!! not available if alarm is at the next day
msgAsPrefix: true,
msg: "...\n",
vibrate: "..",
as: true
}, require("Storage").readJSON(filename, true) || {});
// write change to storage
function writeSetting() {
require("Storage").writeJSON(filename, settings);
}
// show widget menu
function showWidMenu() {
// set menu
var widgetMenu = {
"": {
title: "Widget Settings"
},
/*LANG*/"< Back": () => showMain(7),
/*LANG*/"hide complete": {
value: settings.hide,
onchange: v => {
settings.hide = v;
writeSetting();
}
},
/*LANG*/"draw time range": {
value: settings.drawRange,
onchange: v => {
settings.drawRange = v;
writeSetting();
}
},
/*LANG*/"color": {
colors: [63488, 65504, 2016, 2047, 31, 63519, 0, 65535],
value: this.colors.indexOf(settings.color),
min: 0,
max: this.colors.length -1,
wrap: true,
format: v => ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"][v],
onchange: v => {
settings.color = this.colors[v];
writeSetting();
}
}
};
var menu = E.showMenu(widgetMenu);
}
// show main menu
function showMain(selected) {
// set menu
@ -23,19 +70,82 @@
selected: selected
},
/*LANG*/"< Back": () => back(),
/*LANG*/"up to": {
/*LANG*/"from": {
value: settings.from,
min: 0,
max: 23,
wrap: true,
noList: true,
format: v => v + ":00",
onchange: v => {
settings.from = v;
writeSetting();
}
},
/*LANG*/"to": {
value: settings.to,
min: 1,
max: 24,
wrap: true,
noList: true,
format: v => v + ":00",
onchange: v => {
settings.to = v;
writeSetting();
}
},
/*LANG*/"erlier": {
value: settings.earlier,
step: 10,
min: 10,
max: 120,
wrap: true,
noList: true,
format: v => v + "min earlier",
format: v => v + "min",
onchange: v => {
settings.earlier = v;
writeSetting();
}
},
/*LANG*/"disable on alarm": {
value: settings.disableOnAlarm,
onchange: v => {
settings.disableOnAlarm = v;
writeSetting();
}
},
/*LANG*/"message as prefix": {
value: settings.msgAsPrefix,
onchange: v => {
settings.msgAsPrefix = v;
writeSetting();
}
},
/*LANG*/"msg": {
value: settings.msg,
format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v,
// setTimeout required to load after menu refresh
onchange: () => setTimeout(msg => {
if (require("Storage").read("textinput")) {
g.clear();
require("textinput").input({text: msg}).then(result => {
settings.msg = result;
writeSetting();
showMenu(7);
});
} else {
E.showAlert(/*LANG*/"No keyboard app installed").then(() => showMenu(7));
}
}),
},
/*LANG*/"vibration pattern": require("buzz_menu.js").pattern(
settings.vibrate,
v => {
settings.vibrate = v;
writeSetting();
}
),
/*LANG*/"Widget Settings": () => showWidMenu(),
/*LANG*/"Enabled": {
value: settings.enabled,
onchange: v => {