From 6edb52ec56e474710fe744288bf33d760088558a Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 7 Jun 2023 17:26:32 +0100 Subject: [PATCH 1/4] chimer: fix typo --- apps/chimer/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chimer/metadata.json b/apps/chimer/metadata.json index d5bc04950..e54560c93 100644 --- a/apps/chimer/metadata.json +++ b/apps/chimer/metadata.json @@ -2,7 +2,7 @@ "id": "chimer", "name": "Chimer", "version": "0.02", - "description": "A fork of Hour Chime that adds extra features such as: \n - Buzz or beep on every 60, 30 or 15 minutes. \n - Reapeat Chime up to 3 times \n - Set hours to disable chime", + "description": "A fork of Hour Chime that adds extra features such as: \n - Buzz or beep on every 60, 30 or 15 minutes. \n - Repeat Chime up to 3 times \n - Set hours to disable chime", "icon": "widget.png", "type": "widget", "tags": "widget", From 0834cc358ff9bf30516da329f61dc80963860b6a Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 7 Jun 2023 17:27:48 +0100 Subject: [PATCH 2/4] chimer: avoid busy-loop when queuing next chime --- apps/chimer/widget.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/apps/chimer/widget.js b/apps/chimer/widget.js index 18358df9e..9a29c80f6 100644 --- a/apps/chimer/widget.js +++ b/apps/chimer/widget.js @@ -16,16 +16,10 @@ var settings = readSettings(); - function sleep(milliseconds) { - const date = Date.now(); - let currentDate = null; - do { - currentDate = Date.now(); - } while (currentDate - date < milliseconds); - } - function chime() { - for (var i = 0; i < settings.repeat; i++) { + let count = settings.repeat; + + const chime1 = () => { if (settings.type === 1) { Bangle.buzz(100); } else if (settings.type === 2) { @@ -33,8 +27,11 @@ } else { return; } - sleep(150); - } + if (--count > 0) + setTimeout(chime1, 150); + }; + + chime1(); } let lastHour = new Date().getHours(); From a82163fc88b80fc92d5947db0ac4a7250361ad5c Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 7 Jun 2023 17:29:12 +0100 Subject: [PATCH 3/4] chimer: simplify logic for next chime --- apps/chimer/widget.js | 124 +++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 79 deletions(-) diff --git a/apps/chimer/widget.js b/apps/chimer/widget.js index 9a29c80f6..a587b61de 100644 --- a/apps/chimer/widget.js +++ b/apps/chimer/widget.js @@ -34,6 +34,19 @@ chime1(); } + function queueNextCheckMins(mins) { + const now = new Date(), + m = now.getMinutes(), + s = now.getSeconds(), + ms = now.getMilliseconds(); + + const mLeft = mins - (m + mins * 2) % mins, + sLeft = mLeft * 60 - s, + msLeft = sLeft * 1000 - ms; + + setTimeout(check, msLeft); + } + let lastHour = new Date().getHours(); let lastMinute = new Date().getMinutes(); // don't chime when (re)loaded at a whole hour function check() { @@ -42,88 +55,41 @@ m = now.getMinutes(), s = now.getSeconds(), ms = now.getMilliseconds(); - if ( - (settings.sleep && h > settings.end) || - (settings.sleep && h >= settings.end && m !== 0) || - (settings.sleep && h < settings.start) + if (settings.sleep && ( + h > settings.end || + (h >= settings.end && m !== 0) || + h < settings.start) ) { - var mLeft = 60 - m, - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - setTimeout(check, msLeft); + queueNextCheckMins(60); return; } - if (settings.freq === 1) { - if ((m !== lastMinute && m === 0) || (m !== lastMinute && m === 30)) - chime(); - lastHour = h; - lastMinute = m; - // check again in 30 minutes - switch (true) { - case m / 30 >= 1: - var mLeft = 30 - (m - 30), - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - case m / 30 < 1: - var mLeft = 30 - m, - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - } - setTimeout(check, msLeft); - } else if (settings.freq === 2) { - if ( - (m !== lastMinute && m === 0) || - (m !== lastMinute && m === 15) || - (m !== lastMinute && m === 30) || - (m !== lastMinute && m === 45) - ) - chime(); - lastHour = h; - lastMinute = m; - // check again in 15 minutes - switch (true) { - case m / 15 >= 3: - var mLeft = 15 - (m - 45), - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - case m / 15 >= 2: - var mLeft = 15 - (m - 30), - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - case m / 15 >= 1: - var mLeft = 15 - (m - 15), - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - case m / 15 < 1: - var mLeft = 15 - m, - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - break; - } - setTimeout(check, msLeft); - } else if (settings.freq === 3) { - if (m !== lastMinute) chime(); - lastHour = h; - lastMinute = m; - // check again in 1 minute - - var mLeft = 1, - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - setTimeout(check, msLeft); - } else { - if (h !== lastHour && m === 0) chime(); - lastHour = h; - // check again in 60 minutes - var mLeft = 60 - m, - sLeft = mLeft * 60 - s, - msLeft = sLeft * 1000 - ms; - setTimeout(check, msLeft); + switch (settings.freq) { + case 1: + if (m !== lastMinute && m % 30 === 0) + chime(); + lastHour = h; + lastMinute = m; + queueNextCheckMins(30); + break; + case 2: + if (m !== lastMinute && m % 15 === 0) + chime(); + lastHour = h; + lastMinute = m; + queueNextCheckMins(15); + break; + case 3: + // unreachable - not available in settings + if (m !== lastMinute) chime(); + lastHour = h; + lastMinute = m; + queueNextCheckMins(1); + break; + default: + if (h !== lastHour && m === 0) chime(); + lastHour = h; + queueNextCheckMins(60); + break; } } From 11e751fee7f217dca097002024fb05f6399e78fa Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 8 Jun 2023 09:07:49 +0100 Subject: [PATCH 4/4] chimer: version bump --- apps/chimer/ChangeLog | 3 ++- apps/chimer/metadata.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/chimer/ChangeLog b/apps/chimer/ChangeLog index 01bd00a0a..51842b5cd 100644 --- a/apps/chimer/ChangeLog +++ b/apps/chimer/ChangeLog @@ -1,2 +1,3 @@ 0.01: Initial Creation -0.02: Fixed some sleep bugs. Added a sleep mode toggle \ No newline at end of file +0.02: Fixed some sleep bugs. Added a sleep mode toggle +0.03: Reduce busy-loop and code diff --git a/apps/chimer/metadata.json b/apps/chimer/metadata.json index e54560c93..dfbabf405 100644 --- a/apps/chimer/metadata.json +++ b/apps/chimer/metadata.json @@ -1,7 +1,7 @@ { "id": "chimer", "name": "Chimer", - "version": "0.02", + "version": "0.03", "description": "A fork of Hour Chime that adds extra features such as: \n - Buzz or beep on every 60, 30 or 15 minutes. \n - Repeat Chime up to 3 times \n - Set hours to disable chime", "icon": "widget.png", "type": "widget",