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..3f9aaba68 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, 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) { @@ -497,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/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/lib.js b/apps/sched/lib.js index 02b27e1f8..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 @@ -35,7 +36,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); } 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;