[sleeplogalarm] Rewrite widget.js

master
storm64 2022-11-10 16:52:35 +01:00
parent 57f0696998
commit 9b8895a259
1 changed files with 45 additions and 40 deletions

View File

@ -1,7 +1,3 @@
// check if sleeplog is available and any alarm is active
if (typeof (global.sleeplog || {}).onChange === "object" &&
(require("Storage").readJSON("sched.json", 1) || []).some(a => a.on && !a.timer)) {
// read settings to calculate alarm range // read settings to calculate alarm range
var settings = Object.assign({ var settings = Object.assign({
enabled: true, enabled: true,
@ -13,8 +9,8 @@ if (typeof (global.sleeplog || {}).onChange === "object" &&
earlier: 30 earlier: 30
}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {});
// abort if not enabled in settings // check if enabled in settings
if (!settings.enabled) return; if (settings.enabled) {
// insert neccessary settings into widget // insert neccessary settings into widget
WIDGETS.sleeplogalarm = { WIDGETS.sleeplogalarm = {
@ -25,39 +21,48 @@ if (typeof (global.sleeplog || {}).onChange === "object" &&
from: settings.from, from: settings.from,
to: settings.to, to: settings.to,
earlier: settings.earlier, earlier: settings.earlier,
draw: ()=>{} draw: function () {
}; // draw zzz
// setup widget depending if not hidden
if (!settings.hide) {
WIDGETS.sleeplogalarm.width = 8;
WIDGETS.sleeplogalarm.draw = function() {
g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y);
// draw alarm range times if enabled
if (this.drawRange) { if (this.drawRange) {
require("Font4x5Numeric").add(Graphics); require("Font4x5Numeric").add(Graphics);
g.setFont("4x5Numeric").drawString(this.from, this.x + 1, this.y + 12); g.setFont("4x5Numeric").drawString(this.from, this.x + 1, this.y + 12);
g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23); g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23);
} }
}; },
} reload: function () {
// abort if onChange is not available
if (typeof (global.sleeplog || {}).onChange === "object") return;
// set widget width and draw // abort if no alarm exists inside range
WIDGETS.sleeplogalarm.draw(); if (!(require("Storage").readJSON("sched.json", 1) || [])
.filter(a => a.on && !a.timer)
.some(a => a.t >= this.from * 36E5 && a.t < this.to * 36E5)) return;
// add sleeplogalarm function to onChange // set widget width if not hidden
if (!this.hidden) this.width = 8;
// insert sleeplogalarm function to onChange
sleeplog.onChange.sleeplogalarm = function (data) { sleeplog.onChange.sleeplogalarm = function (data) {
// abort if not changed from deep sleep to light sleep or awake // abort if not changed from deep sleep to light sleep or awake
if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return;
// get now and calculate time of now // get cahed data, now and calculate time of now
var data = WIDGET.sleeplogalarm;
var now = new Date(); var now = new Date();
var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000); var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000);
// abort if now is outside the possible alarm range // abort if now is outside the possible alarm range
if (tNow + WIDGETS.sleeplogalarm.earlier * 6E4 < WIDGETS.sleeplogalarm.from * 36E5 || if (tNow + data.earlier * 6E4 < data.from * 36E5 ||
tNow + WIDGETS.sleeplogalarm.earlier * 6E4 >= WIDGETS.sleeplogalarm.to * 36E5) return; tNow + data.earlier * 6E4 >= data.to * 36E5) return;
// execute trigger function // execute trigger function
require("sleeplogalarm.trigger.js")(now, tNow); require("sleeplogalarm.trigger.js")(now, tNow);
}; };
} }
};
// load widget
WIDGETS.sleeplogalarm.reload();
};