[sleeplogalarm] Alarm only once each alarm
parent
a49f902f02
commit
69d0890cfa
|
|
@ -2,15 +2,19 @@
|
||||||
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, msg, withId) {
|
function getNextAlarm(allAlarms, fo, 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, filter for
|
||||||
|
// active, not timer, not own alarm,
|
||||||
|
// after from, before to, includes msg
|
||||||
|
// not lastTime, not lastDay
|
||||||
return allAlarms.filter(
|
return allAlarms.filter(
|
||||||
a => a.on && !a.timer && a.id !== "sleeplog" &&
|
a => a.on && !a.timer && a.id !== "sleeplog" &&
|
||||||
a.t >= from && a.t < to && (!msg || a.msg.includes(msg))
|
a.t >= fo.from && a.t < fo.to && (!fo.msg || a.msg.includes(fo.msg)) &&
|
||||||
|
fo.lastTime !== a.t && fo.lastDay !== a.last
|
||||||
).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;
|
||||||
|
|
@ -48,7 +52,13 @@ exports = {
|
||||||
var settings = exports.getSettings();
|
var settings = exports.getSettings();
|
||||||
|
|
||||||
// set the alarm time
|
// set the alarm time
|
||||||
this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg).t;
|
this.time = getNextAlarm(sched.getAlarms(), {
|
||||||
|
from: settings.filter_from * 36E5,
|
||||||
|
to: settings.filter_to * 36E5,
|
||||||
|
msg: settings.filter_msg,
|
||||||
|
lastTime: settings.lastTime,
|
||||||
|
lastDay: settings.lastDay
|
||||||
|
}).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;
|
||||||
|
|
@ -56,9 +66,6 @@ exports = {
|
||||||
// set widget width if not hidden
|
// set widget width if not hidden
|
||||||
if (!this.hidden) this.width = 8;
|
if (!this.hidden) this.width = 8;
|
||||||
|
|
||||||
// abort if already alarmed for this alarm
|
|
||||||
if ((sleeplog.trigger.sleeplogalarm || {}).last == this.time) return;
|
|
||||||
|
|
||||||
// insert sleeplogalarm conditions and function
|
// insert sleeplogalarm conditions and function
|
||||||
sleeplog.trigger.sleeplogalarm = {
|
sleeplog.trigger.sleeplogalarm = {
|
||||||
from: this.time - settings.earlier * 6E4,
|
from: this.time - settings.earlier * 6E4,
|
||||||
|
|
@ -80,10 +87,13 @@ exports = {
|
||||||
var allAlarms = sched.getAlarms();
|
var allAlarms = sched.getAlarms();
|
||||||
|
|
||||||
// find first active alarm
|
// find first active alarm
|
||||||
var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg, settings.disableOnAlarm);
|
var alarm = getNextAlarm(sched.getAlarms(), {
|
||||||
|
from: settings.filter_from * 36E5,
|
||||||
// clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm
|
to: settings.filter_to * 36E5,
|
||||||
sleeplog.trigger.sleeplogalarm = {last: alarm.t};
|
msg: settings.filter_msg,
|
||||||
|
lastTime: settings.lastTime,
|
||||||
|
lastDay: settings.lastDay
|
||||||
|
}, settings.disableOnAlarm);
|
||||||
|
|
||||||
// return if no alarm is found
|
// return if no alarm is found
|
||||||
if (!alarm) return;
|
if (!alarm) return;
|
||||||
|
|
@ -118,6 +128,11 @@ exports = {
|
||||||
del: true
|
del: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// save time of alarm and this day to prevent triggering for the same alarm again
|
||||||
|
settings.lastTime = alarm.t;
|
||||||
|
settings.lastDay = now.getDay();
|
||||||
|
require("Storage").writeJSON("sleeplogalarm.settings.json", settings);
|
||||||
|
|
||||||
// write changes
|
// write changes
|
||||||
sched.setAlarms(allAlarms);
|
sched.setAlarms(allAlarms);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue