[sleeplogalarm] Reorder settings + filter for msg
parent
5720204307
commit
8800ba8fda
|
|
@ -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};
|
||||||
|
|
|
||||||
|
|
@ -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 => {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue