diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 34453497b..09f29e906 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,20 +1,16 @@ -// 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 +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 +}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - // read settings to calculate alarm range - 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 - }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - - // abort if not enabled in settings - if (!settings.enabled) return; +// check if enabled in settings +if (settings.enabled) { // insert neccessary settings into widget WIDGETS.sleeplogalarm = { @@ -25,39 +21,48 @@ if (typeof (global.sleeplog || {}).onChange === "object" && from: settings.from, to: settings.to, earlier: settings.earlier, - draw: ()=>{} - }; - - // setup widget depending if not hidden - if (!settings.hide) { - WIDGETS.sleeplogalarm.width = 8; - WIDGETS.sleeplogalarm.draw = function() { + draw: function () { + // draw zzz g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + // draw alarm range times if enabled if (this.drawRange) { require("Font4x5Numeric").add(Graphics); 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); } - }; - } + }, + reload: function () { + // abort if onChange is not available + if (typeof (global.sleeplog || {}).onChange === "object") return; - // set widget width and draw - WIDGETS.sleeplogalarm.draw(); + // abort if no alarm exists inside range + 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 - sleeplog.onChange.sleeplogalarm = function(data) { - // abort if not changed from deep sleep to light sleep or awake - if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; + // set widget width if not hidden + if (!this.hidden) this.width = 8; - // get now and calculate time of now - var now = new Date(); - var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000); + // insert sleeplogalarm function to onChange + sleeplog.onChange.sleeplogalarm = function (data) { + // abort if not changed from deep sleep to light sleep or awake + if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; - // abort if now is outside the possible alarm range - if (tNow + WIDGETS.sleeplogalarm.earlier * 6E4 < WIDGETS.sleeplogalarm.from * 36E5 || - tNow + WIDGETS.sleeplogalarm.earlier * 6E4 >= WIDGETS.sleeplogalarm.to * 36E5) return; + // get cahed data, now and calculate time of now + var data = WIDGET.sleeplogalarm; + var now = new Date(); + var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000); - // execute trigger function - require("sleeplogalarm.trigger.js")(now, tNow); + // abort if now is outside the possible alarm range + if (tNow + data.earlier * 6E4 < data.from * 36E5 || + tNow + data.earlier * 6E4 >= data.to * 36E5) return; + + // execute trigger function + require("sleeplogalarm.trigger.js")(now, tNow); + }; + } }; -} + + // load widget + WIDGETS.sleeplogalarm.reload(); +}; \ No newline at end of file