diff --git a/apps.json b/apps.json index 19fa93262..d902a9054 100644 --- a/apps.json +++ b/apps.json @@ -3059,5 +3059,20 @@ {"name":"waypoints.json","url":"waypoints.json","evaluate":false}, {"name":"kitchen.img","url":"kitchen.icon.js","evaluate":true} ] -} +}, +{ + "id": "hourstrike", + "name": "Hour Strike", + "shortName": "Hour Strike", + "icon": "app.png", + "version": "0.01", + "description": "Strike the clock on the hour. A great tool to remind you an hour has passed!", + "tags": "tool,alarm,widget", + "readme": "README.md", + "storage": [ + {"name":"hourstrike.app.js","url":"app.js"}, + {"name":"hourstrike.boot.js","url":"boot.js"}, + {"name":"hourstrike.img","url":"app-icon.js","evaluate":true} + ] +} ] diff --git a/apps/hourstrike/ChangeLog b/apps/hourstrike/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/hourstrike/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/hourstrike/READMS.md b/apps/hourstrike/READMS.md new file mode 100644 index 000000000..64423695d --- /dev/null +++ b/apps/hourstrike/READMS.md @@ -0,0 +1,17 @@ +# Hour Strike + +![icon](app-icon.png) + +Time passes too fast! + +This app configures your `Bangle.js` so that it buzzes on the hour or on the half hour. + +## Features + +- Strikes the hour or the half hour +- Set up a quiet time + +## Creator + +[Weiming Hu](https://weiming-hu.github.io/), using coding from the [Default Alarm](https://github.com/espruino/BangleApps/tree/master/apps/alarm). + diff --git a/apps/hourstrike/app-icon.js b/apps/hourstrike/app-icon.js new file mode 100644 index 000000000..7f2040745 --- /dev/null +++ b/apps/hourstrike/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkGswAHogAEBxAAHsgXFowXPCwowQFwwwQCIUjn/zmQwPFwUj/4ACDAQwMBwNDCgPwh4DBmgwMFwU/C4vzGBgMBoRECC4f/kgwLIwgXFJBgLBl4XH+QXNLwQXFMAQXPmEDC6K8DiEBAoYXSgA1DI6MxgETL6gYBgIGBC5ynDCYMQAwKnOa4YABmTXQoQXEAAUkC5dkMAx2EowXJJBBGNAAMUBwMjMAgHBoIXLiIPBDAM/+YWCokRC5gwCAAtBC5owDAAgJBC5dBiAwGoMBigXLokQgIXFA4QXMoEAAANNqAECggXR7oXXAYQXSgvUC6sEC60N6oXW6AXUinu8IXTgPuAAMQC6UEC4SsDC58OC4XgC9RHXO66nCoLXVAAoXmABQX1A")) diff --git a/apps/hourstrike/app-icon.png b/apps/hourstrike/app-icon.png new file mode 100644 index 000000000..f7ca232cf Binary files /dev/null and b/apps/hourstrike/app-icon.png differ diff --git a/apps/hourstrike/app.js b/apps/hourstrike/app.js new file mode 100644 index 000000000..4e39d689e --- /dev/null +++ b/apps/hourstrike/app.js @@ -0,0 +1,62 @@ +const storage = require('Storage'); +let settings; + +function updateSettings() { + storage.write('hourstrike.json', settings); +} + +function resetSettings() { + settings = { + on_hour: true, + on_half_hour: true, + start_hour: 9, + end_hour: 21, + }; + updateSettings(); +} + +settings = storage.readJSON('hourstrike.json', 1); +if (!settings) resetSettings(); + +function showMainMenu() { + var mode = ['off', 'v', 'b', 'vb', 'bv']; + const mainmenu = { + '': { 'title': 'Time Passed' }, + 'On hour': { + value: settings.on_hour, + format: v => v?"ON":"OFF", + onchange: v => { + settings.on_hour = v; + updateSettings(); + } + }, + 'On half hour': { + value: settings.on_half_hour, + format: v => v?"ON":"OFF", + onchange: v => { + settings.on_half_hour = v; + updateSettings(); + } + }, + 'Start hour': { + value: settings.start_hour, + min: 0, max: 23, + onchange: v=> { + settings.start_hour = v; + updateSettings(); + } + }, + 'End hour': { + value: settings.end_hour, + min: 0, max: 23, + onchange: v=> { + settings.end_hour = v; + updateSettings(); + } + }, + '< Back': ()=>load() + }; + return E.showMenu(mainmenu); +} + +showMainMenu(); \ No newline at end of file diff --git a/apps/hourstrike/boot.js b/apps/hourstrike/boot.js new file mode 100644 index 000000000..901784613 --- /dev/null +++ b/apps/hourstrike/boot.js @@ -0,0 +1,21 @@ +(function() { + var setting = require('Storage').readJSON('hourstrike.json',1)||[]; + if (setting.on_hour || setting.on_harlf_hour) { + var cur = new Date(); + var cur_hour = cur.getHours(); + if (setting.start_hour<=cur_hour&&cur_hour<=setting.end_hour) { + var cur_sec = cur.getMinutes()*60+cur.getSeconds(); + var notify_on = [1800, 3600]; + var t=cur_sec new Promise(resolve => setTimeout(resolve,200))) + .then(() => Bangle.buzz(100, 0.5)); + }; + if (t>0) { + setTimeout(notify_func, t*1000); + setTimeout(load, t*1000 + 600); + } + } + } +})(); \ No newline at end of file