From db32e9df6ee021062274cf3da2100f4b99a4612d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 21 Mar 2024 22:06:13 +0100 Subject: [PATCH 1/3] alarm, sched: Fix #3281 Fix wrap around when snoozed through midnight --- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 2 ++ apps/alarm/metadata.json | 2 +- apps/sched/ChangeLog | 1 + apps/sched/metadata.json | 2 +- apps/sched/sched.js | 1 + 6 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 57ba2f710..9cf5972c4 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -49,3 +49,4 @@ 0.44: Add "delete timer after expiration" setting to events. 0.45: Fix new alarm when selectedAlarm is undefined 0.46: Show alarm groups if the Show Group setting is ON. Scroll alarms menu back to previous position when getting back to it. +0.47: Fix wrap around when snoozed through midnight diff --git a/apps/alarm/app.js b/apps/alarm/app.js index cdb0d0041..ee453d5ee 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -28,6 +28,8 @@ const iconTimerOff = "\0" + (g.theme.dark // An array of alarm objects (see sched/README.md) var alarms = require("sched").getAlarms(); +// Fix possible wrap around in existing alarms #3281 +alarms.forEach(e => e.t %= 86400000); function handleFirstDayOfWeek(dow) { if (firstDayOfWeek == 1) { diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index c612324c7..20969e6df 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.46", + "version": "0.47", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm", diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 98cedd5ad..7f4287ebb 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -25,3 +25,4 @@ 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) +0.25: Fix wrap around when snoozed through midnight diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index dba3bc160..32e95dcfe 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.24", + "version": "0.25", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/sched/sched.js b/apps/sched/sched.js index 88d3b90cd..4b9b2d6cc 100644 --- a/apps/sched/sched.js +++ b/apps/sched/sched.js @@ -36,6 +36,7 @@ function showAlarm(alarm) { alarm.ot = alarm.t; } alarm.t += settings.defaultSnoozeMillis; + alarm.t %= 86400000; Bangle.emit("alarmSnooze", alarm); } else { let del = alarm.del === undefined ? settings.defaultDeleteExpiredTimers : alarm.del; From b135420a6b1f40fb6908ab2d5f698486f43b2dee Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 22 Mar 2024 20:35:06 +0100 Subject: [PATCH 2/3] alarm, sched: Fix #3281 Fix timer --- apps/alarm/app.js | 6 +++--- apps/sched/lib.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index ee453d5ee..3f9aaba68 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -28,8 +28,8 @@ const iconTimerOff = "\0" + (g.theme.dark // An array of alarm objects (see sched/README.md) var alarms = require("sched").getAlarms(); -// Fix possible wrap around in existing alarms #3281 -alarms.forEach(e => e.t %= 86400000); +// Fix possible wrap around in existing alarms #3281, broken alarms still needs to be saved to get fixed +alarms.forEach(e => e.t %= 86400000); // This can probably be removed in the future when we are sure there are no more broken alarms function handleFirstDayOfWeek(dow) { if (firstDayOfWeek == 1) { @@ -499,7 +499,7 @@ function showEditTimerMenu(selectedTimer, timerIndex) { function prepareTimerForSave(timer, timerIndex, time, temp) { timer.timer = require("time_utils").encodeTime(time); - timer.t = require("time_utils").getCurrentTimeMillis() + timer.timer; + timer.t = (require("time_utils").getCurrentTimeMillis() + timer.timer) % 86400000; timer.last = 0; if (!temp) { diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 02b27e1f8..037192647 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -35,7 +35,7 @@ exports.setAlarm = function(id, alarm) { if (alarm.timer) { // if it's a timer, set the start time as a time from *now* var time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000); - alarm.t = currentTime + alarm.timer; + alarm.t = (currentTime + alarm.timer) % 86400000; } alarms.push(alarm); } From 44e201326f78bb59ea90c018caf6ea6f89f10480 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 22 Mar 2024 21:02:40 +0100 Subject: [PATCH 3/3] catch all fix for #3283 --- apps/sched/lib.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 037192647..13cce1ef2 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -4,6 +4,7 @@ exports.getAlarms = function() { }; // Write a list of alarms back to storage exports.setAlarms = function(alarms) { + alarms.forEach(e => e.t %= 86400000); // Also fix #3281 from other apps, e.g. multitimer return require("Storage").writeJSON("sched.json",alarms); }; // Return an alarm object based on ID