diff --git a/apps.json b/apps.json index 44a6c07f6..c77eeec06 100644 --- a/apps.json +++ b/apps.json @@ -569,6 +569,21 @@ {"name":"widbt.wid.js","url":"widget.js"} ] }, + { "id": "widchime", + "name": "Hour Chime", + "icon": "widget.png", + "version":"0.01", + "description": "Buzz or beep on every whole hour.", + "tags": "widget", + "type": "widget", + "storage": [ + {"name":"widchime.wid.js","url":"widget.js"}, + {"name":"widchime.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"widchime.json"} + ] + }, { "id": "widram", "name": "RAM Widget", "shortName":"RAM Widget", diff --git a/apps/widchime/ChangeLog b/apps/widchime/ChangeLog new file mode 100644 index 000000000..7f837e50e --- /dev/null +++ b/apps/widchime/ChangeLog @@ -0,0 +1 @@ +0.01: First version diff --git a/apps/widchime/icons.txt b/apps/widchime/icons.txt new file mode 100644 index 000000000..c22bc31e7 --- /dev/null +++ b/apps/widchime/icons.txt @@ -0,0 +1 @@ +widget.png: https://icons8.com/icon/15715/plus-1-hour diff --git a/apps/widchime/settings.js b/apps/widchime/settings.js new file mode 100644 index 000000000..54e94546b --- /dev/null +++ b/apps/widchime/settings.js @@ -0,0 +1,22 @@ +/** + * @param {function} back Use back() to return to settings menu + */ +(function(back) { + // default to buzzing + let type = (require("Storage").readJSON("widchime.json", 1) || {type: 1}).type|0 + const chimes = ["Off", "Buzz", "Beep", "Both"] + const menu = { + "": {"title": "Hour Chime"}, + "< Back": back, + "Chime Type": { + value: type, + min: 0, max: 2, // both is just silly + format: v => chimes[v], + onchange: function(v) { + type = v + require("Storage").write("widchime.json", {type: v}) + }, + }, + } + E.showMenu(menu) +}) diff --git a/apps/widchime/widget.js b/apps/widchime/widget.js new file mode 100644 index 000000000..c5a5ca15f --- /dev/null +++ b/apps/widchime/widget.js @@ -0,0 +1,26 @@ +(function() { + // 0: off, 1: buzz, 2: beep, 3: both + const type = (require("Storage").readJSON("widchime.json", 1) || {type: 1}).type + if (!type) return + + function chime() { + if ((require("Storage").readJSON("setting.json", 1) || {}).quiet) return + if (type&1) Bangle.buzz(100) + if (type&2) Bangle.beep() + } + + let lastHour = (new Date()).getHours() // don't chime when (re)loaded at a whole hour + function check() { + const now = new Date(), + h = now.getHours(), m = now.getMinutes(), + s = now.getSeconds(), ms = now.getMilliseconds() + if (h!==lastHour && m===0) chime() + lastHour = h + // check again when this hour is over + const mLeft = 60-m, sLeft = (mLeft*60)-s, msLeft = (sLeft*1000)-ms + setTimeout(check, msLeft) + } + + check() +}) +() diff --git a/apps/widchime/widget.png b/apps/widchime/widget.png new file mode 100644 index 000000000..7c3d7eebd Binary files /dev/null and b/apps/widchime/widget.png differ