diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 1d1c53ac1..98cedd5ad 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -24,3 +24,4 @@ 0.21: Fix crash in clock_info 0.22: Dated event repeat option 0.23: Allow buzzing forever when an alarm fires +0.24: Emit alarmReload when alarms change (used by widalarm) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index c8961b9e3..02b27e1f8 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -55,10 +55,7 @@ exports.getTimeToAlarm = function(alarm, time) { /// Force a reload of the current alarms and widget exports.reload = function() { eval(require("Storage").read("sched.boot.js")); - if (global.WIDGETS && WIDGETS["alarm"]) { - WIDGETS["alarm"].reload(); - Bangle.drawWidgets(); - } + Bangle.emit("alarmReload"); }; // Factory that creates a new alarm with default values exports.newDefaultAlarm = function () { diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 7f94a0a18..dba3bc160 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.23", + "version": "0.24", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/widalarm/ChangeLog b/apps/widalarm/ChangeLog index 63568a9bd..a26c63b9f 100644 --- a/apps/widalarm/ChangeLog +++ b/apps/widalarm/ChangeLog @@ -1 +1,2 @@ 0.01: Moved out of 'alarm' app +0.02: Decouple reloading of widget when alarms change diff --git a/apps/widalarm/metadata.json b/apps/widalarm/metadata.json index b91457138..e3cb2d0c1 100644 --- a/apps/widalarm/metadata.json +++ b/apps/widalarm/metadata.json @@ -1,7 +1,7 @@ { "id": "widalarm", "name": "Alarms Widget", - "version": "0.01", + "version": "0.02", "description": "Displays an alarm icon in the widgets bar if any alarm is active", "icon": "app.png", "type": "widget", diff --git a/apps/widalarm/widget.js b/apps/widalarm/widget.js index 964176fc7..15fb0b9a3 100644 --- a/apps/widalarm/widget.js +++ b/apps/widalarm/widget.js @@ -6,3 +6,9 @@ WIDGETS["alarm"]={area:"tl",width:0,draw:function() { } }; WIDGETS["alarm"].reload(); +Bangle.on("alarmReload", () => { + if (WIDGETS["alarm"]) { + WIDGETS["alarm"].reload(); + Bangle.drawWidgets(); + } +}); diff --git a/apps/widalarmeta/ChangeLog b/apps/widalarmeta/ChangeLog index 1ef003586..3c46a77ba 100644 --- a/apps/widalarmeta/ChangeLog +++ b/apps/widalarmeta/ChangeLog @@ -12,3 +12,4 @@ 0.08: Selectable font. Allow to disable hour padding. 0.09: Match draw() API e.g. to allow wid_edit to alter this widget 0.10: Change 4x5 font to 6x8, teletext is now default font +0.11: Bugfix: handle changes in alarms (e.g. done without a load, such as via fastload) diff --git a/apps/widalarmeta/metadata.json b/apps/widalarmeta/metadata.json index b23c2039c..d43da013c 100644 --- a/apps/widalarmeta/metadata.json +++ b/apps/widalarmeta/metadata.json @@ -2,7 +2,7 @@ "id": "widalarmeta", "name": "Alarm & Timer ETA", "shortName": "Alarm ETA", - "version": "0.10", + "version": "0.11", "description": "A widget that displays the time to the next Alarm or Timer in hours and minutes, maximum 24h (configurable).", "icon": "widget.png", "type": "widget", diff --git a/apps/widalarmeta/widget.js b/apps/widalarmeta/widget.js index c7542ada5..8d96bca81 100644 --- a/apps/widalarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -19,7 +19,11 @@ loadSettings(); function getNextAlarm(date) { - const alarms = (require("Storage").readJSON("sched.json",1) || []).filter(alarm => alarm.on && alarm.hidden !== true); + const alarms = require("sched") + .getAlarms() + // more precise filtering is done using getTimeToAlarm() below + .filter(alarm => alarm.on && alarm.hidden !== true); + WIDGETS["widalarmeta"].numActiveAlarms = alarms.length; if (alarms.length > 0) { const times = alarms.map(alarm => require("sched").getTimeToAlarm(alarm, date) || Number.POSITIVE_INFINITY); @@ -116,16 +120,18 @@ } /* draw */ if (config.maxhours > 0) { - // add your widget WIDGETS["widalarmeta"]={ area:"tl", width: 0, // hide by default = assume no timer draw:draw, - reload: () => { + reload: function () { + this.nextAlarm = undefined; + loadSettings(); - g.clear(); Bangle.drawWidgets(); }, }; + + Bangle.on("alarmReload", () => WIDGETS["widalarmeta"].reload()); } })();