From 6345aa604cdc9c2e2fb9689149beface507a9294 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sat, 20 Mar 2021 20:53:53 +0100 Subject: [PATCH] widchime: simple hour chime --- apps.json | 15 +++++++++++++++ apps/widchime/ChangeLog | 1 + apps/widchime/icons.txt | 1 + apps/widchime/settings.js | 22 ++++++++++++++++++++++ apps/widchime/widget.js | 26 ++++++++++++++++++++++++++ apps/widchime/widget.png | Bin 0 -> 1704 bytes 6 files changed, 65 insertions(+) create mode 100644 apps/widchime/ChangeLog create mode 100644 apps/widchime/icons.txt create mode 100644 apps/widchime/settings.js create mode 100644 apps/widchime/widget.js create mode 100644 apps/widchime/widget.png 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 0000000000000000000000000000000000000000..7c3d7eebd3439ff27290c923cb494376f59ca970 GIT binary patch literal 1704 zcmV;Z23PrsP))2}t z2Zyln-n=_IJJSbyZ;8jA*>y^h{C_&_} znM~E~vI;e`eW4}AuCGn7b#oF)%s$5h4Fv)X8Cq6nXb;CJ7=pn_fUdqK&W-qL7F`L) z0W>Ykv48hPwzei5JCh}oZEXp*wIvvc1bLxr4HI#Apprm>$y*(g0w8M^g<|;J1-K|Lc8}I?>{v9M+{szM3T=A?9Gy)gyM@jb= zEh!`s7Pn=G>{86Vk;y#6jCezBCbjPO3nv~xsHB>o!*FjXTKpL1(@rQX12DTiw_|eG zj3?5~zr$3P*DBQ#rm~du+GnU347<%9&uwc~Gtpt*{op)W zKF=ff?d9yy2)};*B>+0U9Oi+}JFain@Fle1u9?*d5atuW@tOlLyL}3-Z(;fO2VA>l-}eYOSc!x8(=<_Uok1$|j7CVp0q2oY%Q5%e1wu zv3~-XoUWOGnV4VKlzlOJ^e=}lPLg}FKOiQefJVtv25CxZ+oe(r$JD; zTU)_m6*AWsQ-&)vCxO@F#_O?nAUi)iN?zAd6d8akS10+$Tjh<+R9BVKF4f*G)?yVB zffA{!$rh0vgxfZ9@cw&9rZfEXH_wvSb)vD0rE)_lca|*M`vNvjqh@K?RHD*W98U9L zNx+W~f}r2WlAxcKj5M zz;XbgjaT*XwUc-uA@b!DZ(gf!5}z)nl=M4w3$qJXrtB-5vG)Zm0+8M=rqtvc^{H|I z*W~M^baqNastN_Y*VYHCA!Nv1NV*Ov^3))*7NwwW1a8dG0g!VM%t>66uaymk^pth&YFGv!IMSrd{ILg-a>GSS62#+9DCP`6d@~mX^WkD%N%s>N z`ZhxU#Ie@vxb--J;qRcNPXJ(=fG`h;j_d^|Jo7&8iVp4Yk?!&tMai5b7~PGMdDo%j zGNw81L`n6PY%h0*5MS5+?v%^c>-3SH5HG%2J}F9Cj6ie`zLAHJbN{jJOwL8{#~vaO z-HW7+mh8uRoA~Fy=05dW!S>VQvEC-GOsYJ%XAFU0%nHYf9^qicDmj;BROZ=?N#ONoy8*tctpZJW!FyYkc^ z-s!8LZJavS$X{Mt!{xZ@sNJ=2{5m}mS2^_8o7mi(W>@wAM!)%Om*Z|OPIx#w9N_&(fJFNLPmM2 literal 0 HcmV?d00001