From a25ed8f6ff97d7cf04475063a7e5da796bee1500 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sat, 2 Mar 2024 16:11:36 +0000 Subject: [PATCH 1/4] widalarmeta: use sched lib and remove template comment --- apps/widalarmeta/widget.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/widalarmeta/widget.js b/apps/widalarmeta/widget.js index c7542ada5..42f47cd5c 100644 --- a/apps/widalarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -19,7 +19,10 @@ loadSettings(); function getNextAlarm(date) { - const alarms = (require("Storage").readJSON("sched.json",1) || []).filter(alarm => alarm.on && alarm.hidden !== true); + const alarms = require("sched") + .getAlarms() + .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,7 +119,6 @@ } /* draw */ if (config.maxhours > 0) { - // add your widget WIDGETS["widalarmeta"]={ area:"tl", width: 0, // hide by default = assume no timer From 0dd67533acf4234bc5ea39d1948e9019a7963f54 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 3 Mar 2024 19:28:52 +0000 Subject: [PATCH 2/4] sched: emit alarmReload, widalarm reload on alarmReload --- apps/sched/ChangeLog | 1 + apps/sched/lib.js | 5 +---- apps/sched/metadata.json | 2 +- apps/widalarm/ChangeLog | 1 + apps/widalarm/metadata.json | 2 +- apps/widalarm/widget.js | 6 ++++++ 6 files changed, 11 insertions(+), 6 deletions(-) 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(); + } +}); From f9d6ca1c13e4b7489a9637f701932a94bac650b3 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 3 Mar 2024 19:30:18 +0000 Subject: [PATCH 3/4] widalarmeta: reload widget when alarms change --- apps/widalarmeta/ChangeLog | 1 + apps/widalarmeta/metadata.json | 2 +- apps/widalarmeta/widget.js | 7 ++++++- 3 files changed, 8 insertions(+), 2 deletions(-) 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 42f47cd5c..926ff2516 100644 --- a/apps/widalarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -21,6 +21,7 @@ function getNextAlarm(date) { 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; @@ -123,11 +124,15 @@ 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()); } })(); From 39bc2b31a0e0e620230da7e24eb34128d7165fee Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 4 Mar 2024 08:48:13 +0000 Subject: [PATCH 4/4] widalarmeta: don't clear graphics on reload --- apps/widalarmeta/widget.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/widalarmeta/widget.js b/apps/widalarmeta/widget.js index 926ff2516..8d96bca81 100644 --- a/apps/widalarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -128,7 +128,6 @@ this.nextAlarm = undefined; loadSettings(); - g.clear(); Bangle.drawWidgets(); }, };