From c362881de1e48d6b41433a386c6704713250ebb5 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 23 Sep 2022 16:08:16 +0200 Subject: [PATCH] Added clockinfo to simple timer and improved the clkinfo module (run with optional feedback). --- apps/bwclk/ChangeLog | 3 +- apps/bwclk/app.js | 6 ++- apps/bwclk/metadata.json | 2 +- apps/ha/ChangeLog | 3 +- apps/ha/ha.clkinfo.js | 1 + apps/ha/metadata.json | 2 +- apps/smpltmr/ChangeLog | 3 +- apps/smpltmr/clkinfo.js | 97 ++++++++++++++++++++++++++++++++++++++ apps/smpltmr/metadata.json | 3 +- modules/clock_info.js | 2 +- 10 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 apps/smpltmr/clkinfo.js diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog index 72919e37f..546c83894 100644 --- a/apps/bwclk/ChangeLog +++ b/apps/bwclk/ChangeLog @@ -19,4 +19,5 @@ 0.19: Fix - Compatibility with "Digital clock widget" 0.20: Better handling of async data such as getPressure. 0.21: On the default menu the week of year can be shown. -0.22: Use the new clkinfo module for the menu. \ No newline at end of file +0.22: Use the new clkinfo module for the menu. +0.23: Feedback of apps after run is now optional and decided by the corresponding clkinfo. \ No newline at end of file diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index c8c885ee1..7dcca9d75 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -164,8 +164,10 @@ function runMenuItem(){ var menuEntry = menu[settings.menuPosX]; var item = menuEntry.items[settings.menuPosY-1]; try{ - item.run(); - Bangle.buzz(300, 0.6).then(() => {}); + var ret = item.run(); + if(ret){ + Bangle.buzz(300, 0.6); + } } catch (ex) { // Simply ignore it... } diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index 35e707f68..fbae0e1e7 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -1,7 +1,7 @@ { "id": "bwclk", "name": "BW Clock", - "version": "0.22", + "version": "0.23", "description": "A very minimalistic clock to mainly show date and time.", "readme": "README.md", "icon": "app.png", diff --git a/apps/ha/ChangeLog b/apps/ha/ChangeLog index 493854eb4..c28526abd 100644 --- a/apps/ha/ChangeLog +++ b/apps/ha/ChangeLog @@ -1,3 +1,4 @@ 0.01: Release 0.02: Includeas the ha.lib.js library that can be used by other apps or clocks. -0.03: Added clkinfo for clocks. \ No newline at end of file +0.03: Added clkinfo for clocks. +0.04: Feedback if clkinfo run is called. \ No newline at end of file diff --git a/apps/ha/ha.clkinfo.js b/apps/ha/ha.clkinfo.js index bb3b7e5a1..ad7f51c57 100644 --- a/apps/ha/ha.clkinfo.js +++ b/apps/ha/ha.clkinfo.js @@ -17,6 +17,7 @@ run: function() { ha.sendTrigger("TRIGGER_BW"); ha.sendTrigger(trigger.trigger); + return true; } }); }); diff --git a/apps/ha/metadata.json b/apps/ha/metadata.json index e59e63c91..8ccaea598 100644 --- a/apps/ha/metadata.json +++ b/apps/ha/metadata.json @@ -1,7 +1,7 @@ { "id": "ha", "name": "HomeAssistant", - "version": "0.03", + "version": "0.04", "description": "Integrates your BangleJS into HomeAssistant.", "icon": "ha.png", "type": "app", diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog index bf128e2fb..572aaa91e 100644 --- a/apps/smpltmr/ChangeLog +++ b/apps/smpltmr/ChangeLog @@ -1,2 +1,3 @@ 0.01: Release -0.02: Rewrite with new interface \ No newline at end of file +0.02: Rewrite with new interface +0.03: Added clock infos to expose timer functionality to clocks. \ No newline at end of file diff --git a/apps/smpltmr/clkinfo.js b/apps/smpltmr/clkinfo.js new file mode 100644 index 000000000..dfc70aab9 --- /dev/null +++ b/apps/smpltmr/clkinfo.js @@ -0,0 +1,97 @@ +(function() { + const TIMER_IDX = "smpltmr"; + + function isAlarmEnabled(){ + try{ + var alarm = require('sched'); + var alarmObj = alarm.getAlarm(TIMER_IDX); + if(alarmObj===undefined || !alarmObj.on){ + return false; + } + + return true; + + } catch(ex){ } + return false; + } + + function getAlarmMinutes(){ + if(!isAlarmEnabled()){ + return -1; + } + + var alarm = require('sched'); + var alarmObj = alarm.getAlarm(TIMER_IDX); + return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000)); + } + + function getAlarmMinutesText(){ + var min = getAlarmMinutes(); + if(min < 0){ + return "OFF"; + } + + return "T-" + String(min); + } + + function increaseAlarm(t){ + try{ + var minutes = isAlarmEnabled() ? getAlarmMinutes() : 0; + var alarm = require('sched') + alarm.setAlarm(TIMER_IDX, { + timer : (minutes+t)*60*1000, + }); + alarm.reload(); + } catch(ex){ } + } + + function decreaseAlarm(t){ + try{ + var minutes = getAlarmMinutes(); + minutes -= t; + + var alarm = require('sched') + alarm.setAlarm(TIMER_IDX, undefined); + + if(minutes > 0){ + alarm.setAlarm(TIMER_IDX, { + timer : minutes*60*1000, + }); + } + + alarm.reload(); + } catch(ex){ } + } + + var img = atob("GBiBAeAAB+AAB/v/3/v/3/v/3/v/3/v/n/n/H/z+P/48//85//+b//+b//8p//4E//yCP/kBH/oAn/oAX/oAX/oAX/oAX+AAB+AABw==") + var smpltmrItems = { + name: "Timer", + img: img, + items: [ + { + name: "Timer", + get: () => ({ text: getAlarmMinutesText() + (isAlarmEnabled() ? " min" : ""), img: null}), + show: function() { smpltmrItems.items[0].emit("redraw"); }, + hide: function () {}, + run: function() { } + }, + ] + }; + + var offsets = [+1,+5,-1,-5]; + offsets.forEach((o, i) => { + smpltmrItems.items = smpltmrItems.items.concat({ + name: String(o), + get: () => ({ text: getAlarmMinutesText() + " (" + (o > 0 ? "+" : "") + o + ")", img: null}), + show: function() { smpltmrItems.items[i+1].emit("redraw"); }, + hide: function () {}, + run: function() { + if(o > 0) increaseAlarm(o); + else decreaseAlarm(Math.abs(o)); + this.show(); + } + }); + }); + + return smpltmrItems; +}) \ No newline at end of file diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index cb1ef6eab..4a219fad2 100644 --- a/apps/smpltmr/metadata.json +++ b/apps/smpltmr/metadata.json @@ -2,7 +2,7 @@ "id": "smpltmr", "name": "Simple Timer", "shortName": "Simple Timer", - "version": "0.02", + "version": "0.03", "description": "A very simple app to start a timer.", "icon": "app.png", "tags": "tool,alarm,timer", @@ -12,6 +12,7 @@ "readme": "README.md", "storage": [ {"name":"smpltmr.app.js","url":"app.js"}, + {"name":"smpltmr.clkinfo.js","url":"clkinfo.js"}, {"name":"smpltmr.img","url":"app-icon.js","evaluate":true} ] } diff --git a/modules/clock_info.js b/modules/clock_info.js index 4d70f0013..6a810371a 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -18,7 +18,7 @@ Note that each item is an object with: * 'item.show' : called when item should be shown. Enables updates. Call BEFORE 'get' * 'item.hide' : called when item should be hidden. Disables updates. * .on('redraw', ...) : event that is called when 'get' should be called again (only after 'item.show') -* 'item.run' : (optional) called if the info screen is tapped - can perform some action +* 'item.run' : (optional) called if the info screen is tapped - can perform some action. Return true if the caller should feedback the user. See the bottom of this file for example usage...