[sleeplogalarm] Reorder settings + filter for msg

master
storm64 2022-11-17 15:16:18 +01:00
parent 5720204307
commit 8800ba8fda
3 changed files with 95 additions and 68 deletions

View File

@ -2,14 +2,14 @@
var sched = require("sched"); var sched = require("sched");
// find next active alarm in range // find next active alarm in range
function getNextAlarm(allAlarms, from, to, withId) { function getNextAlarm(allAlarms, from, to, msg, withId) {
if (withId) allAlarms = allAlarms.map((a, idx) => { if (withId) allAlarms = allAlarms.map((a, idx) => {
a.idx = idx; a.idx = idx;
return a; return a;
}); });
// return next active alarms in range // return next active alarms in range
return allAlarms.filter( return allAlarms.filter(
a => a.on && !a.timer && a.t >= from && a.t < to a => a.on && !a.timer && a.t >= from && a.t < to && (!msg || a.msg.includes(msg))
).map(a => { // add time to alarm ).map(a => { // add time to alarm
a.tTo = sched.getTimeToAlarm(a); a.tTo = sched.getTimeToAlarm(a);
return a; return a;
@ -23,17 +23,18 @@ exports = {
getSettings: function() { getSettings: function() {
return Object.assign({ return Object.assign({
enabled: true, enabled: true,
hide: false,
drawTime: true,
color: g.theme.dark ? 65504 : 31, // yellow or blue
from: 4, // 0400
to: 8, // 0800
earlier: 30, earlier: 30,
filter_from: 0,
filter_to: 24,
filter_msg: "",
vibrate: "..",
msg: "...\n",
msgAsPrefix: true, msgAsPrefix: true,
disableOnAlarm: false, // !!! not available if alarm is at the next day disableOnAlarm: false, // !!! not available if alarm is at the next day
msg: "...\n", as: true,
vibrate: "..", wid_hide: false,
as: true wid_time: true,
wid_color: g.theme.dark ? 65504 : 31, // yellow or blue
}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {});
}, },
@ -46,7 +47,7 @@ exports = {
var settings = exports.getSettings(); var settings = exports.getSettings();
// set the alarm time // set the alarm time
this.time = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5).t; this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg).t;
// abort if no alarm time could be found inside range // abort if no alarm time could be found inside range
if (!this.time) return; if (!this.time) return;
@ -78,7 +79,7 @@ exports = {
var allAlarms = sched.getAlarms(); var allAlarms = sched.getAlarms();
// find first active alarm // find first active alarm
var alarm = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5, settings.disableOnAlarm); var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg, settings.disableOnAlarm);
// clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm // clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm
sleeplog.trigger.sleeplogalarm = {last: alarm.t}; sleeplog.trigger.sleeplogalarm = {last: alarm.t};

View File

@ -7,6 +7,66 @@
require("Storage").writeJSON("sleeplogalarm.settings.json", settings); require("Storage").writeJSON("sleeplogalarm.settings.json", settings);
} }
// read input from keyboard
function readInput(setting, retPos, cb) {
setTimeout((setting, retPos, cb) => {
if (require("Storage").read("textinput")) {
g.clear();
require("textinput").input({text: settings[setting]}).then(result => {
settings[setting] = result;
writeSetting();
cb(retPos);
});
} else {
E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(retPos));
}
}, 0, setting, retPos, cb);
}
// show widget menu
function showFilterMenu() {
// set menu
var filterMenu = {
"": {
title: "Filter Alarm"
},
/*LANG*/"< Back": () => showMain(2),
/*LANG*/"time from": {
value: settings.filter_from,
step: 0.25,
min: 0,
max: 23,
wrap: true,
noList: true,
format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"),
onchange: v => {
settings.filter_from = v;
writeSetting();
}
},
/*LANG*/"time to": {
value: settings.filter_to,
step: 0.25,
min: 1,
max: 24,
wrap: true,
noList: true,
format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"),
onchange: v => {
settings.filter_to = v;
writeSetting();
}
},
/*LANG*/"msg includes": {
value: settings.filter_msg,
format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v,
// setTimeout required to load after menu refresh
onchange: () => readInput("filter_msg", 3, showFilterMenu)
}
};
var menu = E.showMenu(filterMenu);
}
// show widget menu // show widget menu
function showWidMenu() { function showWidMenu() {
// define color values and names // define color values and names
@ -18,29 +78,29 @@
"": { "": {
title: "Widget Settings" title: "Widget Settings"
}, },
/*LANG*/"< Back": () => showMain(7), /*LANG*/"< Back": () => showMain(8),
/*LANG*/"hide": { /*LANG*/"hide": {
value: settings.hide, value: settings.wid_hide,
onchange: v => { onchange: v => {
settings.hide = v; settings.wid_hide = v;
writeSetting(); writeSetting();
} }
}, },
/*LANG*/"time range": { /*LANG*/"show time": {
value: settings.drawRange, value: settings.wid_time,
onchange: v => { onchange: v => {
settings.drawRange = v; settings.wid_time = v;
writeSetting(); writeSetting();
} }
}, },
/*LANG*/"color": { /*LANG*/"color": {
value: colVal.indexOf(settings.color), value: colVal.indexOf(settings.wid_color),
min: 0, min: 0,
max: colVal.length -1, max: colVal.length -1,
wrap: true, wrap: true,
format: v => colName[v], format: v => colName[v],
onchange: v => { onchange: v => {
settings.color = colVal[v]; settings.wid_color = colVal[v];
writeSetting(); writeSetting();
} }
} }
@ -57,30 +117,6 @@
selected: selected selected: selected
}, },
/*LANG*/"< Back": () => back(), /*LANG*/"< Back": () => back(),
/*LANG*/"time from": {
value: settings.from,
min: 0,
max: 23,
wrap: true,
noList: true,
format: v => v + ":00",
onchange: v => {
settings.from = v;
writeSetting();
}
},
/*LANG*/"time to": {
value: settings.to,
min: 1,
max: 24,
wrap: true,
noList: true,
format: v => v + ":00",
onchange: v => {
settings.to = v;
writeSetting();
}
},
/*LANG*/"erlier": { /*LANG*/"erlier": {
value: settings.earlier, value: settings.earlier,
step: 10, step: 10,
@ -94,29 +130,19 @@
writeSetting(); writeSetting();
} }
}, },
/*LANG*/"disable alarm": { /*LANG*/"Filter Alarm": () => showFilterMenu(),
value: settings.disableOnAlarm, /*LANG*/"vib pattern": require("buzz_menu").pattern(
onchange: v => { settings.vibrate,
settings.disableOnAlarm = v; v => {
settings.vibrate = v;
writeSetting(); writeSetting();
} }
}, ),
/*LANG*/"msg": { /*LANG*/"msg": {
value: settings.msg, value: settings.msg,
format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v,
// setTimeout required to load after menu refresh // setTimeout required to load after menu refresh
onchange: () => setTimeout((msg, cb) => { onchange: () => readInput("msg", 4, showMain)
if (require("Storage").read("textinput")) {
g.clear();
require("textinput").input({text: msg}).then(result => {
settings.msg = result;
writeSetting();
cb(7);
});
} else {
E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(7));
}
}, 0, settings.msg, showMain),
}, },
/*LANG*/"msg as prefix": { /*LANG*/"msg as prefix": {
value: settings.msgAsPrefix, value: settings.msgAsPrefix,
@ -125,13 +151,13 @@
writeSetting(); writeSetting();
} }
}, },
/*LANG*/"vib pattern": require("buzz_menu").pattern( /*LANG*/"disable alarm": {
settings.vibrate, value: settings.disableOnAlarm,
v => { onchange: v => {
settings.vibrate = v; settings.disableOnAlarm = v;
writeSetting(); writeSetting();
} }
), },
/*LANG*/"auto snooze": { /*LANG*/"auto snooze": {
value: settings.as, value: settings.as,
onchange: v => { onchange: v => {

View File

@ -11,7 +11,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable
earlier: settings.earlier, earlier: settings.earlier,
draw: function () { draw: function () {
// draw zzz // draw zzz
g.reset().setColor(settings.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); g.reset().setColor(settings.wid_color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y);
// call function to draw the time of alarm if a alarm is found // call function to draw the time of alarm if a alarm is found
if (this.time) this.drawTime(this.time + 1); if (this.time) this.drawTime(this.time + 1);
}, },
@ -20,7 +20,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable
}; };
// add function to draw the time of alarm if enabled // add function to draw the time of alarm if enabled
if (settings.drawTime) WIDGETS.sleeplogalarm.drawTime = function(time) { if (settings.wid_time) WIDGETS.sleeplogalarm.drawTime = function(time) {
// directly include Font4x5Numeric // directly include Font4x5Numeric
g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1);
g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 17); g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 17);