From c54a6dbaaa503f0768c3006c6d241143326d1b2c Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Sat, 28 May 2022 11:26:12 -0400 Subject: [PATCH 001/342] Add lightning mode --- apps/f9lander/ChangeLog | 1 + apps/f9lander/app.js | 34 +++++++++++++++++++++++++++++++--- apps/f9lander/metadata.json | 3 ++- apps/f9lander/settings.js | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 apps/f9lander/settings.js diff --git a/apps/f9lander/ChangeLog b/apps/f9lander/ChangeLog index 5560f00bc..a13f2a313 100644 --- a/apps/f9lander/ChangeLog +++ b/apps/f9lander/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Add lightning diff --git a/apps/f9lander/app.js b/apps/f9lander/app.js index 7e52104c0..2f17a5bd5 100644 --- a/apps/f9lander/app.js +++ b/apps/f9lander/app.js @@ -46,6 +46,9 @@ var booster = { x : g.getWidth()/4 + Math.random()*g.getWidth()/2, var exploded = false; var nExplosions = 0; var landed = false; +var lightning = 0; + +var settings = require("Storage").readJSON('f9settings.json', 1) || {}; const gravity = 4; const dt = 0.1; @@ -61,18 +64,40 @@ function flameImageGen (throttle) { function drawFalcon(x, y, throttle, angle) { g.setColor(1, 1, 1).drawImage(falcon9, x, y, {rotate:angle}); - if (throttle>0) { + if (throttle>0 || lightning>0) { var flameImg = flameImageGen(throttle); var r = falcon9.height/2 + flameImg.height/2-1; var xoffs = -Math.sin(angle)*r; var yoffs = Math.cos(angle)*r; if (Math.random()>0.7) g.setColor(1, 0.5, 0); else g.setColor(1, 1, 0); - g.drawImage(flameImg, x+xoffs, y+yoffs, {rotate:angle}); + if (throttle>0) g.drawImage(flameImg, x+xoffs, y+yoffs, {rotate:angle}); + if (lightning>1 && lightning<30) { + for (var i=0; i<6; ++i) { + var r = Math.random()*6; + var x = Math.random()*5 - xoffs; + var y = Math.random()*5 - yoffs; + g.setColor(1, Math.random()*0.5+0.5, 0).fillCircle(booster.x+x, booster.y+y, r); + } + } } } +function drawLightning() { + var c = {x:cloudOffs+50, y:30}; + var dx = c.x-booster.x; + var dy = c.y-booster.y; + var m1 = {x:booster.x+0.6*dx+Math.random()*20, y:booster.y+0.6*dy+Math.random()*10}; + var m2 = {x:booster.x+0.4*dx+Math.random()*20, y:booster.y+0.4*dy+Math.random()*10}; + g.setColor(1, 1, 1).drawLine(c.x, c.y, m1.x, m1.y).drawLine(m1.x, m1.y, m2.x, m2.y).drawLine(m2.x, m2.y, booster.x, booster.y); +} + function drawBG() { + if (lightning==1) { + g.setBgColor(1, 1, 1).clear(); + Bangle.buzz(200); + return; + } g.setBgColor(0.2, 0.2, 1).clear(); g.setColor(0, 0, 1).fillRect(0, g.getHeight()-oceanHeight, g.getWidth()-1, g.getHeight()-1); g.setColor(0.5, 0.5, 1).fillCircle(cloudOffs+34, 30, 15).fillCircle(cloudOffs+60, 35, 20).fillCircle(cloudOffs+75, 20, 10); @@ -88,6 +113,7 @@ function renderScreen(input) { drawBG(); showFuel(); drawFalcon(booster.x, booster.y, Math.floor(input.throttle*12), input.angle); + if (lightning>1 && lightning<6) drawLightning(); } function getInputs() { @@ -97,6 +123,7 @@ function getInputs() { if (t > 1) t = 1; if (t < 0) t = 0; if (booster.fuel<=0) t = 0; + if (lightning>0 && lightning<20) t = 0; return {throttle: t, angle: a}; } @@ -121,7 +148,6 @@ function gameStep() { else { var input = getInputs(); if (booster.y >= targetY) { -// console.log(booster.x + " " + booster.y + " " + booster.vy + " " + droneX + " " + input.angle); if (Math.abs(booster.x-droneX-droneShip.width/2)40) && Math.random()>0.98) lightning = 1; booster.x += booster.vx*dt; booster.y += booster.vy*dt; booster.vy += gravity*dt; diff --git a/apps/f9lander/metadata.json b/apps/f9lander/metadata.json index 75c6a0164..5e7031b45 100644 --- a/apps/f9lander/metadata.json +++ b/apps/f9lander/metadata.json @@ -1,7 +1,7 @@ { "id": "f9lander", "name": "Falcon9 Lander", "shortName":"F9lander", - "version":"0.01", + "version":"0.02", "description": "Land a rocket booster", "icon": "f9lander.png", "screenshots" : [ { "url":"f9lander_screenshot1.png" }, { "url":"f9lander_screenshot2.png" }, { "url":"f9lander_screenshot3.png" }], @@ -11,5 +11,6 @@ "storage": [ {"name":"f9lander.app.js","url":"app.js"}, {"name":"f9lander.img","url":"app-icon.js","evaluate":true} + {"name":"f9lander.settings.js", "url":"settings.js"} ] } diff --git a/apps/f9lander/settings.js b/apps/f9lander/settings.js new file mode 100644 index 000000000..0f9fba302 --- /dev/null +++ b/apps/f9lander/settings.js @@ -0,0 +1,36 @@ +// This file should contain exactly one function, which shows the app's settings +/** + * @param {function} back Use back() to return to settings menu + */ +const boolFormat = v => v ? /*LANG*/"On" : /*LANG*/"Off"; +(function(back) { + const SETTINGS_FILE = 'f9settings.json' + // initialize with default settings... + let settings = { + 'lightning': false, + } + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage') + const saved = storage.readJSON(SETTINGS_FILE, 1) || {} + for (const key in saved) { + settings[key] = saved[key]; + } + // creates a function to safe a specific setting, e.g. save('color')(1) + function save(key) { + return function (value) { + settings[key] = value; + storage.write(SETTINGS_FILE, settings); + } + } + const menu = { + '': { 'title': 'OpenWind' }, + '< Back': back, + 'Lightning': { + value: settings.lightning, + format: boolFormat, + onchange: save('lightning'), + } + } + E.showMenu(menu); +}) From 3c121a808f845906ce4732662bb381fdeb09060f Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Sat, 28 May 2022 11:29:51 -0400 Subject: [PATCH 002/342] Fix missing comma --- apps/f9lander/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/f9lander/metadata.json b/apps/f9lander/metadata.json index 5e7031b45..1db777099 100644 --- a/apps/f9lander/metadata.json +++ b/apps/f9lander/metadata.json @@ -10,7 +10,7 @@ "supports" : ["BANGLEJS", "BANGLEJS2"], "storage": [ {"name":"f9lander.app.js","url":"app.js"}, - {"name":"f9lander.img","url":"app-icon.js","evaluate":true} + {"name":"f9lander.img","url":"app-icon.js","evaluate":true}, {"name":"f9lander.settings.js", "url":"settings.js"} ] } From f627b860da269148017badadf080ce1610a69070 Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 12 Sep 2022 23:09:33 +0200 Subject: [PATCH 003/342] [sleeplogalarm] First files --- apps/sleeplogalarm/ChangeLog | 1 + apps/sleeplogalarm/README.md | 47 ++++++++++++++++++++++++++++ apps/sleeplogalarm/app.png | Bin 0 -> 698 bytes apps/sleeplogalarm/metadata.json | 16 ++++++++++ apps/sleeplogalarm/settings.js | 52 +++++++++++++++++++++++++++++++ apps/sleeplogalarm/widget.js | 4 +++ 6 files changed, 120 insertions(+) create mode 100644 apps/sleeplogalarm/ChangeLog create mode 100644 apps/sleeplogalarm/README.md create mode 100644 apps/sleeplogalarm/app.png create mode 100644 apps/sleeplogalarm/metadata.json create mode 100644 apps/sleeplogalarm/settings.js create mode 100644 apps/sleeplogalarm/widget.js diff --git a/apps/sleeplogalarm/ChangeLog b/apps/sleeplogalarm/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/sleeplogalarm/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md new file mode 100644 index 000000000..672c4238f --- /dev/null +++ b/apps/sleeplogalarm/README.md @@ -0,0 +1,47 @@ +# Sleep Log Alarm + +This widget searches for active alarms and raises the alarm event up to the defined time earlier, if in a light sleep phase. + +--- +### App Usage +--- + +#### Inside the settings: !!! dummy entries !!! + - __Thresholds__ submenu + Changes take effect from now on, not retrospective! + - __Max Awake__ | maximal awake duration + _10min_ / _20min_ / ... / __60min__ / ... / _120min_ + - __Min Consecutive__ | minimal consecutive sleep duration + _10min_ / _20min_ / ... / __30min__ / ... / _120min_ + - __Deep Sleep__ | deep sleep threshold + _30_ / _31_ / ... / __100__ / ... / _200_ + - __Light Sleep__ | light sleep threshold + _100_ / _110_ / ... / __200__ / ... / _400_ + - __Reset to Default__ | reset to bold values above + - __BreakToD__ | time of day to break view + _0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_ + - __App Timeout__ | app specific lock timeout + __0s__ / _10s_ / ... / _120s_ + - __Enabled__ | completely en-/disables the background service + __on__ / _off_ + +--- +### Worth Mentioning +--- + +#### To do list +- widget.js +- settings.js +- README.md + +#### Requests, Bugs and Feedback +Please leave requests and bug reports by raising an issue at [github.com/storm64/BangleApps](https://github.com/storm64/BangleApps) (or send me a [mail](mailto:banglejs@storm64.de)). + +#### Creator +Storm64 ([Mail](mailto:banglejs@storm64.de), [github](https://github.com/storm64)) + +#### Attributions +The app icon is downloaded from [https://icons8.com](https://icons8.com). + +#### License +[MIT License](LICENSE) diff --git a/apps/sleeplogalarm/app.png b/apps/sleeplogalarm/app.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7f11f67bf96368c6c8994d43608a3c9ece108d GIT binary patch literal 698 zcmV;r0!96aP)>_62_vrVs7$x%)KEhY2bLH`8}|aP+4?loNZgNtQ$xdbF(5^0LHrv z*+n$Jo?TtG5znfDhWMwg>pnPhA64bntJ|$Z7122xCSpMsXp$@DCL257wkfKLqTb6Of7R0_aEmw-F2N`7O;DfXna3pU>Y z0M@gs%k^p^C2$Ye0)950Efu{>yq>Zp9zw{#ps}8TLDSP+NXwZdb@vg%IRJ!BR2F1v ztrChl1B^4EU9T=yX`_vGYC;HyCw zeu2ImiyxT3@-F?QwZq&%vuyl1->))54uWLrwWsTPj9&& zHGOc%+hA@$WdZo^)AJ3j-3%Zq5XJ^%YOO*nb_#d~{AfH&XzjFIc>XCYfq&KIZSXsZ zKc4t(wAhPlZ!AdKpR1K@o92-}iAUamQ3?G^crTVCpMl80uo-y+Mwhu^{gIh`P)0rj gk%5Sah=~82Kj4M5noGmPng9R*07*qoM6N<$f_3Oc+5i9m literal 0 HcmV?d00001 diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json new file mode 100644 index 000000000..7b3c15818 --- /dev/null +++ b/apps/sleeplogalarm/metadata.json @@ -0,0 +1,16 @@ +{ + "id":"sleeplogalarm", + "name":"Sleep Log Alarm", + "shortName": "SleepLogAlarm", + "version": "0.01", + "description": "Enhance your morning and let your alarms wake you up when you are in light sleep.", + "icon": "app.png", + "type": "widget", + "tags": "tool,widget", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name": "sleeplogalarm.wid.js", "url": "widget.js"}, + {"name": "sleeplogalarm.settings.js", "url": "settings.js"} + ] +} diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js new file mode 100644 index 000000000..c4f13d63f --- /dev/null +++ b/apps/sleeplogalarm/settings.js @@ -0,0 +1,52 @@ +(function(back) { + // define settings filename + var filename = "sleeplogalarm.json"; + + // define default vaules + var defaults = { + }; + + // assign loaded settings to default values + var settings = Object.assign(defaults, require("Storage").readJSON(filename, true) || {}); + + // write change to storage + function writeSetting() { + require("Storage").writeJSON(filename, settings); + } + + // show main menu + function showMain(selected) { + // set menu + var mainMenu = { + "": { + title: "Sleep Log Alarm", + selected: selected + }, + /*LANG*/"< Back": () => back(), + /*LANG*/"up to": { + value: settings.earlier, + step: 10, + min: 10, + max: 120, + wrap: true, + noList: true, + format: v => v + "min earlier", + onchange: v => { + settings.earlier = v; + writeSetting(); + } + }, + /*LANG*/"Enabled": { + value: settings.enabled, + onchange: v => { + settings.enabled = v; + writeSetting(); + } + } + }; + var menu = E.showMenu(mainMenu); + } + + // draw main menu + showMain(); +}) diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js new file mode 100644 index 000000000..42e9bcd0a --- /dev/null +++ b/apps/sleeplogalarm/widget.js @@ -0,0 +1,4 @@ +// sleeplog.status values: +// undefined = service stopped, 0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep +// sleeplog.consecutive values: +// undefined = service stopped, 0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep From 74787f7b5ef5f05cad87d7efc268e944878469e3 Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 12 Sep 2022 23:15:39 +0200 Subject: [PATCH 004/342] [sleeplog] Add option for onChange functions Execute functions in `sleeplog.onChange[fn({timestamp, status, consecutive})]` on a status change --- apps/sleeplog/ChangeLog | 1 + apps/sleeplog/boot.js | 23 +++++++++++++++++++++-- apps/sleeplog/metadata.json | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/sleeplog/ChangeLog b/apps/sleeplog/ChangeLog index a0698d471..bff278e60 100644 --- a/apps/sleeplog/ChangeLog +++ b/apps/sleeplog/ChangeLog @@ -7,3 +7,4 @@ 0.10: Complete rework off this app! 0.10beta: Add interface.html to view saved log data, add "View log" function for debugging log, send data for gadgetbridge, change caching for global getStats 0.11: Prevent module not found error +0.12: Execute functions in `sleeplog.onChange[fn({timestamp, status, consecutive})]` on a status change \ No newline at end of file diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index c1f8a2d2d..f4d9dff46 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -258,6 +258,18 @@ if (sleeplog.conf.enabled) { // check if the status has changed if (data.status !== this.status || data.consecutive !== this.consecutive) { + // check for onChange functions + if ((this.onChange || []).length) { + this.onChange.forEach(fn => { + // setup timeouts to start onChange functions if fn is a function + if (typeof fn === "function") setTimeout(fn, 100, { + timestamp: new Date(data.timestamp), + status: data.status === this.status ? undefined : data.status, + consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive + }); + }); + } + // append status this.appendStatus(data.timestamp, data.status, data.consecutive); @@ -268,7 +280,7 @@ if (sleeplog.conf.enabled) { // reset saveUpToDate status delete this.info.saveUpToDate; } - + // send status to gadgetbridge var gb_kinds = "unknown,not_worn,activity,light_sleep,deep_sleep"; Bluetooth.println(JSON.stringify({ @@ -319,7 +331,14 @@ if (sleeplog.conf.enabled) { } // return stats cache return this.statsCache; - } + }, + + // define array for functions to execute after a status change (changes had hapened 10min earlier) + // changed values will be passed as object with the following properties: + // timestamp: as date object, + // status: if changed 0-4 else undefined, + // consecutive: if changed 0-2 else undefined + onChange: [] }, sleeplog); // initial starting diff --git a/apps/sleeplog/metadata.json b/apps/sleeplog/metadata.json index f6ce661e8..353476446 100644 --- a/apps/sleeplog/metadata.json +++ b/apps/sleeplog/metadata.json @@ -2,7 +2,7 @@ "id":"sleeplog", "name":"Sleep Log", "shortName": "SleepLog", - "version": "0.11", + "version": "0.12", "description": "Log and view your sleeping habits. This app is using the built in movement calculation.", "icon": "app.png", "type": "app", From 94c60a731be69e7bfb1bfd21d9b61724db7312bc Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 21 Oct 2022 13:28:54 +0200 Subject: [PATCH 005/342] Create widtick.wid.js --- apps/widtick/widtick.wid.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 apps/widtick/widtick.wid.js diff --git a/apps/widtick/widtick.wid.js b/apps/widtick/widtick.wid.js new file mode 100644 index 000000000..c59ae5dfb --- /dev/null +++ b/apps/widtick/widtick.wid.js @@ -0,0 +1,8 @@ +(()=>{ + setInterval(()=>{Bangle.buzz(5,1);},1000); + WIDGETS.tick = { + area: "tr", + width: 0, + draw: ()=>{} + }; +})(); From 99663e4583ae34cacffe0e4d72d749f4e1c9741a Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 00:33:51 +0100 Subject: [PATCH 006/342] [sleeplog] onChange: + previous values and readme --- apps/sleeplog/README.md | 25 +++++++++++++++++++++++-- apps/sleeplog/boot.js | 10 ++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 45aeb316b..7f122add3 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -87,7 +87,7 @@ Available through the App Loader when your watch is connected. Deletes the logfile from the watch. __Please backup your data first!__ --- -### Timestamps and files +### Timestamps and Files --- 1. externally visible/usable timestamps (in `global.sleeplog`) are formatted as Bangle timestamps: @@ -110,8 +110,10 @@ Available through the App Loader when your watch is connected. --- -### Access statistics (developer information) +### Developer Information --- + +#### Access statistics - Last Asleep Time [Date]: `Date(sleeplog.awakeSince)` - Last Awake Duration [ms]: @@ -149,6 +151,25 @@ Available through the App Loader when your watch is connected. require("sleeplog").getStats(0, 0, require("sleeplog").readLog()); ``` +#### Add functions triggered by status changes +With the following code it is possible to add functions that will be called on status changes. +``` +// first ensure that the sleeplog object is available +if (typeof (global.sleeplog || {}).onChange === "object") { + // then add your function to the onChange-array + sleeplog.onChange.push( function(data) { print(data); } ); +} +``` +The passed data object has the following properties: +- timestamp: of the status change as date object, + (should be around 10min. before "now", the actual call of the function) +- status: if changed the value of the new status (0-4) else undefined, + (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) +- consecutive: if changed the value of the new status (0-2) else undefined, + (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) +- prevStatus: value of the previous status (0-4), +- prevConsecutive: value of the previous status (0-2) + --- ### Worth Mentioning diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index f4d9dff46..3d4685ea4 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -265,7 +265,9 @@ if (sleeplog.conf.enabled) { if (typeof fn === "function") setTimeout(fn, 100, { timestamp: new Date(data.timestamp), status: data.status === this.status ? undefined : data.status, - consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive + consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, + prevStatus: this.status, + prevConsecutive: this.consecutive }); }); } @@ -337,7 +339,11 @@ if (sleeplog.conf.enabled) { // changed values will be passed as object with the following properties: // timestamp: as date object, // status: if changed 0-4 else undefined, - // consecutive: if changed 0-2 else undefined + // (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) + // consecutive: if changed 0-2 else undefined, + // (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) + // prevStatus: value of the previous status 0-4, + // prevConsecutive: value of the previous status 0-2 onChange: [] }, sleeplog); From 716b2e454aab6777a5bdfdcd9ce7b1197210c5af Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 01:18:02 +0100 Subject: [PATCH 007/342] [sleeplogalarm] Add triger, widget code --- apps/sleeplogalarm/trigger.js | 75 +++++++++++++++++++++++++++++++++++ apps/sleeplogalarm/widget.js | 59 +++++++++++++++++++++++++-- 2 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 apps/sleeplogalarm/trigger.js diff --git a/apps/sleeplogalarm/trigger.js b/apps/sleeplogalarm/trigger.js new file mode 100644 index 000000000..d80a86f3d --- /dev/null +++ b/apps/sleeplogalarm/trigger.js @@ -0,0 +1,75 @@ +exports = function(now, tNow) { + // define settings + var settings = Object.assign({ + from: 4, // 0400 + to: 8, // 0800 + earlier: 6E4 * 30, + msgAsPrefix: true, + disableOnAlarm: false, // !!! not available if alarm is at the next day + msg: "...\n", + vibrate: "..", + as: true + }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); + + // calculate then date + var then = new Date(now + settings.earlier); + + // load library + var sched = require("sched"); + + // define function to return first active alarm in range to come + function firstActiveAlarm(allAlarms) { + return (sched.getActiveAlarms(allAlarms.filter( + // filter for active alarms, ... + a => a.on && !a.timer && + // after now+10s and in alarm range + a.t > tNow && a.t >= settings.from * 36E5 && a.t <= settings.to * 36E5 + ), then) || []).sort((a, b) => a.t > b.t)[0]; + } + + // read all alarms + var allAlarms = sched.getAlarms(); + + // find first active alarm + var alarm = firstActiveAlarm(allAlarms); + + // return if no alarm is found + if (!alarm) return; + + // disable early triggered alarm if set and now and then on the same day + if (settings.disableOnAlarm && now.getDate() === then.getDate()) { + // add indexes to find alarm to temporary disable + allAlarms = allAlarms.map((a, idx) => { + a.idx = idx; + return a; + }); + // get index of first active alarm + var idx = firstActiveAlarm(allAlarms).idx; + // set this alarms last to then + allAlarms[idx].last = then.getDate(); + // remove added indexes + allAlarms = allAlarms.map(a => { + delete a.idx; + return a; + }); + } + + // add new alarm for now with data from found alarm + allAlarms.push({ + id: "sleeplog", + appid: "sleeplog", + on: true, + t: (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000), + dow: 127, + msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), + vibrate: settings.vibrate || alarm.vibrate, + as: settings.as, + del: true + }); + + // write changes + sched.setAlarms(allAlarms); + + // trigger sched.js + load("sched.js"); +}; \ No newline at end of file diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 42e9bcd0a..a7190768c 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,4 +1,55 @@ -// sleeplog.status values: -// undefined = service stopped, 0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep -// sleeplog.consecutive values: -// undefined = service stopped, 0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep +// check if sleeplog is available and any alarm is active +if (typeof (global.sleeplog || {}).onChange === "object" && + (require("Storage").readJSON("sched.json", 1) || []).some(a => a.on && !a.timer)) { + + // read settings to calculate alarm range + var settings = Object.assign({ + enabled: true, + hide: false, + drawRange: true, + from: 4, // 0400 + to: 8, // 0800 + earlier: 6E4 * 30 + }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); + + // abort if not enabled in settings + if (!settings.enabled) return; + + // setup widget depending on settings + WIDGETS.sleeplogalarm = { + area: "tl", + width: 0, + from: settings.from, + to: settings.to, + earlier: settings.earlier, + draw: function() { + if (this.width) g.reset().setColor(1, 1, 0).drawImage(atob(""), this.x, this.y + this.width - 8); + if (this.width > 8) { + g.setFont().setFontAllign(); + g.drwaString(this.from, this.x + 6, this.y); + g.drwaString(this.to, this.x + 18, this.y); + } + } + }; + + // set widget width and draw + WIDGETS.sleeplogalarm.width = settings.hide ? 0 : settings.drawRange ? 24 : 8; + WIDGETS.sleeplogalarm.draw(); + + // add sleeplogalarm function to onChange + sleeplog.onChange.push(function(data) { + // abort if not changed from deep sleep to light sleep or awake + if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; + + // get now and calculate time of now + var now = new Date(); + var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000); + + // abort if now is outside the possible alarm range + if (tNow + WIDGETS.sleeplogalarm.earlier < WIDGETS.sleeplogalarm.from * 36E5 || + tNow + WIDGETS.sleeplogalarm.earlier >= WIDGETS.sleeplogalarm.to * 36E5) return; + + // execute trigger function + require("sleeplogalarm.trigger.js")(now, tNow); + }); +} From 81aece08ee34867530cf621f091654ab312d6dc7 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 01:27:37 +0100 Subject: [PATCH 008/342] [sleeplog] Correct README.md --- apps/sleeplog/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 7f122add3..1c14865ae 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -161,11 +161,11 @@ if (typeof (global.sleeplog || {}).onChange === "object") { } ``` The passed data object has the following properties: -- timestamp: of the status change as date object, +- timestamp: of the status change as date object, (should be around 10min. before "now", the actual call of the function) -- status: if changed the value of the new status (0-4) else undefined, +- status: if changed the value of the new status (0-4) else undefined, (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) -- consecutive: if changed the value of the new status (0-2) else undefined, +- consecutive: if changed the value of the new status (0-2) else undefined, (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) - prevStatus: value of the previous status (0-4), - prevConsecutive: value of the previous status (0-2) From a07747ca2577309100fbbaa2541729573b263ef5 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 13:12:22 +0100 Subject: [PATCH 009/342] [sleeplogalarm] Setup widget and app.png --- apps/sleeplogalarm/app.png | Bin 698 -> 8089 bytes apps/sleeplogalarm/metadata.json | 5 ++-- apps/sleeplogalarm/trigger.js | 6 ++--- apps/sleeplogalarm/widget.js | 38 +++++++++++++++++++------------ 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/apps/sleeplogalarm/app.png b/apps/sleeplogalarm/app.png index bb7f11f67bf96368c6c8994d43608a3c9ece108d..6efb22a3f666817408264ec02731f4ac13d1ffe8 100644 GIT binary patch literal 8089 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 delta 675 zcmV;U0$lx>Ke`2wBYyw}VoOIv0RI600RN!9r;`8x0&ht~K~!jg?U%o6Q&AMhKPOFG zv;_sbWislhe}R)IHI*dQb~iZGK^F&$gM$u&AP!v|%pYJad2Q1oK|48!OL1|C;39%j z6sgt4B=0yhf#l_--sIhv7>_5`V^`xngeecg(#ZDrw+& zqxn6skx*H5W}IzXv8)?N7jv^BS^&no4B16Azn)!Pwh_;&frj{}t?NEGb01aZ)~nmC zLlx0E8zy2w7if|z<|Z3E-?k~LilW}(f=Xd(Y4&K)xbdJ1G-=d)N7;CGzLkl1qIw;; z6C|#+42a6KUw?Zk>rl!%zH=0O=k$U#1HiF9=A?oKwP~QE&_kNjhD`$>1~jJ)n+Dc< zouHznph2w}NT@6VyQbp>c4A}hV$itO3^+5+HllgV>RMfueCcB8YtXnIC$T>EId$gE zPweTH%w<#xz(kjTJFZH8W5y}=q_hh*-vI#Dv#ZPXYJVana1Yo5em0&h6}?Nmp0Xt# zLdd|Nv7UiJ)6-o@%b6r~_YuN50EA6c7G!Fz5{fzlj5DC+OcK|9i*Sj(yZ$&z7WB22 zGs*BI?vHr}_ICb=PtRdo_aQL%sTPj9&&HGOc%+hA@$WdZo^)AJ3j-3%Zq5XJ^% zYOO*nb_#d~{AfH&XzjFIc>XCYfq&KIZSXsZKc4t(wAhPlZ!AdKpR1K@o92-}iAUam zQ3?G^crTVCpMl80uo-y+Mwhu^{gIh`P)0rjksN`Dh=_>)n?K-%w3 { diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index a7190768c..34453497b 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -7,37 +7,45 @@ if (typeof (global.sleeplog || {}).onChange === "object" && enabled: true, hide: false, drawRange: true, + color: g.theme.dark ? 65504 : 31, // yellow or blue from: 4, // 0400 to: 8, // 0800 - earlier: 6E4 * 30 + earlier: 30 }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); // abort if not enabled in settings if (!settings.enabled) return; - // setup widget depending on settings + // insert neccessary settings into widget WIDGETS.sleeplogalarm = { area: "tl", width: 0, + drawRange: settings.drawRange, + color: settings.color, from: settings.from, to: settings.to, earlier: settings.earlier, - draw: function() { - if (this.width) g.reset().setColor(1, 1, 0).drawImage(atob(""), this.x, this.y + this.width - 8); - if (this.width > 8) { - g.setFont().setFontAllign(); - g.drwaString(this.from, this.x + 6, this.y); - g.drwaString(this.to, this.x + 18, this.y); - } - } + draw: ()=>{} }; + // setup widget depending if not hidden + if (!settings.hide) { + WIDGETS.sleeplogalarm.width = 8; + WIDGETS.sleeplogalarm.draw = function() { + g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + if (this.drawRange) { + require("Font4x5Numeric").add(Graphics); + g.setFont("4x5Numeric").drawString(this.from, this.x + 1, this.y + 12); + g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23); + } + }; + } + // set widget width and draw - WIDGETS.sleeplogalarm.width = settings.hide ? 0 : settings.drawRange ? 24 : 8; WIDGETS.sleeplogalarm.draw(); // add sleeplogalarm function to onChange - sleeplog.onChange.push(function(data) { + sleeplog.onChange.sleeplogalarm = function(data) { // abort if not changed from deep sleep to light sleep or awake if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; @@ -46,10 +54,10 @@ if (typeof (global.sleeplog || {}).onChange === "object" && var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000); // abort if now is outside the possible alarm range - if (tNow + WIDGETS.sleeplogalarm.earlier < WIDGETS.sleeplogalarm.from * 36E5 || - tNow + WIDGETS.sleeplogalarm.earlier >= WIDGETS.sleeplogalarm.to * 36E5) return; + if (tNow + WIDGETS.sleeplogalarm.earlier * 6E4 < WIDGETS.sleeplogalarm.from * 36E5 || + tNow + WIDGETS.sleeplogalarm.earlier * 6E4 >= WIDGETS.sleeplogalarm.to * 36E5) return; // execute trigger function require("sleeplogalarm.trigger.js")(now, tNow); - }); + }; } From 57f06969988d7d1f01033ad3ca23f1e977af4dff Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 15:14:53 +0100 Subject: [PATCH 010/342] [sleeplogalarm] Add settings and dependency --- apps/sleeplogalarm/README.md | 20 +++-- apps/sleeplogalarm/metadata.json | 1 + apps/sleeplogalarm/settings.js | 128 ++++++++++++++++++++++++++++--- 3 files changed, 129 insertions(+), 20 deletions(-) diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 672c4238f..42c2d6074 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -7,22 +7,22 @@ This widget searches for active alarms and raises the alarm event up to the defi --- #### Inside the settings: !!! dummy entries !!! - - __Thresholds__ submenu + - __Thresholds__ submenu Changes take effect from now on, not retrospective! - - __Max Awake__ | maximal awake duration + - __Max Awake__ | maximal awake duration _10min_ / _20min_ / ... / __60min__ / ... / _120min_ - - __Min Consecutive__ | minimal consecutive sleep duration + - __Min Consecutive__ | minimal consecutive sleep duration _10min_ / _20min_ / ... / __30min__ / ... / _120min_ - - __Deep Sleep__ | deep sleep threshold + - __Deep Sleep__ | deep sleep threshold _30_ / _31_ / ... / __100__ / ... / _200_ - - __Light Sleep__ | light sleep threshold - _100_ / _110_ / ... / __200__ / ... / _400_ + - __Light Sleep__ | light sleep threshold + _100_ / _110_ / ... / __200__ / ... / _400_ - __Reset to Default__ | reset to bold values above - - __BreakToD__ | time of day to break view + - __BreakToD__ | time of day to break view _0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_ - - __App Timeout__ | app specific lock timeout + - __App Timeout__ | app specific lock timeout __0s__ / _10s_ / ... / _120s_ - - __Enabled__ | completely en-/disables the background service + - __Enabled__ | completely en-/disables the background service __on__ / _off_ --- @@ -30,8 +30,6 @@ This widget searches for active alarms and raises the alarm event up to the defi --- #### To do list -- widget.js -- settings.js - README.md #### Requests, Bugs and Feedback diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 3ea566acb..198d8e07a 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -8,6 +8,7 @@ "type": "widget", "tags": "tool,widget", "supports": ["BANGLEJS2"], + "dependencies": {"sleeplog": "app"}, "readme": "README.md", "storage": [ {"name": "sleeplogalarm.settings.js", "url": "settings.js"}, diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index c4f13d63f..38a1e5ab5 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -1,19 +1,66 @@ (function(back) { // define settings filename - var filename = "sleeplogalarm.json"; + var filename = "sleeplogalarm.settings.json"; - // define default vaules - var defaults = { - }; - - // assign loaded settings to default values - var settings = Object.assign(defaults, require("Storage").readJSON(filename, true) || {}); + // define settings + var settings = Object.assign({ + enabled: true, + hide: false, + drawRange: true, + color: g.theme.dark ? 65504 : 31, // yellow or blue + from: 4, // 0400 + to: 8, // 0800 + earlier: 30, + disableOnAlarm: false, // !!! not available if alarm is at the next day + msgAsPrefix: true, + msg: "...\n", + vibrate: "..", + as: true + }, require("Storage").readJSON(filename, true) || {}); // write change to storage function writeSetting() { require("Storage").writeJSON(filename, settings); } + // show widget menu + function showWidMenu() { + // set menu + var widgetMenu = { + "": { + title: "Widget Settings" + }, + /*LANG*/"< Back": () => showMain(7), + /*LANG*/"hide complete": { + value: settings.hide, + onchange: v => { + settings.hide = v; + writeSetting(); + } + }, + /*LANG*/"draw time range": { + value: settings.drawRange, + onchange: v => { + settings.drawRange = v; + writeSetting(); + } + }, + /*LANG*/"color": { + colors: [63488, 65504, 2016, 2047, 31, 63519, 0, 65535], + value: this.colors.indexOf(settings.color), + min: 0, + max: this.colors.length -1, + wrap: true, + format: v => ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"][v], + onchange: v => { + settings.color = this.colors[v]; + writeSetting(); + } + } + }; + var menu = E.showMenu(widgetMenu); + } + // show main menu function showMain(selected) { // set menu @@ -23,19 +70,82 @@ selected: selected }, /*LANG*/"< Back": () => back(), - /*LANG*/"up to": { + /*LANG*/"from": { + value: settings.from, + min: 0, + max: 23, + wrap: true, + noList: true, + format: v => v + ":00", + onchange: v => { + settings.from = v; + writeSetting(); + } + }, + /*LANG*/"to": { + value: settings.to, + min: 1, + max: 24, + wrap: true, + noList: true, + format: v => v + ":00", + onchange: v => { + settings.to = v; + writeSetting(); + } + }, + /*LANG*/"erlier": { value: settings.earlier, step: 10, min: 10, max: 120, wrap: true, noList: true, - format: v => v + "min earlier", + format: v => v + "min", onchange: v => { settings.earlier = v; writeSetting(); } }, + /*LANG*/"disable on alarm": { + value: settings.disableOnAlarm, + onchange: v => { + settings.disableOnAlarm = v; + writeSetting(); + } + }, + /*LANG*/"message as prefix": { + value: settings.msgAsPrefix, + onchange: v => { + settings.msgAsPrefix = v; + writeSetting(); + } + }, + /*LANG*/"msg": { + value: settings.msg, + format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, + // setTimeout required to load after menu refresh + onchange: () => setTimeout(msg => { + if (require("Storage").read("textinput")) { + g.clear(); + require("textinput").input({text: msg}).then(result => { + settings.msg = result; + writeSetting(); + showMenu(7); + }); + } else { + E.showAlert(/*LANG*/"No keyboard app installed").then(() => showMenu(7)); + } + }), + }, + /*LANG*/"vibration pattern": require("buzz_menu.js").pattern( + settings.vibrate, + v => { + settings.vibrate = v; + writeSetting(); + } + ), + /*LANG*/"Widget Settings": () => showWidMenu(), /*LANG*/"Enabled": { value: settings.enabled, onchange: v => { From 9b8895a259430bada5e9f3f00e11db0af6250ab5 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 16:52:35 +0100 Subject: [PATCH 011/342] [sleeplogalarm] Rewrite widget.js --- apps/sleeplogalarm/widget.js | 85 +++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 34453497b..09f29e906 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,20 +1,16 @@ -// check if sleeplog is available and any alarm is active -if (typeof (global.sleeplog || {}).onChange === "object" && - (require("Storage").readJSON("sched.json", 1) || []).some(a => a.on && !a.timer)) { +// read settings to calculate alarm range +var settings = Object.assign({ + enabled: true, + hide: false, + drawRange: true, + color: g.theme.dark ? 65504 : 31, // yellow or blue + from: 4, // 0400 + to: 8, // 0800 + earlier: 30 +}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - // read settings to calculate alarm range - var settings = Object.assign({ - enabled: true, - hide: false, - drawRange: true, - color: g.theme.dark ? 65504 : 31, // yellow or blue - from: 4, // 0400 - to: 8, // 0800 - earlier: 30 - }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - - // abort if not enabled in settings - if (!settings.enabled) return; +// check if enabled in settings +if (settings.enabled) { // insert neccessary settings into widget WIDGETS.sleeplogalarm = { @@ -25,39 +21,48 @@ if (typeof (global.sleeplog || {}).onChange === "object" && from: settings.from, to: settings.to, earlier: settings.earlier, - draw: ()=>{} - }; - - // setup widget depending if not hidden - if (!settings.hide) { - WIDGETS.sleeplogalarm.width = 8; - WIDGETS.sleeplogalarm.draw = function() { + draw: function () { + // draw zzz g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + // draw alarm range times if enabled if (this.drawRange) { require("Font4x5Numeric").add(Graphics); g.setFont("4x5Numeric").drawString(this.from, this.x + 1, this.y + 12); g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23); } - }; - } + }, + reload: function () { + // abort if onChange is not available + if (typeof (global.sleeplog || {}).onChange === "object") return; - // set widget width and draw - WIDGETS.sleeplogalarm.draw(); + // abort if no alarm exists inside range + if (!(require("Storage").readJSON("sched.json", 1) || []) + .filter(a => a.on && !a.timer) + .some(a => a.t >= this.from * 36E5 && a.t < this.to * 36E5)) return; - // add sleeplogalarm function to onChange - sleeplog.onChange.sleeplogalarm = function(data) { - // abort if not changed from deep sleep to light sleep or awake - if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; + // set widget width if not hidden + if (!this.hidden) this.width = 8; - // get now and calculate time of now - var now = new Date(); - var tNow = (now.getHours() * 3600000) + (now.getMinutes() * 60000) + (now.getSeconds() * 1000); + // insert sleeplogalarm function to onChange + sleeplog.onChange.sleeplogalarm = function (data) { + // abort if not changed from deep sleep to light sleep or awake + if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; - // abort if now is outside the possible alarm range - if (tNow + WIDGETS.sleeplogalarm.earlier * 6E4 < WIDGETS.sleeplogalarm.from * 36E5 || - tNow + WIDGETS.sleeplogalarm.earlier * 6E4 >= WIDGETS.sleeplogalarm.to * 36E5) return; + // get cahed data, now and calculate time of now + var data = WIDGET.sleeplogalarm; + var now = new Date(); + var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000); - // execute trigger function - require("sleeplogalarm.trigger.js")(now, tNow); + // abort if now is outside the possible alarm range + if (tNow + data.earlier * 6E4 < data.from * 36E5 || + tNow + data.earlier * 6E4 >= data.to * 36E5) return; + + // execute trigger function + require("sleeplogalarm.trigger.js")(now, tNow); + }; + } }; -} + + // load widget + WIDGETS.sleeplogalarm.reload(); +}; \ No newline at end of file From 58330df11c95aaac8ed880be37c2d3cff6d43fac Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 17:04:54 +0100 Subject: [PATCH 012/342] [sleeplog] Change .onChange from array to object --- apps/sleeplog/ChangeLog | 2 +- apps/sleeplog/README.md | 110 ++++++++++++++++++++-------------------- apps/sleeplog/boot.js | 29 ++++++----- 3 files changed, 71 insertions(+), 70 deletions(-) diff --git a/apps/sleeplog/ChangeLog b/apps/sleeplog/ChangeLog index bff278e60..66eeccfc2 100644 --- a/apps/sleeplog/ChangeLog +++ b/apps/sleeplog/ChangeLog @@ -7,4 +7,4 @@ 0.10: Complete rework off this app! 0.10beta: Add interface.html to view saved log data, add "View log" function for debugging log, send data for gadgetbridge, change caching for global getStats 0.11: Prevent module not found error -0.12: Execute functions in `sleeplog.onChange[fn({timestamp, status, consecutive})]` on a status change \ No newline at end of file +0.12: Execute functions in `sleeplog.onChange` object on a status change \ No newline at end of file diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 1c14865ae..00c07ef4a 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -1,6 +1,6 @@ # Sleep Log -This app logs and displays the following states: +This app logs and displays the following states: - sleepling status: _unknown, not worn, awake, light sleep, deep sleep_ - consecutive sleep status: _unknown, not consecutive, consecutive_ @@ -20,55 +20,55 @@ Logfiles are not removed on un-/reinstall to prevent data loss. --- #### On the main app screen: - - __swipe left & right__ + - __swipe left & right__ to change the displayed day - - __touch the "title"__ (e.g. `Night to Fri 20/05/2022`) + - __touch the "title"__ (e.g. `Night to Fri 20/05/2022`) to enter day selection prompt - - __touch the info area__ - to change the displayed information + - __touch the info area__ + to change the displayed information (by default: consecutive & true sleeping) - - __touch the wrench__ (upper right corner) + - __touch the wrench__ (upper right corner) to enter the settings - - __use back button widget__ (upper left corner) + - __use back button widget__ (upper left corner) exit the app #### Inside the settings: - - __Thresholds__ submenu + - __Thresholds__ submenu Changes take effect from now on, not retrospective! - - __Max Awake__ | maximal awake duration + - __Max Awake__ | maximal awake duration _10min_ / _20min_ / ... / __60min__ / ... / _120min_ - - __Min Consecutive__ | minimal consecutive sleep duration + - __Min Consecutive__ | minimal consecutive sleep duration _10min_ / _20min_ / ... / __30min__ / ... / _120min_ - - __Deep Sleep__ | deep sleep threshold + - __Deep Sleep__ | deep sleep threshold _30_ / _31_ / ... / __100__ / ... / _200_ - - __Light Sleep__ | light sleep threshold - _100_ / _110_ / ... / __200__ / ... / _400_ + - __Light Sleep__ | light sleep threshold + _100_ / _110_ / ... / __200__ / ... / _400_ - __Reset to Default__ | reset to bold values above - - __BreakToD__ | time of day to break view + - __BreakToD__ | time of day to break view _0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_ - - __App Timeout__ | app specific lock timeout + - __App Timeout__ | app specific lock timeout __0s__ / _10s_ / ... / _120s_ - - __Enabled__ | completely en-/disables the background service + - __Enabled__ | completely en-/disables the background service __on__ / _off_ - - __Debugging__ submenu - - __View log__ | display logfile data - Select the logfile by its starting time. - Thresholds are shown as line with its value. - - __swipe left & right__ + - __Debugging__ submenu + - __View log__ | display logfile data + Select the logfile by its starting time. + Thresholds are shown as line with its value. + - __swipe left & right__ to change displayed duration - - __swipe up & down__ + - __swipe up & down__ to change displayed value range - - __touch the graph__ + - __touch the graph__ to change between light & dark colors - - __use back button widget__ (upper left corner) + - __use back button widget__ (upper left corner) to go back to the logfile selection - - __Enabled__ | en-/disables debugging + - __Enabled__ | en-/disables debugging _on_ / __off__ - - __write File__ | toggles if a logfile is written + - __write File__ | toggles if a logfile is written _on_ / __off__ - - __Duration__ | duration for writing into logfile - _1h_ / _2h_ / ... / __12h__ / _96_ - - The following data is logged to a csv-file: + - __Duration__ | duration for writing into logfile + _1h_ / _2h_ / ... / __12h__ / _96_ + - The following data is logged to a csv-file: _timestamp_ (in days since 1900-01-01 00:00 UTC used by office software) _, movement, status, consecutive, asleepSince, awakeSince, bpm, bpmConfidence_ @@ -78,34 +78,34 @@ Logfiles are not removed on un-/reinstall to prevent data loss. Available through the App Loader when your watch is connected. -- __view data__ +- __view data__ Display the data to each timestamp in a table. -- __save csv-file__ - Download a csv-file with the data to each timestamp. - The time format is chooseable beneath the file list. -- __delete file__ +- __save csv-file__ + Download a csv-file with the data to each timestamp. + The time format is chooseable beneath the file list. +- __delete file__ Deletes the logfile from the watch. __Please backup your data first!__ --- ### Timestamps and Files --- -1. externally visible/usable timestamps (in `global.sleeplog`) are formatted as Bangle timestamps: +1. externally visible/usable timestamps (in `global.sleeplog`) are formatted as Bangle timestamps: seconds since 1970-01-01 00:00 UTC -2. internally used and logged (to `sleeplog.log (StorageFile)`) is within the highest available resolution: +2. internally used and logged (to `sleeplog.log (StorageFile)`) is within the highest available resolution: 10 minutes since 1970-01-01 00:00 UTC (`Bangle / (10 * 60 * 1000)`) 3. debug .csv file ID (`sleeplog_123456.csv`) has a hourly resolution: hours since 1970-01-01 00:00 UTC (`Bangle / (60 * 60 * 1000)`) -4. logged timestamps inside the debug .csv file are formatted for office calculation software: +4. logged timestamps inside the debug .csv file are formatted for office calculation software: days since 1900-01-01 00:00 UTC (`Bangle / (24 * 60 * 60 * 1000) + 25569`) -5. every 14 days the `sleeplog.log (StorageFile)` is reduced and old entries are moved into separat files for each fortnight (`sleeplog_1234.log`) but still accessible though the app: +5. every 14 days the `sleeplog.log (StorageFile)` is reduced and old entries are moved into separat files for each fortnight (`sleeplog_1234.log`) but still accessible though the app: fortnights since 1970-01-04 12:00 UTC (converted with `require("sleeplog").msToFn(Bangle)` and `require("sleeplog").fnToMs(fortnight)`) -- __Logfiles from before 0.10:__ +- __Logfiles from before 0.10:__ timestamps and sleeping status of old logfiles are automatically converted on your first consecutive sleep or manually by `require("sleeplog").convertOldLog()` -- __View logged data:__ - if you'd like to view your logged data in the IDE, you can access it with `require("sleeplog").printLog(since, until)` or `require("sleeplog").readLog(since, until)` to view the raw data +- __View logged data:__ + if you'd like to view your logged data in the IDE, you can access it with `require("sleeplog").printLog(since, until)` or `require("sleeplog").readLog(since, until)` to view the raw data since & until in Bangle timestamp, e.g. `require("sleeplog").printLog(Date()-24*60*60*1000, Date())` for the last 24h @@ -114,14 +114,14 @@ Available through the App Loader when your watch is connected. --- #### Access statistics -- Last Asleep Time [Date]: +- Last Asleep Time [Date]: `Date(sleeplog.awakeSince)` -- Last Awake Duration [ms]: +- Last Awake Duration [ms]: `Date() - sleeplog.awakeSince` -- Last Statistics [object]: +- Last Statistics [object]: ``` // get stats of the last night (period as displayed inside the app) - // as this might be the mostly used function the data is cached inside the global object + // as this might be the mostly used function the data is cached inside the global object sleeplog.getStats(); // get stats of the last 24h @@ -132,20 +132,20 @@ Available through the App Loader when your watch is connected. ={ calculatedAt: 1653123553810, deepSleep: 250, lightSleep: 150, awakeSleep: 10, consecSleep: 320, awakeTime: 1030, notWornTime: 0, unknownTime: 0, logDuration: 1440, firstDate: 1653036600000, lastDate: 1653111600000 } - + // to get the start of a period defined by "Break TOD" of any date var startOfBreak = require("sleeplog").getLastBreak(); // same as var startOfBreak = require("sleeplog").getLastBreak(Date.now()); // output as date =Date: Sat May 21 2022 12:00:00 GMT+0200 - + // get stats of this period as displayed inside the app require("sleeplog").getStats(require("sleeplog").getLastBreak(), 24*60*60*1000); // or any other day require("sleeplog").getStats(require("sleeplog").getLastBreak(Date(2022,4,10)), 24*60*60*1000); ``` -- Total Statistics [object]: +- Total Statistics [object]: ``` // use with caution, may take a long time ! require("sleeplog").getStats(0, 0, require("sleeplog").readLog()); @@ -154,18 +154,18 @@ Available through the App Loader when your watch is connected. #### Add functions triggered by status changes With the following code it is possible to add functions that will be called on status changes. ``` -// first ensure that the sleeplog object is available +// first ensure that the sleeplog onChange object is available if (typeof (global.sleeplog || {}).onChange === "object") { - // then add your function to the onChange-array - sleeplog.onChange.push( function(data) { print(data); } ); + // then add your function to the onChange object + sleeplog.onChange["my app name"] = function(data) { print(data); }; } ``` The passed data object has the following properties: -- timestamp: of the status change as date object, +- timestamp: of the status change as date object, (should be around 10min. before "now", the actual call of the function) -- status: if changed the value of the new status (0-4) else undefined, +- status: if changed the value of the new status (0-4) else undefined, (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) -- consecutive: if changed the value of the new status (0-2) else undefined, +- consecutive: if changed the value of the new status (0-2) else undefined, (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) - prevStatus: value of the previous status (0-4), - prevConsecutive: value of the previous status (0-2) @@ -177,7 +177,7 @@ The passed data object has the following properties: #### To do list - Check translations. - Add more functionallities to interface.html. -- Enable recieving data on the Gadgetbridge side + testing. +- Enable recieving data on the Gadgetbridge side + testing. __Help appreciated!__ #### Requests, Bugs and Feedback diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 3d4685ea4..33452ff91 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -124,7 +124,7 @@ if (sleeplog.conf.enabled) { if (!sleeplog.info.saveUpToDate || force) { // save status, consecutive status and info timestamps to restore on reload var save = [sleeplog.info.lastCheck, sleeplog.info.awakeSince, sleeplog.info.asleepSince]; - // add debuging status if active + // add debuging status if active if (sleeplog.debug) save.push(sleeplog.debug.writeUntil, sleeplog.debug.fileid); // stringify entries @@ -258,19 +258,20 @@ if (sleeplog.conf.enabled) { // check if the status has changed if (data.status !== this.status || data.consecutive !== this.consecutive) { - // check for onChange functions - if ((this.onChange || []).length) { - this.onChange.forEach(fn => { - // setup timeouts to start onChange functions if fn is a function - if (typeof fn === "function") setTimeout(fn, 100, { - timestamp: new Date(data.timestamp), - status: data.status === this.status ? undefined : data.status, - consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, - prevStatus: this.status, - prevConsecutive: this.consecutive - }); + // read and check for onChange functions + var onChange = Object.keys(this.onChange) || []; + if (onChange.length) onChange.forEach(key => { + // read function to key + var fn = this.onChange[key]; + // setup timeouts to start onChange functions if fn is a function + if (typeof fn === "function") setTimeout(fn, 100, { + timestamp: new Date(data.timestamp), + status: data.status === this.status ? undefined : data.status, + consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, + prevStatus: this.status, + prevConsecutive: this.consecutive }); - } + }); // append status this.appendStatus(data.timestamp, data.status, data.consecutive); @@ -335,7 +336,7 @@ if (sleeplog.conf.enabled) { return this.statsCache; }, - // define array for functions to execute after a status change (changes had hapened 10min earlier) + // define object for functions to execute after a status change (changes had hapened 10min earlier) // changed values will be passed as object with the following properties: // timestamp: as date object, // status: if changed 0-4 else undefined, From 3b54d3b1a914270c20d97d6c1e42fa41adbbb842 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 17:06:35 +0100 Subject: [PATCH 013/342] [sleeplogalarm] Correct typo --- apps/sleeplogalarm/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 09f29e906..741101222 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -65,4 +65,4 @@ if (settings.enabled) { // load widget WIDGETS.sleeplogalarm.reload(); -}; \ No newline at end of file +} \ No newline at end of file From 56e69cc32cdbd918dcfbc1378fe574bf00a05e01 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 17:16:44 +0100 Subject: [PATCH 014/342] [sleeplog] Initialise .onChange as object --- apps/sleeplog/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 33452ff91..6a9c7c6e6 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -345,7 +345,7 @@ if (sleeplog.conf.enabled) { // (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) // prevStatus: value of the previous status 0-4, // prevConsecutive: value of the previous status 0-2 - onChange: [] + onChange: {} }, sleeplog); // initial starting From 88468dc6c3677009afa1e78663623fab980a1156 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 18:25:18 +0100 Subject: [PATCH 015/342] [sleeplogalarm] Include font in widget + edit settings --- apps/sleeplogalarm/settings.js | 46 ++++++++++++++++++---------------- apps/sleeplogalarm/widget.js | 15 +++++------ 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index 38a1e5ab5..8b6bd96aa 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -12,8 +12,8 @@ to: 8, // 0800 earlier: 30, disableOnAlarm: false, // !!! not available if alarm is at the next day - msgAsPrefix: true, msg: "...\n", + msgAsPrefix: true, vibrate: "..", as: true }, require("Storage").readJSON(filename, true) || {}); @@ -23,6 +23,10 @@ require("Storage").writeJSON(filename, settings); } + // define color values and names + var colName = ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"]; + var colVal = [63488, 65504, 2016, 2047, 31, 63519, 0, 65535]; + // show widget menu function showWidMenu() { // set menu @@ -46,14 +50,13 @@ } }, /*LANG*/"color": { - colors: [63488, 65504, 2016, 2047, 31, 63519, 0, 65535], - value: this.colors.indexOf(settings.color), + value: colVal.indexOf(settings.color), min: 0, - max: this.colors.length -1, + max: colVal.length -1, wrap: true, - format: v => ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"][v], + format: v => colName[v], onchange: v => { - settings.color = this.colors[v]; + settings.color = colVal[v]; writeSetting(); } } @@ -70,7 +73,7 @@ selected: selected }, /*LANG*/"< Back": () => back(), - /*LANG*/"from": { + /*LANG*/"time from": { value: settings.from, min: 0, max: 23, @@ -82,7 +85,7 @@ writeSetting(); } }, - /*LANG*/"to": { + /*LANG*/"time to": { value: settings.to, min: 1, max: 24, @@ -114,31 +117,32 @@ writeSetting(); } }, - /*LANG*/"message as prefix": { - value: settings.msgAsPrefix, - onchange: v => { - settings.msgAsPrefix = v; - writeSetting(); - } - }, /*LANG*/"msg": { value: settings.msg, format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, // setTimeout required to load after menu refresh - onchange: () => setTimeout(msg => { + onchange: () => setTimeout((msg, cb) => { if (require("Storage").read("textinput")) { g.clear(); require("textinput").input({text: msg}).then(result => { settings.msg = result; writeSetting(); - showMenu(7); + cb(7); }); } else { - E.showAlert(/*LANG*/"No keyboard app installed").then(() => showMenu(7)); + E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(7)); } - }), + }, 0, settings.msg, showMain), }, - /*LANG*/"vibration pattern": require("buzz_menu.js").pattern( + /*LANG*/"msg:": { + value: settings.msgAsPrefix, + format: v => v ? "add as prefix" : "replace msg", + onchange: v => { + settings.msgAsPrefix = v; + writeSetting(); + } + }, + /*LANG*/"vibration pattern": require("buzz_menu").pattern( settings.vibrate, v => { settings.vibrate = v; @@ -159,4 +163,4 @@ // draw main menu showMain(); -}) +})() \ No newline at end of file diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 741101222..083063318 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,5 +1,5 @@ // read settings to calculate alarm range -var settings = Object.assign({ +settings = Object.assign({ // if using var here settings will always be undefined enabled: true, hide: false, drawRange: true, @@ -26,14 +26,15 @@ if (settings.enabled) { g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); // draw alarm range times if enabled if (this.drawRange) { - require("Font4x5Numeric").add(Graphics); - g.setFont("4x5Numeric").drawString(this.from, this.x + 1, this.y + 12); + // directly include Font4x5Numeric + g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5); + g.drawString(this.from, this.x + 1, this.y + 12); g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23); } }, reload: function () { // abort if onChange is not available - if (typeof (global.sleeplog || {}).onChange === "object") return; + if (typeof (global.sleeplog || {}).onChange !== "object") return; // abort if no alarm exists inside range if (!(require("Storage").readJSON("sched.json", 1) || []) @@ -49,13 +50,13 @@ if (settings.enabled) { if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; // get cahed data, now and calculate time of now - var data = WIDGET.sleeplogalarm; + var settings = WIDGET.sleeplogalarm; var now = new Date(); var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000); // abort if now is outside the possible alarm range - if (tNow + data.earlier * 6E4 < data.from * 36E5 || - tNow + data.earlier * 6E4 >= data.to * 36E5) return; + if (tNow + settings.earlier * 6E4 < settings.from * 36E5 || + tNow + settings.earlier * 6E4 >= settings.to * 36E5) return; // execute trigger function require("sleeplogalarm.trigger.js")(now, tNow); From f193e5d9a1ea80c19c6f96546c17f2f6a947d905 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 23:16:00 +0100 Subject: [PATCH 016/342] [sleeplogalarm] Improve settings --- apps/sleeplogalarm/settings.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index 8b6bd96aa..8719761dd 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -23,26 +23,26 @@ require("Storage").writeJSON(filename, settings); } - // define color values and names - var colName = ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"]; - var colVal = [63488, 65504, 2016, 2047, 31, 63519, 0, 65535]; - // show widget menu function showWidMenu() { + // define color values and names + var colName = ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"]; + var colVal = [63488, 65504, 2016, 2047, 31, 63519, 0, 65535]; + // set menu var widgetMenu = { "": { title: "Widget Settings" }, /*LANG*/"< Back": () => showMain(7), - /*LANG*/"hide complete": { + /*LANG*/"hide": { value: settings.hide, onchange: v => { settings.hide = v; writeSetting(); } }, - /*LANG*/"draw time range": { + /*LANG*/"time range": { value: settings.drawRange, onchange: v => { settings.drawRange = v; @@ -104,13 +104,13 @@ max: 120, wrap: true, noList: true, - format: v => v + "min", + format: v => v + /*LANG*/"min", onchange: v => { settings.earlier = v; writeSetting(); } }, - /*LANG*/"disable on alarm": { + /*LANG*/"disable alarm": { value: settings.disableOnAlarm, onchange: v => { settings.disableOnAlarm = v; @@ -134,22 +134,21 @@ } }, 0, settings.msg, showMain), }, - /*LANG*/"msg:": { + /*LANG*/"msg as prefix": { value: settings.msgAsPrefix, - format: v => v ? "add as prefix" : "replace msg", onchange: v => { settings.msgAsPrefix = v; writeSetting(); } }, - /*LANG*/"vibration pattern": require("buzz_menu").pattern( + /*LANG*/"vib pattern": require("buzz_menu").pattern( settings.vibrate, v => { settings.vibrate = v; writeSetting(); } ), - /*LANG*/"Widget Settings": () => showWidMenu(), + /*LANG*/"Widget": () => showWidMenu(), /*LANG*/"Enabled": { value: settings.enabled, onchange: v => { @@ -163,4 +162,4 @@ // draw main menu showMain(); -})() \ No newline at end of file +}) From 53aaf929ef680f0627b5e3036f60b8bd24fb57cf Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 10 Nov 2022 23:56:03 +0100 Subject: [PATCH 017/342] [sleeplogalarm] Correct widget --- apps/sleeplogalarm/trigger.js | 2 +- apps/sleeplogalarm/widget.js | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/apps/sleeplogalarm/trigger.js b/apps/sleeplogalarm/trigger.js index 54135b649..cc4dd6f12 100644 --- a/apps/sleeplogalarm/trigger.js +++ b/apps/sleeplogalarm/trigger.js @@ -23,7 +23,7 @@ exports = function(now, tNow) { // filter for active alarms, ... a => a.on && !a.timer && // after now+10s and in alarm range - a.t > tNow && a.t >= settings.from * 36E5 && a.t <= settings.to * 36E5 + a.t > tNow && a.t >= settings.from * 36E5 && a.t < settings.to * 36E5 ), then) || []).sort((a, b) => a.t > b.t)[0]; } diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 083063318..5ccc57cda 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -50,16 +50,13 @@ if (settings.enabled) { if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; // get cahed data, now and calculate time of now - var settings = WIDGET.sleeplogalarm; + var settings = WIDGETS.sleeplogalarm; var now = new Date(); var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000); - // abort if now is outside the possible alarm range - if (tNow + settings.earlier * 6E4 < settings.from * 36E5 || - tNow + settings.earlier * 6E4 >= settings.to * 36E5) return; - - // execute trigger function - require("sleeplogalarm.trigger.js")(now, tNow); + // execute trigger function if now is inside the alarm range + if (tNow + settings.earlier * 6E4 >= settings.from * 36E5 && + tNow < settings.to * 36E5) require("sleeplogalarm.trigger.js")(now, tNow); }; } }; From f253d344fb10a50c270a22e9f4d984bb84e7e40f Mon Sep 17 00:00:00 2001 From: storm64 Date: Fri, 11 Nov 2022 17:17:07 +0100 Subject: [PATCH 018/342] [sleeplogalarm] Reworking wid->lib ... --- apps/sleeplogalarm/lib.js | 133 +++++++++++++++++++++++++++++++ apps/sleeplogalarm/metadata.json | 2 +- apps/sleeplogalarm/settings.js | 7 ++ apps/sleeplogalarm/trigger.js | 75 ----------------- apps/sleeplogalarm/widget.js | 56 +++---------- 5 files changed, 150 insertions(+), 123 deletions(-) create mode 100644 apps/sleeplogalarm/lib.js delete mode 100644 apps/sleeplogalarm/trigger.js diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js new file mode 100644 index 000000000..d7375f79a --- /dev/null +++ b/apps/sleeplogalarm/lib.js @@ -0,0 +1,133 @@ +// load library +var sched = require("sched"); + +// find next active alarm in range +function getNextAlarm(allAlarms, from, to, withId) { + if (withId) allAlarms = allAlarms.map((a, idx) => { + a.idx = idx; + return a; + }); + // return next + return sched.getActiveAlarms( + // filter for active alarms in range + allAlarms.filter(a => a.on && !a.timer && a.t >= from && a.t < to) + ).map(a => { + // add time to alarm + a.tTo = sched.getTimeToAlarm(a); + return a; + // sort to get next alarm first + }).sort((a, b) => a.tTo - b.tTo)[0] || {}; +} + +// calculate a time from its date +function dateToTime(date) { + return ((date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds()) * 1000; +} + +exports = { + // function to read settings with defaults + getSettings: function() { + return Object.assign({ + enabled: true, + hide: false, + drawTime: true, + color: g.theme.dark ? 65504 : 31, // yellow or blue + from: 4, // 0400 + to: 8, // 0800 + earlier: 30, + msgAsPrefix: true, + disableOnAlarm: false, // !!! not available if alarm is at the next day + msg: "...\n", + vibrate: "..", + as: true + }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); + }, + + // widget reload function + widReload: function() { + // abort if onChange is not available + if (typeof (global.sleeplog || {}).onChange !== "object") return; + + // read settings to calculate alarm range + var settings = this.getSettings(); + + // set the alarm time + this.time = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5).t; + + // abort if no alarm time could be found inside range + if (!this.time) return; + + // set widget width if not hidden + if (!this.hidden) this.width = 8; + + // insert sleeplogalarm function to onChange + sleeplog.onChange.sleeplogalarm = function (data) { + // abort if not changed from deep sleep to light sleep or awake + if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; + + // get settings from widget, now and calculate time of now + var settings = WIDGETS.sleeplogalarm; + var now = new Date(); + var tNow = dateToTime(now); + + // execute trigger function if inside the alarm range + if (tNow >= settings.time - settings.earlier * 6E4 && + tNow < settings.time) require("sleeplogalarm").trigger(now, tNow); + }; + }, + + // trigger function + trigger: function(now, tNow) { + // define settings + var settings = this.getSettings(); + + // calculate then date + var then = new Date(now + settings.earlier * 6E4); + + // read all alarms + var allAlarms = sched.getAlarms(); + + // find first active alarm + var alarm = firstActiveAlarm(allAlarms); + + // return if no alarm is found + if (!alarm) return; + + // disable early triggered alarm if set and now and then on the same day + if (settings.disableOnAlarm && now.getDate() === then.getDate()) { + // add indexes to find alarm to temporary disable + allAlarms = allAlarms.map((a, idx) => { + a.idx = idx; + return a; + }); + // get index of first active alarm + var idx = firstActiveAlarm(allAlarms).idx; + // set this alarms last to then + allAlarms[idx].last = then.getDate(); + // remove added indexes + allAlarms = allAlarms.map(a => { + delete a.idx; + return a; + }); + } + + // add new alarm for now with data from found alarm + allAlarms.push({ + id: "sleeplog", + appid: "sleeplog", + on: true, + t: (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000), + dow: 127, + msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), + vibrate: settings.vibrate || alarm.vibrate, + as: settings.as, + del: true + }); + + // write changes + sched.setAlarms(allAlarms); + + // trigger sched.js + load("sched.js"); + } +}; \ No newline at end of file diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 198d8e07a..fc1d546da 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -11,8 +11,8 @@ "dependencies": {"sleeplog": "app"}, "readme": "README.md", "storage": [ + {"name": "sleeplogalarm", "url": "lib.js"}, {"name": "sleeplogalarm.settings.js", "url": "settings.js"}, - {"name": "sleeplogalarm.trigger.js", "url": "trigger.js"}, {"name": "sleeplogalarm.wid.js", "url": "widget.js"} ] } diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index 8719761dd..f6787f3bd 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -148,6 +148,13 @@ writeSetting(); } ), + /*LANG*/"auto snooze": { + value: settings.as, + onchange: v => { + settings.as = v; + writeSetting(); + } + }, /*LANG*/"Widget": () => showWidMenu(), /*LANG*/"Enabled": { value: settings.enabled, diff --git a/apps/sleeplogalarm/trigger.js b/apps/sleeplogalarm/trigger.js deleted file mode 100644 index cc4dd6f12..000000000 --- a/apps/sleeplogalarm/trigger.js +++ /dev/null @@ -1,75 +0,0 @@ -exports = function(now, tNow) { - // define settings - var settings = Object.assign({ - from: 4, // 0400 - to: 8, // 0800 - earlier: 30, - msgAsPrefix: true, - disableOnAlarm: false, // !!! not available if alarm is at the next day - msg: "...\n", - vibrate: "..", - as: true - }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - - // calculate then date - var then = new Date(now + settings.earlier * 6E4); - - // load library - var sched = require("sched"); - - // define function to return first active alarm in range to come - function firstActiveAlarm(allAlarms) { - return (sched.getActiveAlarms(allAlarms.filter( - // filter for active alarms, ... - a => a.on && !a.timer && - // after now+10s and in alarm range - a.t > tNow && a.t >= settings.from * 36E5 && a.t < settings.to * 36E5 - ), then) || []).sort((a, b) => a.t > b.t)[0]; - } - - // read all alarms - var allAlarms = sched.getAlarms(); - - // find first active alarm - var alarm = firstActiveAlarm(allAlarms); - - // return if no alarm is found - if (!alarm) return; - - // disable early triggered alarm if set and now and then on the same day - if (settings.disableOnAlarm && now.getDate() === then.getDate()) { - // add indexes to find alarm to temporary disable - allAlarms = allAlarms.map((a, idx) => { - a.idx = idx; - return a; - }); - // get index of first active alarm - var idx = firstActiveAlarm(allAlarms).idx; - // set this alarms last to then - allAlarms[idx].last = then.getDate(); - // remove added indexes - allAlarms = allAlarms.map(a => { - delete a.idx; - return a; - }); - } - - // add new alarm for now with data from found alarm - allAlarms.push({ - id: "sleeplog", - appid: "sleeplog", - on: true, - t: (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000), - dow: 127, - msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), - vibrate: settings.vibrate || alarm.vibrate, - as: settings.as, - del: true - }); - - // write changes - sched.setAlarms(allAlarms); - - // trigger sched.js - load("sched.js"); -}; \ No newline at end of file diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 5ccc57cda..d0e60b488 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,64 +1,26 @@ -// read settings to calculate alarm range -settings = Object.assign({ // if using var here settings will always be undefined - enabled: true, - hide: false, - drawRange: true, - color: g.theme.dark ? 65504 : 31, // yellow or blue - from: 4, // 0400 - to: 8, // 0800 - earlier: 30 -}, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); - // check if enabled in settings -if (settings.enabled) { +if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enabled: true}).enabled) { // insert neccessary settings into widget WIDGETS.sleeplogalarm = { area: "tl", width: 0, - drawRange: settings.drawRange, + drawTime: settings.drawTime, color: settings.color, - from: settings.from, - to: settings.to, + time: 0, earlier: settings.earlier, draw: function () { // draw zzz g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); - // draw alarm range times if enabled - if (this.drawRange) { + // draw time of alarm if enabled + if (this.drawTime && this.time) { // directly include Font4x5Numeric - g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5); - g.drawString(this.from, this.x + 1, this.y + 12); - g.setFontAlign(1, 1).drawString(this.to, this.x + this.width + 1, this.y + 23); + g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); + g.drawString(0|(this.time / 36E5), this.x + this.width + 1, this.y + 12); + g.drawString(0|((this.time / 36E5)%1 * 60), this.x + this.width + 1, this.y + 23); } }, - reload: function () { - // abort if onChange is not available - if (typeof (global.sleeplog || {}).onChange !== "object") return; - - // abort if no alarm exists inside range - if (!(require("Storage").readJSON("sched.json", 1) || []) - .filter(a => a.on && !a.timer) - .some(a => a.t >= this.from * 36E5 && a.t < this.to * 36E5)) return; - - // set widget width if not hidden - if (!this.hidden) this.width = 8; - - // insert sleeplogalarm function to onChange - sleeplog.onChange.sleeplogalarm = function (data) { - // abort if not changed from deep sleep to light sleep or awake - if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; - - // get cahed data, now and calculate time of now - var settings = WIDGETS.sleeplogalarm; - var now = new Date(); - var tNow = (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000); - - // execute trigger function if now is inside the alarm range - if (tNow + settings.earlier * 6E4 >= settings.from * 36E5 && - tNow < settings.to * 36E5) require("sleeplogalarm.trigger.js")(now, tNow); - }; - } + reload: require("sleeplogalarm").widReload() }; // load widget From e92bd01fc8b50cb7ed53d2e5f404c6705f7d9b4f Mon Sep 17 00:00:00 2001 From: storm64 Date: Sat, 12 Nov 2022 00:16:39 +0100 Subject: [PATCH 019/342] [sleeplogalarm] Finish transfer to lib --- apps/sleeplogalarm/lib.js | 34 +++++++++++----------------------- apps/sleeplogalarm/settings.js | 22 +++------------------- apps/sleeplogalarm/widget.js | 22 ++++++++++++++-------- 3 files changed, 28 insertions(+), 50 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index d7375f79a..d5fb87a65 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -19,11 +19,6 @@ function getNextAlarm(allAlarms, from, to, withId) { }).sort((a, b) => a.tTo - b.tTo)[0] || {}; } -// calculate a time from its date -function dateToTime(date) { - return ((date.getHours() * 60 + date.getMinutes()) * 60 + date.getSeconds()) * 1000; -} - exports = { // function to read settings with defaults getSettings: function() { @@ -68,7 +63,7 @@ exports = { // get settings from widget, now and calculate time of now var settings = WIDGETS.sleeplogalarm; var now = new Date(); - var tNow = dateToTime(now); + var tNow = ((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000; // execute trigger function if inside the alarm range if (tNow >= settings.time - settings.earlier * 6E4 && @@ -78,32 +73,25 @@ exports = { // trigger function trigger: function(now, tNow) { - // define settings + // read settings var settings = this.getSettings(); - // calculate then date - var then = new Date(now + settings.earlier * 6E4); - // read all alarms var allAlarms = sched.getAlarms(); // find first active alarm - var alarm = firstActiveAlarm(allAlarms); + var alarm = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5, settings.disableOnAlarm); // return if no alarm is found if (!alarm) return; - // disable early triggered alarm if set and now and then on the same day - if (settings.disableOnAlarm && now.getDate() === then.getDate()) { - // add indexes to find alarm to temporary disable - allAlarms = allAlarms.map((a, idx) => { - a.idx = idx; - return a; - }); - // get index of first active alarm - var idx = firstActiveAlarm(allAlarms).idx; - // set this alarms last to then - allAlarms[idx].last = then.getDate(); + // get date of the alarm + var aDate = new Date(now + alarm.tTo).getDate(); + + // disable earlier triggered alarm if set and on the same day + if (settings.disableOnAlarm && now.getDate() === aDate) { + // set alarms last to today + allAlarms[alarm.idx].last = aDate; // remove added indexes allAlarms = allAlarms.map(a => { delete a.idx; @@ -116,7 +104,7 @@ exports = { id: "sleeplog", appid: "sleeplog", on: true, - t: (((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000), + t: tNow, dow: 127, msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), vibrate: settings.vibrate || alarm.vibrate, diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index f6787f3bd..2447a20aa 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -1,26 +1,10 @@ (function(back) { - // define settings filename - var filename = "sleeplogalarm.settings.json"; - - // define settings - var settings = Object.assign({ - enabled: true, - hide: false, - drawRange: true, - color: g.theme.dark ? 65504 : 31, // yellow or blue - from: 4, // 0400 - to: 8, // 0800 - earlier: 30, - disableOnAlarm: false, // !!! not available if alarm is at the next day - msg: "...\n", - msgAsPrefix: true, - vibrate: "..", - as: true - }, require("Storage").readJSON(filename, true) || {}); + // read settings + var settings = require("sleeplogalarm").getSettings(); // write change to storage function writeSetting() { - require("Storage").writeJSON(filename, settings); + require("Storage").writeJSON("sleeplogalarm.settings.json", settings); } // show widget menu diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index d0e60b488..ee5e06fcb 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,5 +1,7 @@ // check if enabled in settings if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enabled: true}).enabled) { + // read settings + var settings = require("sleeplogalarm").getSettings(); // insert neccessary settings into widget WIDGETS.sleeplogalarm = { @@ -11,18 +13,22 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable earlier: settings.earlier, draw: function () { // draw zzz - g.reset().setColor(this.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); - // draw time of alarm if enabled - if (this.drawTime && this.time) { - // directly include Font4x5Numeric - g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); - g.drawString(0|(this.time / 36E5), this.x + this.width + 1, this.y + 12); - g.drawString(0|((this.time / 36E5)%1 * 60), this.x + this.width + 1, this.y + 23); - } + g.reset().setColor(settings.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + // call function to draw the time of alarm if a alarm is found + if (this.time) this.drawTime(this.time); }, + drawTime: () => {}, reload: require("sleeplogalarm").widReload() }; + // add function to draw the time of alarm if enabled + if (this.drawTime) WIDGETS.sleeplogalarm.drawTime = function(time) { + // directly include Font4x5Numeric + g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); + g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 12); + g.drawString(0|((time / 36E5)%1 * 60), this.x + this.width + 1, this.y + 23); + }; + // load widget WIDGETS.sleeplogalarm.reload(); } \ No newline at end of file From bc99316979698bf6d3f2274bccab02d67da8d000 Mon Sep 17 00:00:00 2001 From: storm64 Date: Sat, 12 Nov 2022 00:19:36 +0100 Subject: [PATCH 020/342] [sleeplogalarm] Clear dublicates in widget --- apps/sleeplogalarm/widget.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index ee5e06fcb..a8bedaa13 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -7,8 +7,6 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable WIDGETS.sleeplogalarm = { area: "tl", width: 0, - drawTime: settings.drawTime, - color: settings.color, time: 0, earlier: settings.earlier, draw: function () { From 111a194e573dd212c4e8541f1609581de9c417ef Mon Sep 17 00:00:00 2001 From: storm64 Date: Sat, 12 Nov 2022 01:42:31 +0100 Subject: [PATCH 021/342] [sleeplogalarm] Corrections, prevent retrigger --- apps/sleeplogalarm/lib.js | 25 +++++++++++++++---------- apps/sleeplogalarm/widget.js | 10 +++++----- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index d5fb87a65..7f513221f 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -7,16 +7,15 @@ function getNextAlarm(allAlarms, from, to, withId) { a.idx = idx; return a; }); - // return next - return sched.getActiveAlarms( - // filter for active alarms in range - allAlarms.filter(a => a.on && !a.timer && a.t >= from && a.t < to) - ).map(a => { - // add time to alarm + // return next active alarms in range + return allAlarms.filter( + a => a.on && !a.timer && a.t >= from && a.t < to + ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; - // sort to get next alarm first - }).sort((a, b) => a.tTo - b.tTo)[0] || {}; + }).filter(a => a.tTo // filter non active alarms + // sort to get next alarm first + ).sort((a, b) => a.tTo - b.tTo)[0] || {}; } exports = { @@ -44,7 +43,7 @@ exports = { if (typeof (global.sleeplog || {}).onChange !== "object") return; // read settings to calculate alarm range - var settings = this.getSettings(); + var settings = exports.getSettings(); // set the alarm time this.time = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5).t; @@ -55,6 +54,9 @@ exports = { // set widget width if not hidden if (!this.hidden) this.width = 8; + // abort if already alarmed for this alarm + if (sleeplog.onChange.sleeplogalarm == this.time) return; + // insert sleeplogalarm function to onChange sleeplog.onChange.sleeplogalarm = function (data) { // abort if not changed from deep sleep to light sleep or awake @@ -74,7 +76,7 @@ exports = { // trigger function trigger: function(now, tNow) { // read settings - var settings = this.getSettings(); + var settings = exports.getSettings(); // read all alarms var allAlarms = sched.getAlarms(); @@ -82,6 +84,9 @@ exports = { // find first active alarm var alarm = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5, settings.disableOnAlarm); + // clear sleeplog.onChange function and set alarm time to prevent resetting for this alarm + sleeplog.onChange.sleeplogalarm = alarm.t; + // return if no alarm is found if (!alarm) return; diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index a8bedaa13..96f4e7740 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -1,7 +1,7 @@ // check if enabled in settings if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enabled: true}).enabled) { // read settings - var settings = require("sleeplogalarm").getSettings(); + settings = require("sleeplogalarm").getSettings(); // is undefined if used with var // insert neccessary settings into widget WIDGETS.sleeplogalarm = { @@ -13,17 +13,17 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable // draw zzz g.reset().setColor(settings.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); // call function to draw the time of alarm if a alarm is found - if (this.time) this.drawTime(this.time); + if (this.time) this.drawTime(this.time + 1); }, drawTime: () => {}, - reload: require("sleeplogalarm").widReload() + reload: require("sleeplogalarm").widReload }; // add function to draw the time of alarm if enabled - if (this.drawTime) WIDGETS.sleeplogalarm.drawTime = function(time) { + if (settings.drawTime) WIDGETS.sleeplogalarm.drawTime = function(time) { // directly include Font4x5Numeric g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); - g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 12); + g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 17); g.drawString(0|((time / 36E5)%1 * 60), this.x + this.width + 1, this.y + 23); }; From 9105c94e1b8f002bd9b6cff08ff9db3f9239a598 Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 16 Nov 2022 22:46:49 +0100 Subject: [PATCH 022/342] [sleeplog] Replace onChange with trigger object --- apps/sleeplog/README.md | 18 ++++++++----- apps/sleeplog/boot.js | 58 ++++++++++++++++++++++------------------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 00c07ef4a..9e32ad37f 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -151,13 +151,19 @@ Available through the App Loader when your watch is connected. require("sleeplog").getStats(0, 0, require("sleeplog").readLog()); ``` -#### Add functions triggered by status changes -With the following code it is possible to add functions that will be called on status changes. +#### Add functions triggered by status changes or inside a specified time period +With the following code it is possible to add functions that will be called every 10 minutes after new movement data when meeting the specified parameters on each : ``` -// first ensure that the sleeplog onChange object is available -if (typeof (global.sleeplog || {}).onChange === "object") { - // then add your function to the onChange object - sleeplog.onChange["my app name"] = function(data) { print(data); }; +// first ensure that the sleeplog trigger object is available (sleeplog is enabled) +if (typeof (global.sleeplog || {}).trigger === "object") { + // then add your parameters with the function to call as object into the trigger object + sleeplog.trigger["my app name"] = { + onChange: false, // false as default, if true call fn only on a status change + from: 0, // 0 as default, in ms, first time fn will be called + to: 24*60*60*1000, // 24h as default, in ms, last time fn will be called + // reference time to from & to is rounded to full minutes + fn: function(data) { print(data); } // function to be executed + }; } ``` The passed data object has the following properties: diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 6a9c7c6e6..d787b8dff 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -253,26 +253,38 @@ if (sleeplog.conf.enabled) { } } + // check if the status has changed + var changed = data.status !== this.status || data.consecutive !== this.consecutive; + + // read and check trigger entries + var triggers = Object.keys(this.trigger) || []; + if (triggers.length) { + // calculate time from timestamp in ms on full minutes + var time = data.timestamp; + time = ((time.getHours() * 60) + time.getMinutes() * 60) * 1000; + // go through all triggers + triggers.forEach(key => { + // read entry to key + var entry = this.trigger[key]; + // check if the event matches the entries requirements + if (typeof entry.fn === "function" && (changed || !entry.onChange) && + (entry.from || 0) <= time && (entry.to || 24 * 60 * 60 * 1000) >= time) + // and call afterwards with status data + setTimeout(fn, 100, { + timestamp: new Date(data.timestamp), + status: data.status === this.status ? undefined : data.status, + consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, + prevStatus: this.status, + prevConsecutive: this.consecutive + }); + }); + } + // cache change into a known consecutive state var changeIntoConsec = data.consecutive; - // check if the status has changed - if (data.status !== this.status || data.consecutive !== this.consecutive) { - // read and check for onChange functions - var onChange = Object.keys(this.onChange) || []; - if (onChange.length) onChange.forEach(key => { - // read function to key - var fn = this.onChange[key]; - // setup timeouts to start onChange functions if fn is a function - if (typeof fn === "function") setTimeout(fn, 100, { - timestamp: new Date(data.timestamp), - status: data.status === this.status ? undefined : data.status, - consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, - prevStatus: this.status, - prevConsecutive: this.consecutive - }); - }); - + // actions on a status change + if (changed) { // append status this.appendStatus(data.timestamp, data.status, data.consecutive); @@ -336,16 +348,8 @@ if (sleeplog.conf.enabled) { return this.statsCache; }, - // define object for functions to execute after a status change (changes had hapened 10min earlier) - // changed values will be passed as object with the following properties: - // timestamp: as date object, - // status: if changed 0-4 else undefined, - // (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) - // consecutive: if changed 0-2 else undefined, - // (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) - // prevStatus: value of the previous status 0-4, - // prevConsecutive: value of the previous status 0-2 - onChange: {} + // define trigger object + trigger: {} }, sleeplog); // initial starting From 8d54208aded24279c2cfff3e238de828642b33a5 Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 16 Nov 2022 23:24:43 +0100 Subject: [PATCH 023/342] [sleeplogalarm] Update using sleeplog.trigger --- apps/sleeplogalarm/lib.js | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 7f513221f..ea19d04e2 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -39,8 +39,8 @@ exports = { // widget reload function widReload: function() { - // abort if onChange is not available - if (typeof (global.sleeplog || {}).onChange !== "object") return; + // abort if trigger object is not available + if (typeof (global.sleeplog || {}).trigger !== "object") return; // read settings to calculate alarm range var settings = exports.getSettings(); @@ -55,26 +55,22 @@ exports = { if (!this.hidden) this.width = 8; // abort if already alarmed for this alarm - if (sleeplog.onChange.sleeplogalarm == this.time) return; + if ((sleeplog.trigger.sleeplogalarm || {}).last == this.time) return; - // insert sleeplogalarm function to onChange - sleeplog.onChange.sleeplogalarm = function (data) { - // abort if not changed from deep sleep to light sleep or awake - if (data.prevStatus !== 4 || !(data.status === 3 || data.status === 2)) return; - - // get settings from widget, now and calculate time of now - var settings = WIDGETS.sleeplogalarm; - var now = new Date(); - var tNow = ((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000; - - // execute trigger function if inside the alarm range - if (tNow >= settings.time - settings.earlier * 6E4 && - tNow < settings.time) require("sleeplogalarm").trigger(now, tNow); + // insert sleeplogalarm conditions and function + sleeplog.trigger.sleeplogalarm = { + from: settings.time - settings.earlier * 6E4, + to: settings.time - 1, + fn: function (data) { + // execute trigger function if on light sleep or awake + if (data.status === 3 || data.status === 2) + require("sleeplogalarm").trigger(); + } }; }, // trigger function - trigger: function(now, tNow) { + trigger: function(tNow) { // read settings var settings = exports.getSettings(); @@ -84,12 +80,15 @@ exports = { // find first active alarm var alarm = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5, settings.disableOnAlarm); - // clear sleeplog.onChange function and set alarm time to prevent resetting for this alarm - sleeplog.onChange.sleeplogalarm = alarm.t; + // clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm + sleeplog.trigger.sleeplogalarm = {last: alarm.t}; // return if no alarm is found if (!alarm) return; + // get now + var now = new Date(); + // get date of the alarm var aDate = new Date(now + alarm.tTo).getDate(); @@ -109,7 +108,7 @@ exports = { id: "sleeplog", appid: "sleeplog", on: true, - t: tNow, + t: ((time.getHours() * 60 + time.getMinutes()) * 60 + time.getSeconds()) * 1000, dow: 127, msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), vibrate: settings.vibrate || alarm.vibrate, From a2fd46e35ccc8412b807b884fb54fe2605862b8e Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 16 Nov 2022 23:26:23 +0100 Subject: [PATCH 024/342] [sleeplog] Correct calculation of time in trigger --- apps/sleeplog/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index d787b8dff..17388da44 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -261,7 +261,7 @@ if (sleeplog.conf.enabled) { if (triggers.length) { // calculate time from timestamp in ms on full minutes var time = data.timestamp; - time = ((time.getHours() * 60) + time.getMinutes() * 60) * 1000; + time = (time.getHours() * 60 + time.getMinutes()) * 60 * 1000; // go through all triggers triggers.forEach(key => { // read entry to key From abb719319f871363da0394ae4f6c9007c8a968a4 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 08:36:22 +0100 Subject: [PATCH 025/342] [sleeplog] Correct time as date for trigger --- apps/sleeplog/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 17388da44..75383c7df 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -260,7 +260,7 @@ if (sleeplog.conf.enabled) { var triggers = Object.keys(this.trigger) || []; if (triggers.length) { // calculate time from timestamp in ms on full minutes - var time = data.timestamp; + var time = new Date(data.timestamp); time = (time.getHours() * 60 + time.getMinutes()) * 60 * 1000; // go through all triggers triggers.forEach(key => { From 528716322a0656e9530d657b7960912bb8a92b51 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 09:26:51 +0100 Subject: [PATCH 026/342] [sleeplog] Correct fn call for trigger --- apps/sleeplog/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 75383c7df..17e5fe70a 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -270,7 +270,7 @@ if (sleeplog.conf.enabled) { if (typeof entry.fn === "function" && (changed || !entry.onChange) && (entry.from || 0) <= time && (entry.to || 24 * 60 * 60 * 1000) >= time) // and call afterwards with status data - setTimeout(fn, 100, { + setTimeout(entry.fn, 100, { timestamp: new Date(data.timestamp), status: data.status === this.status ? undefined : data.status, consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, From 550b95d9692304262314901bf8f1edbe5b8c594f Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 09:33:00 +0100 Subject: [PATCH 027/342] [sleeplogalarm] Correct times in sleeplog.trigger --- apps/sleeplogalarm/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index ea19d04e2..7701d2624 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -59,8 +59,8 @@ exports = { // insert sleeplogalarm conditions and function sleeplog.trigger.sleeplogalarm = { - from: settings.time - settings.earlier * 6E4, - to: settings.time - 1, + from: this.time - settings.earlier * 6E4, + to: this.time - 1, fn: function (data) { // execute trigger function if on light sleep or awake if (data.status === 3 || data.status === 2) From dfe57c0e77f2095c823fbb77a6ac5500119ad57e Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 10:04:57 +0100 Subject: [PATCH 028/342] [sleeplog] Correct generation of time in trigger --- apps/sleeplog/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 17e5fe70a..2ab8f9eff 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -260,7 +260,7 @@ if (sleeplog.conf.enabled) { var triggers = Object.keys(this.trigger) || []; if (triggers.length) { // calculate time from timestamp in ms on full minutes - var time = new Date(data.timestamp); + var time = new Date(); time = (time.getHours() * 60 + time.getMinutes()) * 60 * 1000; // go through all triggers triggers.forEach(key => { From 855a2c4263d2cfa5a22701707d1db82b18623fd9 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 10:26:52 +0100 Subject: [PATCH 029/342] [sleeplog] Switch unchanged data behav. in trigger --- apps/sleeplog/README.md | 8 ++++---- apps/sleeplog/boot.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 9e32ad37f..66d26e7f0 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -169,12 +169,12 @@ if (typeof (global.sleeplog || {}).trigger === "object") { The passed data object has the following properties: - timestamp: of the status change as date object, (should be around 10min. before "now", the actual call of the function) -- status: if changed the value of the new status (0-4) else undefined, +- status: value of the new status (0-4), (0 = unknown, 1 = not worn, 2 = awake, 3 = light sleep, 4 = deep sleep) -- consecutive: if changed the value of the new status (0-2) else undefined, +- consecutive: value of the new status (0-2), (0 = unknown, 1 = no consecutive sleep, 2 = consecutive sleep) -- prevStatus: value of the previous status (0-4), -- prevConsecutive: value of the previous status (0-2) +- prevStatus: if changed the value of the previous status (0-4) else undefined, +- prevConsecutive: if changed the value of the previous status (0-2) else undefined --- diff --git a/apps/sleeplog/boot.js b/apps/sleeplog/boot.js index 2ab8f9eff..78fd23450 100644 --- a/apps/sleeplog/boot.js +++ b/apps/sleeplog/boot.js @@ -272,10 +272,10 @@ if (sleeplog.conf.enabled) { // and call afterwards with status data setTimeout(entry.fn, 100, { timestamp: new Date(data.timestamp), - status: data.status === this.status ? undefined : data.status, - consecutive: data.consecutive === this.consecutive ? undefined : data.consecutive, - prevStatus: this.status, - prevConsecutive: this.consecutive + status: data.status, + consecutive: data.consecutive, + prevStatus: data.status === this.status ? undefined : this.status, + prevConsecutive: data.consecutive === this.consecutive ? undefined : this.consecutive }); }); } From 572020430773ce2f753bb964ff0d2bf5855bda14 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 10:32:55 +0100 Subject: [PATCH 030/342] [sleeplogalarm] Correct t inside created alarm --- apps/sleeplogalarm/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 7701d2624..25bdfdbe4 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -70,7 +70,7 @@ exports = { }, // trigger function - trigger: function(tNow) { + trigger: function() { // read settings var settings = exports.getSettings(); @@ -108,7 +108,7 @@ exports = { id: "sleeplog", appid: "sleeplog", on: true, - t: ((time.getHours() * 60 + time.getMinutes()) * 60 + time.getSeconds()) * 1000, + t: ((now.getHours() * 60 + now.getMinutes()) * 60 + now.getSeconds()) * 1000, dow: 127, msg: settings.msg + (settings.msgAsPrefix ? alarm.msg || "" : ""), vibrate: settings.vibrate || alarm.vibrate, From 8800ba8fdaec6898be8fe015ab5c586f72473b9e Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 15:16:18 +0100 Subject: [PATCH 031/342] [sleeplogalarm] Reorder settings + filter for msg --- apps/sleeplogalarm/lib.js | 25 +++--- apps/sleeplogalarm/settings.js | 134 ++++++++++++++++++++------------- apps/sleeplogalarm/widget.js | 4 +- 3 files changed, 95 insertions(+), 68 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 25bdfdbe4..8beb64ffd 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -2,14 +2,14 @@ var sched = require("sched"); // find next active alarm in range -function getNextAlarm(allAlarms, from, to, withId) { +function getNextAlarm(allAlarms, from, to, msg, withId) { if (withId) allAlarms = allAlarms.map((a, idx) => { a.idx = idx; return a; }); // return next active alarms in range return allAlarms.filter( - a => a.on && !a.timer && a.t >= from && a.t < to + a => a.on && !a.timer && a.t >= from && a.t < to && (!msg || a.msg.includes(msg)) ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; @@ -23,17 +23,18 @@ exports = { getSettings: function() { return Object.assign({ enabled: true, - hide: false, - drawTime: true, - color: g.theme.dark ? 65504 : 31, // yellow or blue - from: 4, // 0400 - to: 8, // 0800 earlier: 30, + filter_from: 0, + filter_to: 24, + filter_msg: "", + vibrate: "..", + msg: "...\n", msgAsPrefix: true, disableOnAlarm: false, // !!! not available if alarm is at the next day - msg: "...\n", - vibrate: "..", - as: true + as: true, + wid_hide: false, + wid_time: true, + wid_color: g.theme.dark ? 65504 : 31, // yellow or blue }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); }, @@ -46,7 +47,7 @@ exports = { var settings = exports.getSettings(); // set the alarm time - this.time = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5).t; + this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg).t; // abort if no alarm time could be found inside range if (!this.time) return; @@ -78,7 +79,7 @@ exports = { var allAlarms = sched.getAlarms(); // find first active alarm - var alarm = getNextAlarm(sched.getAlarms(), settings.from * 36E5, settings.to * 36E5, settings.disableOnAlarm); + var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg, settings.disableOnAlarm); // clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm sleeplog.trigger.sleeplogalarm = {last: alarm.t}; diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index 2447a20aa..c62f6a273 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -7,6 +7,66 @@ require("Storage").writeJSON("sleeplogalarm.settings.json", settings); } + // read input from keyboard + function readInput(setting, retPos, cb) { + setTimeout((setting, retPos, cb) => { + if (require("Storage").read("textinput")) { + g.clear(); + require("textinput").input({text: settings[setting]}).then(result => { + settings[setting] = result; + writeSetting(); + cb(retPos); + }); + } else { + E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(retPos)); + } + }, 0, setting, retPos, cb); + } + + // show widget menu + function showFilterMenu() { + // set menu + var filterMenu = { + "": { + title: "Filter Alarm" + }, + /*LANG*/"< Back": () => showMain(2), + /*LANG*/"time from": { + value: settings.filter_from, + step: 0.25, + min: 0, + max: 23, + wrap: true, + noList: true, + format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"), + onchange: v => { + settings.filter_from = v; + writeSetting(); + } + }, + /*LANG*/"time to": { + value: settings.filter_to, + step: 0.25, + min: 1, + max: 24, + wrap: true, + noList: true, + format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"), + onchange: v => { + settings.filter_to = v; + writeSetting(); + } + }, + /*LANG*/"msg includes": { + value: settings.filter_msg, + format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, + // setTimeout required to load after menu refresh + onchange: () => readInput("filter_msg", 3, showFilterMenu) + } + }; + var menu = E.showMenu(filterMenu); + } + // show widget menu function showWidMenu() { // define color values and names @@ -18,29 +78,29 @@ "": { title: "Widget Settings" }, - /*LANG*/"< Back": () => showMain(7), + /*LANG*/"< Back": () => showMain(8), /*LANG*/"hide": { - value: settings.hide, + value: settings.wid_hide, onchange: v => { - settings.hide = v; + settings.wid_hide = v; writeSetting(); } }, - /*LANG*/"time range": { - value: settings.drawRange, + /*LANG*/"show time": { + value: settings.wid_time, onchange: v => { - settings.drawRange = v; + settings.wid_time = v; writeSetting(); } }, /*LANG*/"color": { - value: colVal.indexOf(settings.color), + value: colVal.indexOf(settings.wid_color), min: 0, max: colVal.length -1, wrap: true, format: v => colName[v], onchange: v => { - settings.color = colVal[v]; + settings.wid_color = colVal[v]; writeSetting(); } } @@ -57,30 +117,6 @@ selected: selected }, /*LANG*/"< Back": () => back(), - /*LANG*/"time from": { - value: settings.from, - min: 0, - max: 23, - wrap: true, - noList: true, - format: v => v + ":00", - onchange: v => { - settings.from = v; - writeSetting(); - } - }, - /*LANG*/"time to": { - value: settings.to, - min: 1, - max: 24, - wrap: true, - noList: true, - format: v => v + ":00", - onchange: v => { - settings.to = v; - writeSetting(); - } - }, /*LANG*/"erlier": { value: settings.earlier, step: 10, @@ -94,29 +130,19 @@ writeSetting(); } }, - /*LANG*/"disable alarm": { - value: settings.disableOnAlarm, - onchange: v => { - settings.disableOnAlarm = v; + /*LANG*/"Filter Alarm": () => showFilterMenu(), + /*LANG*/"vib pattern": require("buzz_menu").pattern( + settings.vibrate, + v => { + settings.vibrate = v; writeSetting(); } - }, + ), /*LANG*/"msg": { value: settings.msg, format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, // setTimeout required to load after menu refresh - onchange: () => setTimeout((msg, cb) => { - if (require("Storage").read("textinput")) { - g.clear(); - require("textinput").input({text: msg}).then(result => { - settings.msg = result; - writeSetting(); - cb(7); - }); - } else { - E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(7)); - } - }, 0, settings.msg, showMain), + onchange: () => readInput("msg", 4, showMain) }, /*LANG*/"msg as prefix": { value: settings.msgAsPrefix, @@ -125,13 +151,13 @@ writeSetting(); } }, - /*LANG*/"vib pattern": require("buzz_menu").pattern( - settings.vibrate, - v => { - settings.vibrate = v; + /*LANG*/"disable alarm": { + value: settings.disableOnAlarm, + onchange: v => { + settings.disableOnAlarm = v; writeSetting(); } - ), + }, /*LANG*/"auto snooze": { value: settings.as, onchange: v => { diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 96f4e7740..991238140 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -11,7 +11,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable earlier: settings.earlier, draw: function () { // draw zzz - g.reset().setColor(settings.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + g.reset().setColor(settings.wid_color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); // call function to draw the time of alarm if a alarm is found if (this.time) this.drawTime(this.time + 1); }, @@ -20,7 +20,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable }; // add function to draw the time of alarm if enabled - if (settings.drawTime) WIDGETS.sleeplogalarm.drawTime = function(time) { + if (settings.wid_time) WIDGETS.sleeplogalarm.drawTime = function(time) { // directly include Font4x5Numeric g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 17); From 67d6da813ec9d599274e285d32bcd2320992a19b Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 16:32:47 +0100 Subject: [PATCH 032/342] [sleeplogalarm] Correct typo --- apps/sleeplogalarm/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 8beb64ffd..f38945fb4 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -47,7 +47,7 @@ exports = { var settings = exports.getSettings(); // set the alarm time - this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg).t; + this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg).t; // abort if no alarm time could be found inside range if (!this.time) return; @@ -79,7 +79,7 @@ exports = { var allAlarms = sched.getAlarms(); // find first active alarm - var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings,filter_msg, settings.disableOnAlarm); + var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg, settings.disableOnAlarm); // clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm sleeplog.trigger.sleeplogalarm = {last: alarm.t}; From 9def5a8ee3f427c7cbc440e761f93ece12835c9c Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 17:09:18 +0100 Subject: [PATCH 033/342] [sleeplogalarm] Don't show own alarm --- apps/sleeplogalarm/lib.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index f38945fb4..716c69c3d 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -9,7 +9,8 @@ function getNextAlarm(allAlarms, from, to, msg, withId) { }); // return next active alarms in range return allAlarms.filter( - a => a.on && !a.timer && a.t >= from && a.t < to && (!msg || a.msg.includes(msg)) + a => a.on && !a.timer && a.id !== "sleeplog" && + a.t >= from && a.t < to && (!msg || a.msg.includes(msg)) ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; From c25750ebc1df501162113462cdd70b569bd3092b Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 17:44:36 +0100 Subject: [PATCH 034/342] [sleeplogalarm] Correct times display in settings --- apps/sleeplogalarm/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index c62f6a273..fe774c3b2 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -38,7 +38,7 @@ max: 23, wrap: true, noList: true, - format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"), + format: v => (0|v) + ":" + ("" + (0|(v%1 * 60))).padStart(2, "0"), onchange: v => { settings.filter_from = v; writeSetting(); @@ -51,7 +51,7 @@ max: 24, wrap: true, noList: true, - format: v => 0|v + ":" + ("" + 0|(v%1 * 60)).padStart(2, "0"), + format: v => (0|v) + ":" + ("" + (0|(v%1 * 60))).padStart(2, "0"), onchange: v => { settings.filter_to = v; writeSetting(); From a49f902f027cffe2cd48d5243cbce7b11f5f625b Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 17:52:18 +0100 Subject: [PATCH 035/342] [sleeplogalarm] Adjust default filter times --- apps/sleeplogalarm/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 716c69c3d..739670673 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -25,8 +25,8 @@ exports = { return Object.assign({ enabled: true, earlier: 30, - filter_from: 0, - filter_to: 24, + filter_from: 3, + filter_to: 12, filter_msg: "", vibrate: "..", msg: "...\n", From 361efb6c25d55e50f0b379dd2f68ab4079d2240d Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 17 Nov 2022 18:12:59 +0100 Subject: [PATCH 036/342] [sleeplog] Add more details to README.md --- apps/sleeplog/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 66d26e7f0..4310ead58 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -6,6 +6,14 @@ This app logs and displays the following states: It is using the built in movement calculation to decide your sleeping state. While charging it is assumed that you are not wearing the watch and if the status changes to _deep sleep_ the internal heartrate sensor is used to detect if you are wearing the watch. +#### Explanations +* __Detection of Sleep__ + The movement value of bangle's build in health event that is triggered every 10 minutes is checked against the thresholds for light and deep sleep. If the measured movement is lower or eaqual to the __Deep Sleep__-threshold a deep sleep phase is detected for the last 10 minutes. If the threshold is exceeded but not the __Light Sleep__-threshold than the last timeperiod is detected as light sleep phase. On exceeding even this threshold it is assumed that you were awake. +* __True Sleep__ + The true sleep value is a simple addition of all registert sleeping periods. +* __Consecutive Sleep__ + In addition the consecutive sleep value tries to predict the complete time you were asleep, even the very light sleeping periods when an awake period is detected based on the registered movements. All periods after a sleeping period will be summarized until the first following non sleeping period that is longer then the maximal awake duration (__Max Awake__). If this sum is lower than the minimal consecutive sleep duration (__Min Consecutive__) it is not considered, otherwise it will be added to the consecutive sleep value. + Logfiles are not removed on un-/reinstall to prevent data loss. | Filename (* _example_) | Content | Removeable in | From 69d0890cfa86d3ee8654e24c1f2df052de9db6d9 Mon Sep 17 00:00:00 2001 From: storm64 Date: Fri, 18 Nov 2022 15:26:15 +0100 Subject: [PATCH 037/342] [sleeplogalarm] Alarm only once each alarm --- apps/sleeplogalarm/lib.js | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 739670673..f899ae54e 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -2,15 +2,19 @@ var sched = require("sched"); // find next active alarm in range -function getNextAlarm(allAlarms, from, to, msg, withId) { +function getNextAlarm(allAlarms, fo, withId) { if (withId) allAlarms = allAlarms.map((a, idx) => { a.idx = idx; return a; }); - // return next active alarms in range + // return next active alarms in range, filter for + // active, not timer, not own alarm, + // after from, before to, includes msg + // not lastTime, not lastDay return allAlarms.filter( a => a.on && !a.timer && a.id !== "sleeplog" && - a.t >= from && a.t < to && (!msg || a.msg.includes(msg)) + a.t >= fo.from && a.t < fo.to && (!fo.msg || a.msg.includes(fo.msg)) && + fo.lastTime !== a.t && fo.lastDay !== a.last ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; @@ -48,7 +52,13 @@ exports = { var settings = exports.getSettings(); // set the alarm time - this.time = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg).t; + this.time = getNextAlarm(sched.getAlarms(), { + from: settings.filter_from * 36E5, + to: settings.filter_to * 36E5, + msg: settings.filter_msg, + lastTime: settings.lastTime, + lastDay: settings.lastDay + }).t; // abort if no alarm time could be found inside range if (!this.time) return; @@ -56,9 +66,6 @@ exports = { // set widget width if not hidden if (!this.hidden) this.width = 8; - // abort if already alarmed for this alarm - if ((sleeplog.trigger.sleeplogalarm || {}).last == this.time) return; - // insert sleeplogalarm conditions and function sleeplog.trigger.sleeplogalarm = { from: this.time - settings.earlier * 6E4, @@ -80,10 +87,13 @@ exports = { var allAlarms = sched.getAlarms(); // find first active alarm - var alarm = getNextAlarm(sched.getAlarms(), settings.filter_from * 36E5, settings.filter_to * 36E5, settings.filter_msg, settings.disableOnAlarm); - - // clear sleeplog.trigger object and set alarm time to prevent resetting for this alarm - sleeplog.trigger.sleeplogalarm = {last: alarm.t}; + var alarm = getNextAlarm(sched.getAlarms(), { + from: settings.filter_from * 36E5, + to: settings.filter_to * 36E5, + msg: settings.filter_msg, + lastTime: settings.lastTime, + lastDay: settings.lastDay + }, settings.disableOnAlarm); // return if no alarm is found if (!alarm) return; @@ -118,6 +128,11 @@ exports = { del: true }); + // save time of alarm and this day to prevent triggering for the same alarm again + settings.lastTime = alarm.t; + settings.lastDay = now.getDay(); + require("Storage").writeJSON("sleeplogalarm.settings.json", settings); + // write changes sched.setAlarms(allAlarms); From 8c4c514059dd4daa83040509041f2c8189c77c47 Mon Sep 17 00:00:00 2001 From: storm64 Date: Fri, 18 Nov 2022 23:08:41 +0100 Subject: [PATCH 038/342] [sleeplogalarm] Add setting + explanations, icon --- apps/sleeplogalarm/ChangeLog | 1 + apps/sleeplogalarm/README.md | 49 +++++++++++++++++++------------ apps/sleeplogalarm/app.png | Bin 8089 -> 9048 bytes apps/sleeplogalarm/lib.js | 11 ++++--- apps/sleeplogalarm/metadata.json | 2 +- apps/sleeplogalarm/settings.js | 17 +++++++---- 6 files changed, 52 insertions(+), 28 deletions(-) diff --git a/apps/sleeplogalarm/ChangeLog b/apps/sleeplogalarm/ChangeLog index 5560f00bc..0030c8783 100644 --- a/apps/sleeplogalarm/ChangeLog +++ b/apps/sleeplogalarm/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Add "from Consec."-setting \ No newline at end of file diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 42c2d6074..184eb4b53 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -1,27 +1,40 @@ # Sleep Log Alarm -This widget searches for active alarms and raises the alarm event up to the defined time earlier, if in a light sleep phase. +This widget searches for active alarms and raises an own alarm event up to the defined time earlier, if in light sleep or awake phase. Optional the earlier alarm will only be triggered if comming from or in consecutive sleep. The settings of the earlier alarm can be adjusted and it is possible to filter the targeting alarms by time and message. By default the time of the targeting alarm is displayed inside the widget which can be adjusted, too. --- -### App Usage +### Settings --- -#### Inside the settings: !!! dummy entries !!! - - __Thresholds__ submenu - Changes take effect from now on, not retrospective! - - __Max Awake__ | maximal awake duration - _10min_ / _20min_ / ... / __60min__ / ... / _120min_ - - __Min Consecutive__ | minimal consecutive sleep duration - _10min_ / _20min_ / ... / __30min__ / ... / _120min_ - - __Deep Sleep__ | deep sleep threshold - _30_ / _31_ / ... / __100__ / ... / _200_ - - __Light Sleep__ | light sleep threshold - _100_ / _110_ / ... / __200__ / ... / _400_ - - __Reset to Default__ | reset to bold values above - - __BreakToD__ | time of day to break view - _0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_ - - __App Timeout__ | app specific lock timeout - __0s__ / _10s_ / ... / _120s_ + - __earlier__ | duration to trigger alarm earlier + _10min_ / _20min_ / __30min__ / ... / _120min_ + - __from Consec.__ | only trigger if comming from consecutive sleep + _on_ / __off__ + - __vib pattern__ | vibration pattern for the earlier alarm + __..__ / ... + - __msg__ | customized message for the earlier alarm + __...__ / ... + - __msg as prefix__ | use the customized message as prefix to the original message or replace it comlpetely if disabled + __on__ / _off_ + - __disable alarm__ | if enabled the original alarm will be disabled + _on_ / __off__ + This feature does not work for alarms on the next day! + - __auto snooze__ | auto snooze option for the earlier alarm + __on__ / _off_ + - __Filter Alarm__ submenu + - __time from__ | exclude alarms before this time + _0:00_ / _0:15_ / ... / __3:00__ / ... / _24:00_ + - __time to__ | exclude alarms after this time + _0:00_ / _0:15_ / ... / __12:00__ / ... / _24:00_ + - __msg includes__ | include only alarms including this string in msg + __""__ / ... + - __Widget__ submenu + - __hide__ | completely hide the widget + _on_ / __off__ + - __show time__ | show the time of the targeting alarm + __on__ / _off_ + - __color__ | color of the widget + _red_ / __yellow__ / ... / _white_ - __Enabled__ | completely en-/disables the background service __on__ / _off_ diff --git a/apps/sleeplogalarm/app.png b/apps/sleeplogalarm/app.png index 6efb22a3f666817408264ec02731f4ac13d1ffe8..1a8e53865734de9ba90390a489ea54ddaa4a12ec 100644 GIT binary patch delta 5615 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 JPDHLkV1l9g&OHDC delta 4759 zcmV;I5@_w%Mwvg5BYzFjdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+TEI2w&OSs zME|*pUV=D+Tn@)`dI!Dyz941i8#AA)>Z4EF`7B$MNDv4F0;)3eKmT6lU%Y~pY(kWr zN=g^6P(pE)FZnvJx8-!`^xhoV=jIDnt34zbC^XU-{|zDp<7C)bQm+@1pYjX1_jf zK1M6J`x5`b$$#m2{PMi9@xy?BuH)XW9P<6my+1FPy)F9Sef?W&<#^?q{y5M~xHreUY+#+^g z>Z0Sc;eR}2MkJz7UWiTcm0*Ps!Ha%m|n>!4h%N5CCYWF}t!2!D-|)W>;}!MRXV$HD<$V#E4*+ z*2QHXu`}*OR3rDd;$|egi<|qakuw^)7bEvMZeK-hXc_7|VkZmLsh21F7@xViT(#JJ zI)9q)23|e>-%ZqH1^ky&HMXt+C68G9NF8K_oIoZRfmrbJC}9y~=o*9$;=3w=Cd|== zefgF6rwnO(PSK8T7pR-HRXek!R)E^0(PbD^J!fG%#`1l_SvNPJcHefGZ_UYe!0+1hJY}h5}YWqn|CxMS8S` z;3&hF7>c+aCN#;s7N9|X%zmXhY#gJ8+ZC5nSD5V!Tk=ZLcj&fFtOkBLN~uA=_0{79 zsVfzwh{5I4F)z@LtVK9Ta>6!I1Qjt`oehzHu^6JWzh8gz zXr3pm?pVLZY0L6~+{RC_G%DG`^NDPa4vSI_Jzar2JSu@m6+25bL$*VqkKtrZ851U$ z>>XX>Y9rn|{@0%nK#JHm2pCvWV}Do_LBXZ8oTxw#5Txrv|$XlYeVxYVso& zgT?-p?R5{`7h>BA3!^X+=hmhN4-RB>-Z(l2_`$TNnn7Hd1D~&S9x* zr%Np?uoRM2EVY)X;Dv289}KQeV71Y!6iEfOd5NG;phzwqu6Cd-z<=r9u^TP+9?y;o z*Ry5avDw6b0J3ssT~aFhHQR_gor9N(TtMs)#+qV_L78}^5dsOmxik}GbI7!fO{SNU zDT^O6O^H0|n@rV@pb#l*w;#b48rRNFts050B$^z^Uu^FBfo=h{5M^_~%e9q@+UUOq zXn6}z^AVxM2z(>Z{D11n=U#V7f=G}l`#aWrbu`}%{O0JXpmi519GBbLMam?VQZ*_s zys5zP6saJRv`8gt2DPp3eh$6Y7o?D8>7;qk{H;hoV!w!J^BbBZ|G=kVW0TV4X`u1x zb$m*d`js44ILWbs<_67ijDyCb^x6CH7o`RbTPd;`Kv>eN)_3f|SBeuFQDlf=JNnqZQIuYVp zw)aMH2209NS%IQ;s^hNf<}LPDEI8kAXu}$Uui%A@dn5_QKqs$&E}nBZ4^L4~JG>X_ zRgfoalWguZU4O0DMU9pO4ucg_3mRMKWQ!y1snkw;hfa64#7UXdavYL0Krn%dC))B7 z_%*74?jzn7m6mGpQ>BN?@bsx}Lu7k3;!HgnT6anzz?dFx$Q$lWi|f`zpndv^3ZtB* z!-a#ksydHC(Ne{96PbU+=(4a3dOg)+=D?F|;1jOrkbkb}yhwhaQ9}oJ)UQEgvRVEn zm5@6%$&La3EqwyB=F%+EPU6ZLUKaATY?+gN!oRwA7Kp zRM@;s41aYBfWWnAL|DBc|3YgSH3Wuo5BUO=RV#w?tz8rwAN!pLWYxWhdAABV1^oHI&dc=?di1{1CR5PCV%RU?Td!0)G+fWHH&hPFIxzy}>t$aDr~7@Unh zZGWdBo&~8`t`lZ@EeqcfQ}h7fT}cVg%LdvWG`~ji_#Ve!o>W}+Xs-d5iFN}9hycPE z)+MLHI(RgwxERA3RS2_dg@vJt<91bD3w;x7>H3Ibu@jVIFOceX3HE~*h?<(edQBia zb_Bc5t6rrUBB*d}o;o>Mo_wK3hM-h8Gk?&}4uT}Tgz#wemdZ~>bfKw%@~HNR&B-># z#N9(q*vADy{`@}YAa(oViXDjD)Gh7-uE?+EnCpX(ZB9ku3H2r`I! zWdACEvaV%lhFqCY7Bb?B>^BGnV&8)NJ895$P3j{J^t{m1{3f6}maerUNI5E+D}Nn_ z#F;dLP7`Hb6E%|Wu8uI^=Vv!Y+nhbzL0NZ4?5NN*`t-h#s9K6wx7!A1RTp7JKNbbr zCf1rT!(RU)YAB1hYl*R=zM{+Zs1Nd^Dn-PZMAeI|X*!3j&xcr&9#md4h)p$`FIty~A1p5`EQn47X1sS*&@$eC2pUYhx? zWxU?lrkhLq6XA{aLB4d6fcCM-jtiM$?X^Y4Du9+|GBuKO`BtIH;3rX|Kz~)_FzBsi zq}SyvEUxot>jSrYbBK4H<~irHxD{+fcMxL&R(Ih1W!xw9Hcw?J6a|2jT;V z<^>?ygTl76!)oYT){;e;Y=7D8%t%q28Ty@_7dJ$^FKTIE=O;13B;~g7K^b59z5FtN zppPHRFY~qjddja^?_c^@;ab=79v*_+_~VJaT2p2+dLki zOi{4RUT^C2;MX5Q;zA`B4Ye~TImI5&cn#>6!P&e;i4%BjUZuyA;D3CZTg{uu_i2Ah z@!vDNd5z+4hX10}n1AB=8b>i19THCmW>rb=-5g%@#XWc9raF~&V&|7Dnn0bVcF_1K zjWsiDnQ0f0iI$AEU#AmN(&+u?zBB(!d8A!`IBzF|W>gc%a&MI$Q|s5#2MoGU9KX53 z+?Pm0LLgdbNE_VQ$A6ldwj>Q0!zg9#uBvME^S}{p?ZalKrd}ZY_Q#ZZ|4?E3pPxt{!P5=?7tyZnS4sO* zO#lD^g=s@WP=857Lm+T+Z)Rz1WdHzpoPCi!NW(xFhTo=&S}P8A5OK&*oh*nJag-_+ z!9r;(wCZ4T=^r#{NK#xJ1=oUuKZ{id7iV1^Tm?b!2gK3INzp}0{4Oc9i1Ci&9^U)j zm%Hx(p;2L~*)<8Mnq{QoF)^E46?V9zMR`MR=BX-JfGX z$(s!DiNteEH!R`};+aiL=e$oGVkJo-J|~_q=z_$LT$f#b<6LxD;F%#KlbRAet%Z+(!ENB;x~<83z~v4w{G>~UpV2qvfT3F; zu;%uyb&k^qAVa-cz5xynf$<_`uY0_^x3h2m))2J%_XBkJa;ST_B;Ei34R*8Q5{d#O zV>mTAI5K8AEif}-G%Yk_WnnEjFlIR|IAdlwWi>fwIWRXdlaLjP2UlrsWN&wKlOGlt z3@|t{FgY_ZI5jglG?PRYaSAY0F*7kNb)q&n!G9!n>Y#TdOZI#Ad*|GD?z^_Zz`(%ZI3ZyS zYM1S^`qNeX@DU;I^=`WvPi_{Lzl<`k6_kK|%UL*Vn@rU{LVvu6 zJitsW-n={NynzW2m9&>_I)r=31E7$Oi~!)=fM|Ey4qFRIjyh>9Kmq!f#P#*eaSC`3 z%=Sy%0nbFnLhD|QURLUcU$hn(0dbWQu;-V&zz=K6DMdy=C12S=wAkxwkHiH~N2OTH z)V>B@$n^1_i6!&?3tqaKy@ARSFn`l8@{USzBVQ>85x5|8;2;rlt1InhJSp%1*am*O z$F_>zC)Q2|MLv`j7&j~?9RE}Yw4P1Sb{-*Iao2APl|`9bYeaqpw4P1iIIj_|yDx3i zC^^uVTF)k;zXAu5KjYDJ8pnAE6rNnHYDhePfxeiEotVG%CiQtZ0Ug_T<9}+%fj$Y6 zZMT{V*kL5Gj>$2Xhu?*StpUCDF$p*|ya1I&;JZi9H?(yx^1G1Ctu?T$OTaR)>mJY0 z)~sCH{1}=4LSB{l!-Y@2277+zRp^9oH*)e{RpN;k;LAdhBHZ(0X)I&}nD2oh5@%fS lv!NIZ836_c1_l$2-^XRqoe)5g872S#002ovPDHLkV1gDW2;u+$ diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index f899ae54e..71210f98b 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -29,14 +29,15 @@ exports = { return Object.assign({ enabled: true, earlier: 30, - filter_from: 3, - filter_to: 12, - filter_msg: "", + fromConsec: false, vibrate: "..", msg: "...\n", msgAsPrefix: true, disableOnAlarm: false, // !!! not available if alarm is at the next day as: true, + filter_from: 3, + filter_to: 12, + filter_msg: "", wid_hide: false, wid_time: true, wid_color: g.theme.dark ? 65504 : 31, // yellow or blue @@ -72,7 +73,9 @@ exports = { to: this.time - 1, fn: function (data) { // execute trigger function if on light sleep or awake - if (data.status === 3 || data.status === 2) + // and if set if comming from consecutive + if ((data.status === 3 || data.status === 2) && !settings.fromConsec || + data.consecutive === 3 || data.prevConsecutive === 3) require("sleeplogalarm").trigger(); } }; diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index fc1d546da..1a37ffcbf 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -2,7 +2,7 @@ "id":"sleeplogalarm", "name":"Sleep Log Alarm", "shortName": "SleepLogAlarm", - "version": "0.01", + "version": "0.02", "description": "Enhance your morning and let your alarms wake you up when you are in light sleep.", "icon": "app.png", "type": "widget", diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index fe774c3b2..3a37b7274 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -30,12 +30,12 @@ "": { title: "Filter Alarm" }, - /*LANG*/"< Back": () => showMain(2), + /*LANG*/"< Back": () => showMain(8), /*LANG*/"time from": { value: settings.filter_from, step: 0.25, min: 0, - max: 23, + max: 24, wrap: true, noList: true, format: v => (0|v) + ":" + ("" + (0|(v%1 * 60))).padStart(2, "0"), @@ -47,7 +47,7 @@ /*LANG*/"time to": { value: settings.filter_to, step: 0.25, - min: 1, + min: 0, max: 24, wrap: true, noList: true, @@ -78,7 +78,7 @@ "": { title: "Widget Settings" }, - /*LANG*/"< Back": () => showMain(8), + /*LANG*/"< Back": () => showMain(9), /*LANG*/"hide": { value: settings.wid_hide, onchange: v => { @@ -130,7 +130,13 @@ writeSetting(); } }, - /*LANG*/"Filter Alarm": () => showFilterMenu(), + /*LANG*/"from Consec.": { + value: settings.fromConsec, + onchange: v => { + settings.fromConsec = v; + writeSetting(); + } + }, /*LANG*/"vib pattern": require("buzz_menu").pattern( settings.vibrate, v => { @@ -165,6 +171,7 @@ writeSetting(); } }, + /*LANG*/"Filter Alarm": () => showFilterMenu(), /*LANG*/"Widget": () => showWidMenu(), /*LANG*/"Enabled": { value: settings.enabled, From 7ef5152c17492acdcae407e5b9b1377e0e6a06d9 Mon Sep 17 00:00:00 2001 From: storm64 Date: Fri, 18 Nov 2022 23:31:10 +0100 Subject: [PATCH 039/342] [sleeplogalarm] Clear ToDo-list --- apps/sleeplogalarm/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 184eb4b53..73847d6f1 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -42,9 +42,6 @@ This widget searches for active alarms and raises an own alarm event up to the d ### Worth Mentioning --- -#### To do list -- README.md - #### Requests, Bugs and Feedback Please leave requests and bug reports by raising an issue at [github.com/storm64/BangleApps](https://github.com/storm64/BangleApps) (or send me a [mail](mailto:banglejs@storm64.de)). From d5e68798979d54b9ad1c8cdd6d33ea21d49021b9 Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 6 Nov 2022 12:31:13 +0100 Subject: [PATCH 040/342] add handling of gps events --- apps/android/boot.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/android/boot.js b/apps/android/boot.js index 0d1edae99..8bcc1ba0d 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -130,6 +130,13 @@ request.j(event.err); //r = reJect function else request.r(event); //r = resolve function + }, + "gps": function() { + delete event.t; + event.satellites = NaN; + event.course = NaN; + event.fix = 1; + Bangle.emit('gps', event); } }; var h = HANDLERS[event.t]; From 31bed21581242731de263bad8b5f43becbaccb3a Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 6 Nov 2022 13:41:49 +0100 Subject: [PATCH 041/342] add setting to set overwrite of internal gps --- apps/android/boot.js | 28 ++++++++++++++++++++++++++++ apps/android/settings.js | 13 +++++++++++++ 2 files changed, 41 insertions(+) diff --git a/apps/android/boot.js b/apps/android/boot.js index 8bcc1ba0d..a8455cf35 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -197,6 +197,34 @@ if (isFinite(msg.id)) return gbSend({ t: "notify", n:response?"OPEN":"DISMISS", id: msg.id }); // error/warn here? }; + + // GPS overwrite logic + // Save current logic + const originalSetGpsPower = Bangle.setGPSPower; + const originalIsGpsOn = Bangle.isGPSOn; + + // Replace set GPS power logic to suppress activation of gps, if the overwrite option is active + Bangle.setGPSPower = (isOn, appID) => { + const currentSettings = require("Storage").readJSON("android.settings.json",1)||{}; + if (!currentSettings.overwriteGps) { + originalSetGpsPower(isOn, appID); + } else { + const logMessage = 'Ignore gps power change due to the gps overwrite from android integration app'; + console.log(logMessage); + Bluetooth.println(logMessage); + } + } + + // Replace check if the GPS is on, to show it as always active, if the overwrite option is set + Bangle.isGPSOn = () => { + const currentSettings = require("Storage").readJSON("android.settings.json",1)||{}; + if (!currentSettings.overwriteGps) { + return originalIsGpsOn(); + } else { + return true; + } + } + // remove settings object so it's not taking up RAM delete settings; })(); diff --git a/apps/android/settings.js b/apps/android/settings.js index c7c34a76f..94a1eba0b 100644 --- a/apps/android/settings.js +++ b/apps/android/settings.js @@ -1,4 +1,13 @@ (function(back) { + + function onGpsOverwriteChange(newValue) { + if (newValue) { + Bangle.setGPSPower(false, 'android'); + } + settings.overwriteGps = newValue; + updateSettings(); + } + function gb(j) { Bluetooth.println(JSON.stringify(j)); } @@ -23,6 +32,10 @@ updateSettings(); } }, + /*LANG*/"Overwrite GPS" : { + value : !!settings.overwriteGps, + onchange: onGpsOverwriteChange + }, /*LANG*/"Messages" : ()=>load("messages.app.js"), }; E.showMenu(mainmenu); From c68c14a9ed82502d906c2e2274a02441b7878cf6 Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 6 Nov 2022 19:25:25 +0100 Subject: [PATCH 042/342] add check if gps data should be overwritten, before the gps data is emitted --- apps/android/boot.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/android/boot.js b/apps/android/boot.js index a8455cf35..5cdc1f044 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -132,6 +132,8 @@ request.r(event); //r = resolve function }, "gps": function() { + const settings = require("Storage").readJSON("android.settings.json",1)||{}; + if (!settings.overwriteGps) return; delete event.t; event.satellites = NaN; event.course = NaN; From 7561f8d7c245ac68dc222e2c87355693ce8e7f26 Mon Sep 17 00:00:00 2001 From: Lukas Date: Mon, 21 Nov 2022 20:39:41 +0100 Subject: [PATCH 043/342] add gps request handling --- apps/android/boot.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/android/boot.js b/apps/android/boot.js index 5cdc1f044..7973456cd 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -139,6 +139,10 @@ event.course = NaN; event.fix = 1; Bangle.emit('gps', event); + }, + "is_gps_active": function() { + const gpsActive = originalIsGpsOn(); + sendGPSPowerStatus(gpsActive); } }; var h = HANDLERS[event.t]; @@ -205,12 +209,15 @@ const originalSetGpsPower = Bangle.setGPSPower; const originalIsGpsOn = Bangle.isGPSOn; + function sendGPSPowerStatus(status) { gbSend({ t: "gps_power", status: status }); } + // Replace set GPS power logic to suppress activation of gps, if the overwrite option is active Bangle.setGPSPower = (isOn, appID) => { const currentSettings = require("Storage").readJSON("android.settings.json",1)||{}; if (!currentSettings.overwriteGps) { originalSetGpsPower(isOn, appID); } else { + sendGPSPowerStatus(Bangle.isGPSOn()); const logMessage = 'Ignore gps power change due to the gps overwrite from android integration app'; console.log(logMessage); Bluetooth.println(logMessage); From a7ad62a030c46162b8e0c44e7597dccdb9028177 Mon Sep 17 00:00:00 2001 From: Kedlub Date: Tue, 22 Nov 2022 13:52:21 +0100 Subject: [PATCH 044/342] qcenter: New app --- apps/qcenter/ChangeLog | 1 + apps/qcenter/README.md | 20 +++++++ apps/qcenter/app-icon.js | 1 + apps/qcenter/app.js | 114 +++++++++++++++++++++++++++++++++++++ apps/qcenter/app.png | Bin 0 -> 265 bytes apps/qcenter/metadata.json | 14 +++++ apps/qcenter/settings.js | 114 +++++++++++++++++++++++++++++++++++++ 7 files changed, 264 insertions(+) create mode 100644 apps/qcenter/ChangeLog create mode 100644 apps/qcenter/README.md create mode 100644 apps/qcenter/app-icon.js create mode 100644 apps/qcenter/app.js create mode 100644 apps/qcenter/app.png create mode 100644 apps/qcenter/metadata.json create mode 100644 apps/qcenter/settings.js diff --git a/apps/qcenter/ChangeLog b/apps/qcenter/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/qcenter/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/qcenter/README.md b/apps/qcenter/README.md new file mode 100644 index 000000000..eb40e63ed --- /dev/null +++ b/apps/qcenter/README.md @@ -0,0 +1,20 @@ +# Quick Center + +App with status bar showing various info, and up to six shortcuts for your favorite apps! +Meant to be used with any kind of quick launcher, such as Quick Launch or Pattern Launcher + +Add screen shots (if possible) to the app folder and link then into this file with ![](.png) + +## Usage + +Pin apps using settings, and then run this using your favorite quick launcher to access them quickly +If you don't have any pinned apps, it shows setting and about app as an example + +## Features + +Showing battery and temperature (for now) +Up to six shortcuts to your favorite apps + +## Upcoming features +- Quick toggles for toggleable functions, such as Bluetooth, or it's HID mode +- Customizable status info \ No newline at end of file diff --git a/apps/qcenter/app-icon.js b/apps/qcenter/app-icon.js new file mode 100644 index 000000000..bfc94d10a --- /dev/null +++ b/apps/qcenter/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UB6cA/4ACBYNVAElQHAsFBYZFHCxIYEoALHgILNOxILChWqAAmgBYNUBZMVBYIAIBc0C1WAlWoAgQL/O96D/Qf4LZqoLJqoLMoAKHgILNqALHgoLBGBAKCDA4WDAEQA=")) \ No newline at end of file diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js new file mode 100644 index 000000000..0493805ac --- /dev/null +++ b/apps/qcenter/app.js @@ -0,0 +1,114 @@ +require("Font8x12").add(Graphics); + +// load pinned apps from config +var settings = require("Storage").readJSON("qcenter.json", 1) || {}; +var pinnedApps = settings.pinnedApps || []; +var exitGesture = settings.exitGesture || "swipeup"; + +// if empty load a default set of apps as an example +if (pinnedApps.length == 0) { + pinnedApps = [ + { src: "setting.app.js", icon: "setting.img" }, + { src: "about.app.js", icon: "about.img" }, + ]; +} + +// button drawing from Layout.js, edited to have completely custom button size with icon +function drawButton(l) { + var x = l.x + (0 | l.pad), + y = l.y + (0 | l.pad), + w = l.w - (l.pad << 1), + h = l.h - (l.pad << 1); + var poly = [ + x, + y + 4, + x + 4, + y, + x + w - 5, + y, + x + w - 1, + y + 4, + x + w - 1, + y + h - 5, + x + w - 5, + y + h - 1, + x + 4, + y + h - 1, + x, + y + h - 5, + x, + y + 4, + ], + bg = l.selected ? g.theme.bgH : g.theme.bg2; + g.setColor(bg) + .fillPoly(poly) + .setColor(l.selected ? g.theme.fgH : g.theme.fg2) + .drawPoly(poly); + if (l.src) + g.setBgColor(bg).drawImage( + "function" == typeof l.src ? l.src() : l.src, + l.x + l.w / 2, + l.y + l.h / 2, + { scale: l.scale || undefined, rotate: Math.PI * 0.5 * (l.r || 0) } + ); +} + +// function to split array into group of 3, for button placement +function groupBy3(data) { + var result = []; + for (var i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3)); + return result; +} + +// generate object with buttons for apps by group of 3 +var appButtons = groupBy3(pinnedApps).map((appGroup, i) => { + return appGroup.map((app, j) => { + return { + type: "custom", + render: drawButton, + width: 50, + height: 50, + pad: 5, + src: require("Storage").read(app.icon), + scale: 0.75, + cb: (l) => Bangle.load(app.src), + }; + }); +}); + +// create basic layout content with status info on top +var layoutContent = [ + { + type: "h", + pad: 5, + c: [ + { type: "txt", font: "8x12", label: E.getBattery() + "%" }, + { type: "txt", font: "8x12", label: " " + E.getTemperature() + "°C" }, + ], + }, +]; + +// create rows for buttons and add them to layoutContent +appButtons.forEach((appGroup) => { + layoutContent.push({ + type: "h", + pad: 2, + c: appGroup, + }); +}); + +var Layout = require("Layout"); +var layout = new Layout({ + type: "v", + c: layoutContent, +}); +g.clear(); +layout.render(); + +// add swipe event listener for exit gesture +Bangle.on("swipe", function (lr, ud) { + if(exitGesture == "swipeup" && ud == -1) Bangle.showClock(); + if(exitGesture == "swipedown" && ud == 1) Bangle.showClock(); + if(exitGesture == "swipeleft" && lr == -1) Bangle.showClock(); + if(exitGesture == "swiperight" && lr == 1) Bangle.showClock(); +}); \ No newline at end of file diff --git a/apps/qcenter/app.png b/apps/qcenter/app.png new file mode 100644 index 0000000000000000000000000000000000000000..27ec75f1c09f4503465e233ec2f3183a072d9476 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$1AIbUnWg6a|NkGzlQ=%#3`jAT1o;I61+Jgs1*&D>EbxddW? z8eR=R!75J|#}E(iw-X%s8Wea~HvX^QazJky^R=rk$x|$^bQ!bzludGP7I9GBy!Ou~ z?yX`UOj^{Iv4r?=uGrPThVYYmuN?b(Y0 z?|L^zI2@hQ5Vbty!jZ=o3!gd82{>7@`q { + var a = require("Storage").readJSON(app, 1); + return ( + a && { name: a.name, type: a.type, sortorder: a.sortorder, src: a.src, icon: a.icon } + ); + }) + .filter( + (app) => + app && + (app.type == "app" || + app.type == "launch" || + app.type == "clock" || + !app.type) + ); + apps.sort((a, b) => { + var n = (0 | a.sortorder) - (0 | b.sortorder); + if (n) return n; // do sortorder first + if (a.name < b.name) return -1; + if (a.name > b.name) return 1; + return 0; + }); + + function save(key, value) { + settings[key] = value; + require("Storage").write("qcenter.json", settings); + } + + var pinnedApps = settings.pinnedApps || []; + var exitGesture = settings.exitGesture || "swipeup"; + + function showMainMenu() { + var mainmenu = { + "" : { "title" : "Quick Center" }, + "< Back" : ()=>{load();} + }; + + // Set exit gesture + mainmenu["Exit Gesture: " + exitGesture] = function() { + E.showMenu(exitGestureMenu); + }; + + //List all pinned apps + for (let i = 0; i < pinnedApps.length; i++) { + mainmenu[pinnedApps[i].name] = function() { + E.showMenu({ + "" : { "title" : pinnedApps[i].name }, + "< Back" : showMainMenu, + "Unpin" : function() { + pinnedApps.splice(i, 1); + save("pinnedApps", pinnedApps); + showMainMenu(); + } + }); + }; + } + + // Show pin app button only if there is less than 6 pinned apps, else show the button that shows alert that max apps has been pinned + if (pinnedApps.length < 6) { + mainmenu["Pin App"] = pinAppMenu; + } + else { + mainmenu["Pin App"] = function() { + E.showAlert("You can only pin 6 apps"); + }; + } + + return E.showMenu(mainmenu); + } + + // menu for adding apps to the quick launch menu, listing all apps + var pinAppMenu = { + "" : { "title" : "Add App" }, + "< Back" : showMainMenu + }; + apps.forEach((a)=>{ + pinAppMenu[a.name] = function() { + // strip unncecessary properties + delete a.type; + delete a.sortorder; + delete a.name; + pinnedApps.push(a); + save("pinnedApps", pinnedApps); + showMainMenu(); + }; + }); + + // menu for setting exit gesture + var exitGestureMenu = { + "" : { "title" : "Exit Gesture" }, + "< Back" : showMainMenu + }; + exitGestureMenu["Swipe Up"] = function() { + save("exitGesture", "swipeup"); + showMainMenu(); + } + exitGestureMenu["Swipe Down"] = function() { + save("exitGesture", "swipedown"); + showMainMenu(); + } + exitGestureMenu["Swipe Left"] = function() { + save("exitGesture", "swipeleft"); + showMainMenu(); + } + exitGestureMenu["Swipe Right"] = function() { + save("exitGesture", "swiperight"); + showMainMenu(); + } + +}); From 1c38505c9fc331c073b782e6fdeb3eac7fbb4cfe Mon Sep 17 00:00:00 2001 From: Kedlub Date: Tue, 22 Nov 2022 13:57:13 +0100 Subject: [PATCH 045/342] qcenter: Fix metadata --- apps/qcenter/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index b5e580bf0..736db2024 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -9,6 +9,7 @@ "readme": "README.md", "storage": [ {"name":"qcenter.app.js","url":"app.js"}, + {"name":"qcenter.settings.js","url":"settings.js"}, {"name":"qcenter.img","url":"app-icon.js","evaluate":true} ] } From db6b143c65e6b50e9d33f4d5e80c197d8b06e9c3 Mon Sep 17 00:00:00 2001 From: Kedlub Date: Tue, 22 Nov 2022 16:33:32 +0100 Subject: [PATCH 046/342] qcenter: Fix settings --- apps/qcenter/settings.js | 163 +++++++++++++++++++++------------------ 1 file changed, 87 insertions(+), 76 deletions(-) diff --git a/apps/qcenter/settings.js b/apps/qcenter/settings.js index 1bda89036..5550fd149 100644 --- a/apps/qcenter/settings.js +++ b/apps/qcenter/settings.js @@ -6,7 +6,13 @@ .map((app) => { var a = require("Storage").readJSON(app, 1); return ( - a && { name: a.name, type: a.type, sortorder: a.sortorder, src: a.src, icon: a.icon } + a && { + name: a.name, + type: a.type, + sortorder: a.sortorder, + src: a.src, + icon: a.icon, + } ); }) .filter( @@ -30,85 +36,90 @@ require("Storage").write("qcenter.json", settings); } - var pinnedApps = settings.pinnedApps || []; - var exitGesture = settings.exitGesture || "swipeup"; + var pinnedApps = settings.pinnedApps || []; + var exitGesture = settings.exitGesture || "swipeup"; - function showMainMenu() { - var mainmenu = { - "" : { "title" : "Quick Center" }, - "< Back" : ()=>{load();} - }; + function showMainMenu() { + var mainmenu = { + "": { title: "Quick Center" }, + "< Back": () => { + load(); + }, + }; - // Set exit gesture - mainmenu["Exit Gesture: " + exitGesture] = function() { - E.showMenu(exitGestureMenu); - }; - - //List all pinned apps - for (let i = 0; i < pinnedApps.length; i++) { - mainmenu[pinnedApps[i].name] = function() { - E.showMenu({ - "" : { "title" : pinnedApps[i].name }, - "< Back" : showMainMenu, - "Unpin" : function() { - pinnedApps.splice(i, 1); - save("pinnedApps", pinnedApps); - showMainMenu(); - } - }); - }; - } + // Set exit gesture + mainmenu["Exit Gesture: " + exitGesture] = function () { + E.showMenu(exitGestureMenu); + }; - // Show pin app button only if there is less than 6 pinned apps, else show the button that shows alert that max apps has been pinned - if (pinnedApps.length < 6) { - mainmenu["Pin App"] = pinAppMenu; - } - else { - mainmenu["Pin App"] = function() { - E.showAlert("You can only pin 6 apps"); - }; - } - - return E.showMenu(mainmenu); - } + //List all pinned apps + for (let i = 0; i < pinnedApps.length; i++) { + mainmenu[pinnedApps[i].name] = function () { + E.showMenu({ + "": { title: pinnedApps[i].name }, + "< Back": showMainMenu, + Unpin: function () { + pinnedApps.splice(i, 1); + save("pinnedApps", pinnedApps); + showMainMenu(); + }, + }); + }; + } - // menu for adding apps to the quick launch menu, listing all apps - var pinAppMenu = { - "" : { "title" : "Add App" }, - "< Back" : showMainMenu - }; - apps.forEach((a)=>{ - pinAppMenu[a.name] = function() { - // strip unncecessary properties - delete a.type; - delete a.sortorder; - delete a.name; - pinnedApps.push(a); - save("pinnedApps", pinnedApps); - showMainMenu(); - }; - }); + // Show pin app menu, or show alert if max amount of apps are pinned + mainmenu["Pin App"] = function () { + if (pinnedApps.length < 6) { + E.showMenu(pinAppMenu); + } else { + E.showAlert("Max apps pinned").then(showMainMenu); + } + }; - // menu for setting exit gesture - var exitGestureMenu = { - "" : { "title" : "Exit Gesture" }, - "< Back" : showMainMenu - }; - exitGestureMenu["Swipe Up"] = function() { - save("exitGesture", "swipeup"); - showMainMenu(); - } - exitGestureMenu["Swipe Down"] = function() { - save("exitGesture", "swipedown"); - showMainMenu(); - } - exitGestureMenu["Swipe Left"] = function() { - save("exitGesture", "swipeleft"); - showMainMenu(); - } - exitGestureMenu["Swipe Right"] = function() { - save("exitGesture", "swiperight"); - showMainMenu(); - } + return E.showMenu(mainmenu); + } + // menu for adding apps to the quick launch menu, listing all apps + var pinAppMenu = { + "": { title: "Add App" }, + "< Back": showMainMenu, + }; + apps.forEach((a) => { + pinAppMenu[a.name] = function () { + // strip unncecessary properties + delete a.type; + delete a.sortorder; + pinnedApps.push(a); + save("pinnedApps", pinnedApps); + showMainMenu(); + }; + }); + + // menu for setting exit gesture + var exitGestureMenu = { + "": { title: "Exit Gesture" }, + "< Back": showMainMenu, + }; + exitGestureMenu["Swipe Up"] = function () { + exitGesture = "swipeup"; + save("exitGesture", "swipeup"); + showMainMenu(); + }; + exitGestureMenu["Swipe Down"] = function () { + exitGesture = "swipedown"; + save("exitGesture", "swipedown"); + showMainMenu(); + }; + exitGestureMenu["Swipe Left"] = function () { + exitGesture = "swipeleft"; + save("exitGesture", "swipeleft"); + showMainMenu(); + }; + exitGestureMenu["Swipe Right"] = function () { + exitGesture = "swiperight"; + save("exitGesture", "swiperight"); + showMainMenu(); + }; + + showMainMenu(); }); From ad7161cc93ddfe668d71a5045b240017b0402791 Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 23 Nov 2022 18:11:42 +0100 Subject: [PATCH 047/342] [sleeplogalarm] Correct filter for last alarm --- apps/sleeplogalarm/ChangeLog | 3 ++- apps/sleeplogalarm/lib.js | 14 +++++++------- apps/sleeplogalarm/metadata.json | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/sleeplogalarm/ChangeLog b/apps/sleeplogalarm/ChangeLog index 0030c8783..48d9a161d 100644 --- a/apps/sleeplogalarm/ChangeLog +++ b/apps/sleeplogalarm/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! -0.02: Add "from Consec."-setting \ No newline at end of file +0.02: Add "from Consec."-setting +0.03: Correct how to ignore last triggered alarm \ No newline at end of file diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 71210f98b..aaa97feed 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -8,13 +8,13 @@ function getNextAlarm(allAlarms, fo, withId) { return a; }); // return next active alarms in range, filter for - // active, not timer, not own alarm, - // after from, before to, includes msg - // not lastTime, not lastDay + // active && not timer && not own alarm && + // after from && before to && includes msg && + // lastDate not today || after lastTime return allAlarms.filter( a => a.on && !a.timer && a.id !== "sleeplog" && a.t >= fo.from && a.t < fo.to && (!fo.msg || a.msg.includes(fo.msg)) && - fo.lastTime !== a.t && fo.lastDay !== a.last + fo.lastDate !== new Date().getDate() || a.t > fo.lastTime ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; @@ -58,7 +58,7 @@ exports = { to: settings.filter_to * 36E5, msg: settings.filter_msg, lastTime: settings.lastTime, - lastDay: settings.lastDay + lastDate: settings.lastDate }).t; // abort if no alarm time could be found inside range @@ -95,7 +95,7 @@ exports = { to: settings.filter_to * 36E5, msg: settings.filter_msg, lastTime: settings.lastTime, - lastDay: settings.lastDay + lastDate: settings.lastDate }, settings.disableOnAlarm); // return if no alarm is found @@ -133,7 +133,7 @@ exports = { // save time of alarm and this day to prevent triggering for the same alarm again settings.lastTime = alarm.t; - settings.lastDay = now.getDay(); + settings.lastDate = now.getDay(); require("Storage").writeJSON("sleeplogalarm.settings.json", settings); // write changes diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 1a37ffcbf..813f0fe18 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -2,7 +2,7 @@ "id":"sleeplogalarm", "name":"Sleep Log Alarm", "shortName": "SleepLogAlarm", - "version": "0.02", + "version": "0.03", "description": "Enhance your morning and let your alarms wake you up when you are in light sleep.", "icon": "app.png", "type": "widget", From f4c8e31d6cf37b90bf9f0113376f17d7c008be9b Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 09:34:17 +0000 Subject: [PATCH 048/342] Fix issue finding pre-installed modules. Fix https://github.com/espruino/BangleApps/issues/2310 --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 8840c7248..eb5ca90a2 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 8840c7248d4ce757e0011dcedf906b8e3dfe7125 +Subproject commit eb5ca90a2ddcb550f8311526d2ac10e0895e4c2e From fc96f98c1deb42983b0ea0a9357d17803afbac36 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 09:44:48 +0000 Subject: [PATCH 049/342] android 0.17: Now kick off Calendar sync as soon as connected to Gadgetbridge --- apps/android/ChangeLog | 1 + apps/android/boot.js | 7 +++++-- apps/android/metadata.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index a65326941..fcb139c94 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -14,3 +14,4 @@ 0.14: Fix timeout of http function not being cleaned up 0.15: Allow method/body/headers to be specified for `http` (needs Gadgetbridge 0.68.0b or later) 0.16: Bangle.http now fails immediately if there is no Bluetooth connection (fix #2152) +0.17: Now kick off Calendar sync as soon as connected to Gadgetbridge diff --git a/apps/android/boot.js b/apps/android/boot.js index fb2b10e0d..d4f50d501 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -105,7 +105,7 @@ "calendar-" : function() { var cal = require("Storage").readJSON("android.calendar.json",true); //if any of those happen we are out of sync! - if (!cal || !Array.isArray(cal)) return; + if (!cal || !Array.isArray(cal)) cal = []; cal = cal.filter(e=>e.id!=event.id); require("Storage").writeJSON("android.calendar.json", cal); }, @@ -166,7 +166,10 @@ // Battery monitor function sendBattery() { gbSend({ t: "status", bat: E.getBattery(), chg: Bangle.isCharging()?1:0 }); } - NRF.on("connect", () => setTimeout(sendBattery, 2000)); + NRF.on("connect", () => setTimeout(function() { + sendBattery(); + GB({t:"force_calendar_sync_start"}); // send a list of our calendar entries to start off the sync process + }, 2000)); Bangle.on("charging", sendBattery); if (!settings.keep) NRF.on("disconnect", () => require("messages").clearAll()); // remove all messages on disconnect diff --git a/apps/android/metadata.json b/apps/android/metadata.json index ab340340c..ac47449d6 100644 --- a/apps/android/metadata.json +++ b/apps/android/metadata.json @@ -2,7 +2,7 @@ "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.16", + "version": "0.17", "description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.", "icon": "app.png", "tags": "tool,system,messages,notifications,gadgetbridge", From a901ad042fbe7bf682de5fa9826be6b66933d2e2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 10:19:27 +0000 Subject: [PATCH 050/342] Layout performance improvements by keeping functions pre-parsed in RAM when needed. --- modules/Layout.js | 104 +++++++++++++++++++++--------------------- modules/Layout.min.js | 28 ++++++------ 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/modules/Layout.js b/modules/Layout.js index fdcf0ceae..cfc9ee79f 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -10,18 +10,20 @@ */ -function Layout(layout, options) { +function Layout(layout, options) { this._l = this.l = layout; // Do we have >1 physical buttons? - this.physBtns = (process.env.HWVERSION==2) ? 1 : 3; + this.options = options || {}; this.lazy = this.options.lazy || false; + this.physBtns = 1; let btnList; if (process.env.HWVERSION!=2) { + this.physBtns = 3; // no touchscreen, find any buttons in 'layout' btnList = []; - function btnRecurser(l) { + function btnRecurser(l) {"ram"; if (l.type=="btn") btnList.push(l); if (l.c) l.c.forEach(btnRecurser); } @@ -64,7 +66,7 @@ function Layout(layout, options) { this.setUI(); // recurse over layout doing some fixing up if needed var ll = this; - function recurser(l) { + function recurser(l) {"ram"; // add IDs if (l.id) ll[l.id] = l; // fix type up @@ -153,26 +155,25 @@ Layout.prototype.render = function (l) { if (!l) l = this._l; if (this.updateNeeded) this.update(); - function render(l) {"ram" - g.reset(); - if (l.col!==undefined) g.setColor(l.col); - if (l.bgCol!==undefined) g.setBgColor(l.bgCol).clearRect(l.x,l.y,l.x+l.w-1,l.y+l.h-1); + var gfx=g; // define locally, because this is faster + function render(l) {"ram"; + gfx.reset(); + if (l.col!==undefined) gfx.setColor(l.col); + if (l.bgCol!==undefined) gfx.setBgColor(l.bgCol).clearRect(l.x,l.y,l.x+l.w-1,l.y+l.h-1); cb[l.type](l); } var cb = { "":function(){}, - "txt":function(l){ + "txt":function(l){"ram"; if (l.wrap) { - g.setFont(l.font).setFontAlign(0,-1); - var lines = g.wrapString(l.label, l.w); - var y = l.y+((l.h-g.getFontHeight()*lines.length)>>1); - // TODO: on 2v11 we can just render in a single drawString call - lines.forEach((line, i) => g.drawString(line, l.x+(l.w>>1), y+g.getFontHeight()*i)); + var lines = gfx.setFont(l.font).setFontAlign(0,-1).wrapString(l.label, l.w); + var y = l.y+((l.h-gfx.getFontHeight()*lines.length)>>1); + gfx.drawString(lines.join("\n"), l.x+(l.w>>1), y); } else { - g.setFont(l.font).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); + gfx.setFont(l.font).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); } - }, "btn":function(l){ + }, "btn":function(l){"ram"; var x = l.x+(0|l.pad), y = l.y+(0|l.pad), w = l.w-(l.pad<<1), h = l.h-(l.pad<<1); var poly = [ @@ -185,27 +186,26 @@ Layout.prototype.render = function (l) { x+4,y+h-1, x,y+h-5, x,y+4 - ], bg = l.selected?g.theme.bgH:g.theme.bg2; - g.setColor(bg).fillPoly(poly).setColor(l.selected ? g.theme.fgH : g.theme.fg2).drawPoly(poly); - if (l.col!==undefined) g.setColor(l.col); - if (l.src) g.setBgColor(bg).drawImage( + ], bg = l.selected?gfx.theme.bgH:gfx.theme.bg2; + gfx.setColor(bg).fillPoly(poly).setColor(l.selected ? gfx.theme.fgH : gfx.theme.fg2).drawPoly(poly); + if (l.col!==undefined) gfx.setColor(l.col); + if (l.src) gfx.setBgColor(bg).drawImage( "function"==typeof l.src?l.src():l.src, l.x + l.w/2, l.y + l.h/2, {scale: l.scale||undefined, rotate: Math.PI*0.5*(l.r||0)} ); - else g.setFont(l.font||"6x8:2").setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); - }, "img":function(l){ - g.drawImage( + else gfx.setFont(l.font||"6x8:2").setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); + }, "img":function(l){"ram"; + gfx.drawImage( "function"==typeof l.src?l.src():l.src, l.x + l.w/2, l.y + l.h/2, {scale: l.scale||undefined, rotate: Math.PI*0.5*(l.r||0)} ); - }, "custom":function(l){ - l.render(l); - },"h":function(l) { l.c.forEach(render); }, - "v":function(l) { l.c.forEach(render); } + }, "custom":function(l){"ram"; l.render(l); + }, "h":function(l) { "ram"; l.c.forEach(render); + }, "v":function(l) { "ram"; l.c.forEach(render); } }; if (this.lazy) { @@ -218,7 +218,7 @@ Layout.prototype.render = function (l) { prepareLazyRender(l, rectsToClear, drawList, this.rects, null); for (var h in rectsToClear) delete this.rects[h]; var clearList = Object.keys(rectsToClear).map(k=>rectsToClear[k]).reverse(); // Rects are cleared in reverse order so that the original bg color is restored - for (var r of clearList) g.setBgColor(r.bg).clearRect.apply(g, r); + for (var r of clearList) gfx.setBgColor(r.bg).clearRect.apply(g, r); drawList.forEach(render); } else { // non-lazy render(l); @@ -231,9 +231,8 @@ Layout.prototype.forgetLazyState = function () { Layout.prototype.layout = function (l) { // l = current layout element - // exw,exh = extra width/height available - switch (l.type) { - case "h": { + var cb = { + "h" : function(l) {"ram"; var acc_w = l.x + (0|l.pad); var accfillx = 0; var fillx = l.c && l.c.reduce((a,l)=>a+(0|l.fillx),0); @@ -247,11 +246,10 @@ Layout.prototype.layout = function (l) { c.w = 0|(x - c.x); c.h = 0|(c.filly ? l.h - (l.pad<<1) : c._h); c.y = 0|(l.y + (0|l.pad) + ((1+(0|c.valign))*(l.h-(l.pad<<1)-c.h)>>1)); - if (c.c) this.layout(c); + if (c.c) cb[c.type](c); }); - break; - } - case "v": { + }, + "v" : function(l) {"ram"; var acc_h = l.y + (0|l.pad); var accfilly = 0; var filly = l.c && l.c.reduce((a,l)=>a+(0|l.filly),0); @@ -265,11 +263,11 @@ Layout.prototype.layout = function (l) { c.h = 0|(y - c.y); c.w = 0|(c.fillx ? l.w - (l.pad<<1) : c._w); c.x = 0|(l.x + (0|l.pad) + ((1+(0|c.halign))*(l.w-(l.pad<<1)-c.w)>>1)); - if (c.c) this.layout(c); + if (c.c) cb[c.type](c); }); - break; } - } + }; + cb[l.type](l); }; Layout.prototype.debug = function(l,c) { if (!l) l = this._l; @@ -282,50 +280,51 @@ Layout.prototype.debug = function(l,c) { }; Layout.prototype.update = function() { delete this.updateNeeded; + var gfx=g; // define locally, because this is faster // update sizes - function updateMin(l) {"ram" + function updateMin(l) {"ram"; cb[l.type](l); if (l.r&1) { // rotation var t = l._w;l._w=l._h;l._h=t; } - l._w = 0|Math.max(l._w + (l.pad<<1), 0|l.width); - l._h = 0|Math.max(l._h + (l.pad<<1), 0|l.height); + l._w = Math.max(l._w + (l.pad<<1), 0|l.width); + l._h = Math.max(l._h + (l.pad<<1), 0|l.height); } var cb = { - "txt" : function(l) { + "txt" : function(l) {"ram"; if (l.font.endsWith("%")) - l.font = "Vector"+Math.round(g.getHeight()*l.font.slice(0,-1)/100); + l.font = "Vector"+Math.round(gfx.getHeight()*l.font.slice(0,-1)/100); if (l.wrap) { l._h = l._w = 0; } else { var m = g.setFont(l.font).stringMetrics(l.label); l._w = m.width; l._h = m.height; } - }, "btn": function(l) { + }, "btn": function(l) {"ram"; if (l.font && l.font.endsWith("%")) - l.font = "Vector"+Math.round(g.getHeight()*l.font.slice(0,-1)/100); - var m = l.src?g.imageMetrics("function"==typeof l.src?l.src():l.src):g.setFont(l.font||"6x8:2").stringMetrics(l.label); + l.font = "Vector"+Math.round(gfx.getHeight()*l.font.slice(0,-1)/100); + var m = l.src?gfx.imageMetrics("function"==typeof l.src?l.src():l.src):gfx.setFont(l.font||"6x8:2").stringMetrics(l.label); l._h = 16 + m.height; l._w = 20 + m.width; - }, "img": function(l) { - var m = g.imageMetrics("function"==typeof l.src?l.src():l.src), s=l.scale||1; // get width and height out of image + }, "img": function(l) {"ram"; + var m = gfx.imageMetrics("function"==typeof l.src?l.src():l.src), s=l.scale||1; // get width and height out of image l._w = m.width*s; l._h = m.height*s; - }, "": function(l) { + }, "": function(l) {"ram"; // size should already be set up in width/height l._w = 0; l._h = 0; - }, "custom": function(l) { + }, "custom": function(l) {"ram"; // size should already be set up in width/height l._w = 0; l._h = 0; - }, "h": function(l) { + }, "h": function(l) {"ram"; l.c.forEach(updateMin); l._h = l.c.reduce((a,b)=>Math.max(a,b._h),0); l._w = l.c.reduce((a,b)=>a+b._w,0); if (l.fillx == null && l.c.some(c=>c.fillx)) l.fillx = 1; if (l.filly == null && l.c.some(c=>c.filly)) l.filly = 1; - }, "v": function(l) { + }, "v": function(l) {"ram"; l.c.forEach(updateMin); l._h = l.c.reduce((a,b)=>a+b._h,0); l._w = l.c.reduce((a,b)=>Math.max(a,b._w),0); @@ -336,6 +335,7 @@ Layout.prototype.update = function() { var l = this._l; updateMin(l); + delete cb; if (l.fillx || l.filly) { // fill all l.w = Bangle.appRect.w; l.h = Bangle.appRect.h; diff --git a/modules/Layout.min.js b/modules/Layout.min.js index b5a924358..f801177aa 100644 --- a/modules/Layout.min.js +++ b/modules/Layout.min.js @@ -1,14 +1,14 @@ -function p(b,k){function d(h){h.id&&(f[h.id]=h);h.type||(h.type="");h.c&&h.c.forEach(d)}this._l=this.l=b;this.physBtns=2==process.env.HWVERSION?1:3;this.options=k||{};this.lazy=this.options.lazy||!1;let a;if(2!=process.env.HWVERSION){a=[];function h(m){"btn"==m.type&&a.push(m);m.c&&m.c.forEach(h)}h(b);a.length&&(this.physBtns=0,this.buttons=a,this.selectedButton=-1)}if(this.options.btns)if(b=this.options.btns,this.physBtns>=b.length){this.b=b;let h=Math.floor(Bangle.appRect.h/ -this.physBtns);for(2b.length;)b.push({label:""});this._l.width=g.getWidth()-8;this._l={type:"h",filly:1,c:[this._l,{type:"v",pad:1,filly:1,c:b.map(m=>(m.type="txt",m.font="6x8",m.height=h,m.r=1,m))}]}}else this._l.width=g.getWidth()-32,this._l={type:"h",c:[this._l,{type:"v",c:b.map(h=>(h.type="btn",h.filly=1,h.width=32,h.r=1,h))}]},a&&a.push.apply(a,this._l.c[1].c);this.setUI();var f=this;d(this._l);this.updateNeeded=!0}function r(b, -k,d,a,f){var h=null==b.bgCol?f:g.toColor(b.bgCol);if(h!=f||"txt"==b.type||"btn"==b.type||"img"==b.type||"custom"==b.type){var m=b.c;delete b.c;var c="H"+E.CRC32(E.toJS(b));m&&(b.c=m);delete k[c]||((a[c]=[b.x,b.y,b.x+b.w-1,b.y+b.h-1]).bg=null==f?g.theme.bg:f,d&&(d.push(b),d=null))}if(b.c)for(var l of b.c)r(l,k,d,a,h)}p.prototype.setUI=function(){Bangle.setUI();let b;this.buttons&&(Bangle.setUI({mode:"updown",back:this.options.back},k=>{var d=this.selectedButton,a=this.buttons.length;if(void 0===k&& -this.buttons[d])return this.buttons[d].cb();this.buttons[d]&&(delete this.buttons[d].selected,this.render(this.buttons[d]));d=(d+a+k)%a;this.buttons[d]&&(this.buttons[d].selected=1,this.render(this.buttons[d]));this.selectedButton=d}),b=!0);this.options.back&&!b&&Bangle.setUI({mode:"custom",back:this.options.back});if(this.b){function k(d,a){.75=d.x&&a.y>=d.y&&a.x<=d.x+d.w&&a.y<=d.y+d.h&&(2==a.type&&d.cbl?d.cbl(a):d.cb&&d.cb(a));d.c&&d.c.forEach(f=>k(f,a))}Bangle.touchHandler=(d,a)=>k(this._l,a);Bangle.on("touch",Bangle.touchHandler)}}; -p.prototype.render=function(b){function k(c){"ram";g.reset();void 0!==c.col&&g.setColor(c.col);void 0!==c.bgCol&&g.setBgColor(c.bgCol).clearRect(c.x,c.y,c.x+c.w-1,c.y+c.h-1);d[c.type](c)}b||(b=this._l);this.updateNeeded&&this.update();var d={"":function(){},txt:function(c){if(c.wrap){g.setFont(c.font).setFontAlign(0,-1);var l=g.wrapString(c.label,c.w),e=c.y+(c.h-g.getFontHeight()*l.length>>1);l.forEach((n,q)=>g.drawString(n,c.x+(c.w>>1),e+g.getFontHeight()*q))}else g.setFont(c.font).setFontAlign(0, -0,c.r).drawString(c.label,c.x+(c.w>>1),c.y+(c.h>>1))},btn:function(c){var l=c.x+(0|c.pad),e=c.y+(0|c.pad),n=c.w-(c.pad<<1),q=c.h-(c.pad<<1);l=[l,e+4,l+4,e,l+n-5,e,l+n-1,e+4,l+n-1,e+q-5,l+n-5,e+q-1,l+4,e+q-1,l,e+q-5,l,e+4];e=c.selected?g.theme.bgH:g.theme.bg2;g.setColor(e).fillPoly(l).setColor(c.selected?g.theme.fgH:g.theme.fg2).drawPoly(l);void 0!==c.col&&g.setColor(c.col);c.src?g.setBgColor(e).drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI* -(c.r||0)}):g.setFont(c.font||"6x8:2").setFontAlign(0,0,c.r).drawString(c.label,c.x+c.w/2,c.y+c.h/2)},img:function(c){g.drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)})},custom:function(c){c.render(c)},h:function(c){c.c.forEach(k)},v:function(c){c.c.forEach(k)}};if(this.lazy){this.rects||(this.rects={});var a=this.rects.clone(),f=[];r(b,a,f,this.rects,null);for(var h in a)delete this.rects[h];b=Object.keys(a).map(c=>a[c]).reverse(); -for(var m of b)g.setBgColor(m.bg).clearRect.apply(g,m);f.forEach(k)}else k(b)};p.prototype.forgetLazyState=function(){this.rects={}};p.prototype.layout=function(b){switch(b.type){case "h":var k=b.x+(0|b.pad),d=0,a=b.c&&b.c.reduce((e,n)=>e+(0|n.fillx),0);a||(k+=b.w-b._w>>1,a=1);var f=k;b.c.forEach(e=>{e.x=0|f;k+=e._w;d+=0|e.fillx;f=k+Math.floor(d*(b.w-b._w)/a);e.w=0|f-e.x;e.h=0|(e.filly?b.h-(b.pad<<1):e._h);e.y=0|b.y+(0|b.pad)+((1+(0|e.valign))*(b.h-(b.pad<<1)-e.h)>>1);e.c&&this.layout(e)});break; -case "v":var h=b.y+(0|b.pad),m=0,c=b.c&&b.c.reduce((e,n)=>e+(0|n.filly),0);c||(h+=b.h-b._h>>1,c=1);var l=h;b.c.forEach(e=>{e.y=0|l;h+=e._h;m+=0|e.filly;l=h+Math.floor(m*(b.h-b._h)/c);e.h=0|l-e.y;e.w=0|(e.fillx?b.w-(b.pad<<1):e._w);e.x=0|b.x+(0|b.pad)+((1+(0|e.halign))*(b.w-(b.pad<<1)-e.w)>>1);e.c&&this.layout(e)})}};p.prototype.debug=function(b,k){b||(b=this._l);k=k||1;g.setColor(k&1,k&2,k&4).drawRect(b.x+k-1,b.y+k-1,b.x+b.w-k,b.y+b.h-k);b.pad&&g.drawRect(b.x+b.pad-1,b.y+b.pad-1,b.x+b.w-b.pad,b.y+ -b.h-b.pad);k++;b.c&&b.c.forEach(d=>this.debug(d,k))};p.prototype.update=function(){function b(a){"ram";k[a.type](a);if(a.r&1){var f=a._w;a._w=a._h;a._h=f}a._w=0|Math.max(a._w+(a.pad<<1),0|a.width);a._h=0|Math.max(a._h+(a.pad<<1),0|a.height)}delete this.updateNeeded;var k={txt:function(a){a.font.endsWith("%")&&(a.font="Vector"+Math.round(g.getHeight()*a.font.slice(0,-1)/100));if(a.wrap)a._h=a._w=0;else{var f=g.setFont(a.font).stringMetrics(a.label);a._w=f.width;a._h=f.height}},btn:function(a){a.font&& -a.font.endsWith("%")&&(a.font="Vector"+Math.round(g.getHeight()*a.font.slice(0,-1)/100));var f=a.src?g.imageMetrics("function"==typeof a.src?a.src():a.src):g.setFont(a.font||"6x8:2").stringMetrics(a.label);a._h=16+f.height;a._w=20+f.width},img:function(a){var f=g.imageMetrics("function"==typeof a.src?a.src():a.src),h=a.scale||1;a._w=f.width*h;a._h=f.height*h},"":function(a){a._w=0;a._h=0},custom:function(a){a._w=0;a._h=0},h:function(a){a.c.forEach(b);a._h=a.c.reduce((f,h)=>Math.max(f,h._h),0);a._w= -a.c.reduce((f,h)=>f+h._w,0);null==a.fillx&&a.c.some(f=>f.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(f=>f.filly)&&(a.filly=1)},v:function(a){a.c.forEach(b);a._h=a.c.reduce((f,h)=>f+h._h,0);a._w=a.c.reduce((f,h)=>Math.max(f,h._w),0);null==a.fillx&&a.c.some(f=>f.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(f=>f.filly)&&(a.filly=1)}},d=this._l;b(d);d.fillx||d.filly?(d.w=Bangle.appRect.w,d.h=Bangle.appRect.h,d.x=Bangle.appRect.x,d.y=Bangle.appRect.y):(d.w=d._w,d.h=d._h,d.x=Bangle.appRect.w-d.w>>1,d.y= -Bangle.appRect.y+(Bangle.appRect.h-d.h>>1));this.layout(d)};p.prototype.clear=function(b){b||(b=this._l);g.reset();void 0!==b.bgCol&&g.setBgColor(b.bgCol);g.clearRect(b.x,b.y,b.x+b.w-1,b.y+b.h-1)};exports=p \ No newline at end of file +function p(d,h){function b(e){"ram";e.id&&(a[e.id]=e);e.type||(e.type="");e.c&&e.c.forEach(b)}this._l=this.l=d;this.options=h||{};this.lazy=this.options.lazy||!1;this.physBtns=1;let f;if(2!=process.env.HWVERSION){this.physBtns=3;f=[];function e(l){"ram";"btn"==l.type&&f.push(l);l.c&&l.c.forEach(e)}e(d);f.length&&(this.physBtns=0,this.buttons=f,this.selectedButton=-1)}if(this.options.btns)if(d=this.options.btns,this.physBtns>=d.length){this.b=d;let e=Math.floor(Bangle.appRect.h/ +this.physBtns);for(2d.length;)d.push({label:""});this._l.width=g.getWidth()-8;this._l={type:"h",filly:1,c:[this._l,{type:"v",pad:1,filly:1,c:d.map(l=>(l.type="txt",l.font="6x8",l.height=e,l.r=1,l))}]}}else this._l.width=g.getWidth()-32,this._l={type:"h",c:[this._l,{type:"v",c:d.map(e=>(e.type="btn",e.filly=1,e.width=32,e.r=1,e))}]},f&&f.push.apply(f,this._l.c[1].c);this.setUI();var a=this;b(this._l);this.updateNeeded=!0}function t(d, +h,b,f,a){var e=null==d.bgCol?a:g.toColor(d.bgCol);if(e!=a||"txt"==d.type||"btn"==d.type||"img"==d.type||"custom"==d.type){var l=d.c;delete d.c;var k="H"+E.CRC32(E.toJS(d));l&&(d.c=l);delete h[k]||((f[k]=[d.x,d.y,d.x+d.w-1,d.y+d.h-1]).bg=null==a?g.theme.bg:a,b&&(b.push(d),b=null))}if(d.c)for(var c of d.c)t(c,h,b,f,e)}p.prototype.setUI=function(){Bangle.setUI();let d;this.buttons&&(Bangle.setUI({mode:"updown",back:this.options.back},h=>{var b=this.selectedButton,f=this.buttons.length;if(void 0===h&& +this.buttons[b])return this.buttons[b].cb();this.buttons[b]&&(delete this.buttons[b].selected,this.render(this.buttons[b]));b=(b+f+h)%f;this.buttons[b]&&(this.buttons[b].selected=1,this.render(this.buttons[b]));this.selectedButton=b}),d=!0);this.options.back&&!d&&Bangle.setUI({mode:"custom",back:this.options.back});if(this.b){function h(b,f){.75=b.x&&f.y>=b.y&&f.x<=b.x+b.w&&f.y<=b.y+b.h&&(2==f.type&&b.cbl?b.cbl(f):b.cb&&b.cb(f));b.c&&b.c.forEach(a=>h(a,f))}Bangle.touchHandler=(b,f)=>h(this._l,f);Bangle.on("touch",Bangle.touchHandler)}}; +p.prototype.render=function(d){function h(c){"ram";b.reset();void 0!==c.col&&b.setColor(c.col);void 0!==c.bgCol&&b.setBgColor(c.bgCol).clearRect(c.x,c.y,c.x+c.w-1,c.y+c.h-1);f[c.type](c)}d||(d=this._l);this.updateNeeded&&this.update();var b=g,f={"":function(){},txt:function(c){"ram";if(c.wrap){var m=b.setFont(c.font).setFontAlign(0,-1).wrapString(c.label,c.w),n=c.y+(c.h-b.getFontHeight()*m.length>>1);b.drawString(m.join("\n"),c.x+(c.w>>1),n)}else b.setFont(c.font).setFontAlign(0,0,c.r).drawString(c.label, +c.x+(c.w>>1),c.y+(c.h>>1))},btn:function(c){"ram";var m=c.x+(0|c.pad),n=c.y+(0|c.pad),q=c.w-(c.pad<<1),r=c.h-(c.pad<<1);m=[m,n+4,m+4,n,m+q-5,n,m+q-1,n+4,m+q-1,n+r-5,m+q-5,n+r-1,m+4,n+r-1,m,n+r-5,m,n+4];n=c.selected?b.theme.bgH:b.theme.bg2;b.setColor(n).fillPoly(m).setColor(c.selected?b.theme.fgH:b.theme.fg2).drawPoly(m);void 0!==c.col&&b.setColor(c.col);c.src?b.setBgColor(n).drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)}):b.setFont(c.font|| +"6x8:2").setFontAlign(0,0,c.r).drawString(c.label,c.x+c.w/2,c.y+c.h/2)},img:function(c){"ram";b.drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)})},custom:function(c){"ram";c.render(c)},h:function(c){"ram";c.c.forEach(h)},v:function(c){"ram";c.c.forEach(h)}};if(this.lazy){this.rects||(this.rects={});var a=this.rects.clone(),e=[];t(d,a,e,this.rects,null);for(var l in a)delete this.rects[l];d=Object.keys(a).map(c=>a[c]).reverse(); +for(var k of d)b.setBgColor(k.bg).clearRect.apply(g,k);e.forEach(h)}else h(d)};p.prototype.forgetLazyState=function(){this.rects={}};p.prototype.layout=function(d){var h={h:function(b){"ram";var f=b.x+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.fillx),0);e||(f+=b.w-b._w>>1,e=1);var l=f;b.c.forEach(k=>{k.x=0|l;f+=k._w;a+=0|k.fillx;l=f+Math.floor(a*(b.w-b._w)/e);k.w=0|l-k.x;k.h=0|(k.filly?b.h-(b.pad<<1):k._h);k.y=0|b.y+(0|b.pad)+((1+(0|k.valign))*(b.h-(b.pad<<1)-k.h)>>1);if(k.c)h[k.type](k)})},v:function(b){"ram"; +var f=b.y+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.filly),0);e||(f+=b.h-b._h>>1,e=1);var l=f;b.c.forEach(k=>{k.y=0|l;f+=k._h;a+=0|k.filly;l=f+Math.floor(a*(b.h-b._h)/e);k.h=0|l-k.y;k.w=0|(k.fillx?b.w-(b.pad<<1):k._w);k.x=0|b.x+(0|b.pad)+((1+(0|k.halign))*(b.w-(b.pad<<1)-k.w)>>1);if(k.c)h[k.type](k)})}};h[d.type](d)};p.prototype.debug=function(d,h){d||(d=this._l);h=h||1;g.setColor(h&1,h&2,h&4).drawRect(d.x+h-1,d.y+h-1,d.x+d.w-h,d.y+d.h-h);d.pad&&g.drawRect(d.x+d.pad-1,d.y+d.pad-1,d.x+d.w-d.pad, +d.y+d.h-d.pad);h++;d.c&&d.c.forEach(b=>this.debug(b,h))};p.prototype.update=function(){function d(a){"ram";b[a.type](a);if(a.r&1){var e=a._w;a._w=a._h;a._h=e}a._w=Math.max(a._w+(a.pad<<1),0|a.width);a._h=Math.max(a._h+(a.pad<<1),0|a.height)}delete this.updateNeeded;var h=g,b={txt:function(a){"ram";a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));if(a.wrap)a._h=a._w=0;else{var e=g.setFont(a.font).stringMetrics(a.label);a._w=e.width;a._h=e.height}},btn:function(a){"ram"; +a.font&&a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));var e=a.src?h.imageMetrics("function"==typeof a.src?a.src():a.src):h.setFont(a.font||"6x8:2").stringMetrics(a.label);a._h=16+e.height;a._w=20+e.width},img:function(a){"ram";var e=h.imageMetrics("function"==typeof a.src?a.src():a.src),l=a.scale||1;a._w=e.width*l;a._h=e.height*l},"":function(a){"ram";a._w=0;a._h=0},custom:function(a){"ram";a._w=0;a._h=0},h:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e, +l)=>Math.max(e,l._h),0);a._w=a.c.reduce((e,l)=>e+l._w,0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)},v:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e,l)=>e+l._h,0);a._w=a.c.reduce((e,l)=>Math.max(e,l._w),0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)}},f=this._l;d(f);delete b;f.fillx||f.filly?(f.w=Bangle.appRect.w,f.h=Bangle.appRect.h,f.x=Bangle.appRect.x,f.y=Bangle.appRect.y):(f.w=f._w, +f.h=f._h,f.x=Bangle.appRect.w-f.w>>1,f.y=Bangle.appRect.y+(Bangle.appRect.h-f.h>>1));this.layout(f)};p.prototype.clear=function(d){d||(d=this._l);g.reset();void 0!==d.bgCol&&g.setBgColor(d.bgCol);g.clearRect(d.x,d.y,d.x+d.w-1,d.y+d.h-1)};exports=p \ No newline at end of file From ec37f35622e595906d333be184ae7fb8072eca06 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 24 Nov 2022 13:29:52 +0100 Subject: [PATCH 051/342] [sleeplogalarm] Replace getDay with getDate --- apps/sleeplogalarm/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index aaa97feed..3162c3f86 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -18,7 +18,7 @@ function getNextAlarm(allAlarms, fo, withId) { ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; - }).filter(a => a.tTo // filter non active alarms + }).filter(a => a.tTo // filter non active alarms // sort to get next alarm first ).sort((a, b) => a.tTo - b.tTo)[0] || {}; } @@ -133,7 +133,7 @@ exports = { // save time of alarm and this day to prevent triggering for the same alarm again settings.lastTime = alarm.t; - settings.lastDate = now.getDay(); + settings.lastDate = now.getDate(); require("Storage").writeJSON("sleeplogalarm.settings.json", settings); // write changes From 3fad345925d5243afc8f599d5edf8aa7a459e6a0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 14:41:57 +0000 Subject: [PATCH 052/342] Fix issue when an app depends on another app which depends on another https://forum.espruino.com/conversations/381796 --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index eb5ca90a2..db08367e0 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit eb5ca90a2ddcb550f8311526d2ac10e0895e4c2e +Subproject commit db08367e0a2c25040449a4b556eaed459e8f47fc From b01d284b807b55a660a2f41e681183da51eaf354 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 14:43:23 +0000 Subject: [PATCH 053/342] Mention the calibration app isn't a good idea now --- apps/calibration/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/calibration/metadata.json b/apps/calibration/metadata.json index b60650300..f428bd538 100644 --- a/apps/calibration/metadata.json +++ b/apps/calibration/metadata.json @@ -3,7 +3,7 @@ "shortName":"Calibration", "icon": "calibration.png", "version":"0.03", - "description": "A simple calibration app for the touchscreen", + "description": "(NOT RECOMMENDED) A simple calibration app for the touchscreen. Please use the Touchscreen Calibration in the Settings app instead.", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "tags": "tool", From adcee06813799573f6e116b9a1c7f9e3b4e26885 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 24 Nov 2022 14:43:38 +0000 Subject: [PATCH 054/342] doc tweaks --- modules/clock_info.js | 53 +++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/modules/clock_info.js b/modules/clock_info.js index 4ce2a08fc..6f26f5c4b 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -2,25 +2,28 @@ that can be scrolled through on the clock face. `load()` returns an array of menu objects, where each object contains a list of menu items: -* 'name' : text to display and identify menu object (e.g. weather) -* 'img' : a 24x24px image -* 'items' : menu items such as temperature, humidity, wind etc. + +* `name` : text to display and identify menu object (e.g. weather) +* `img` : a 24x24px image +* `items` : menu items such as temperature, humidity, wind etc. Note that each item is an object with: -* 'item.name' : friendly name to identify an item (e.g. temperature) -* 'item.hasRange' : if `true`, `.get` returns `v/min/max` values (for progress bar/guage) -* 'item.get' : function that resolves with: - { - 'text' : the text to display for this item - 'img' : a 24x24px image to display for this item - 'v' : (if hasRange==true) a numerical value - 'min','max' : (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage) - } -* '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. Return true if the caller should feedback the user. +* `item.name` : friendly name to identify an item (e.g. temperature) +* `item.hasRange` : if `true`, `.get` returns `v/min/max` values (for progress bar/guage) +* `item.get` : function that returns an object: + +{ + 'text' // the text to display for this item + 'img' // a 24x24px image to display for this item + 'v' // (if hasRange==true) a numerical value + 'min','max' // (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage) +} + +* `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. Return true if the caller should feedback the user. See the bottom of this file for example usage... @@ -36,6 +39,7 @@ example.clkinfo.js : img : atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }), show : () => {}, hide : () => {} + // run : () => {} optional (called when tapped) } ] }; @@ -115,7 +119,7 @@ exports.load = function() { if(b) b.items = b.items.concat(a.items); else menu = menu.concat(a); } catch(e){ - console.log("Could not load clock info.") + console.log("Could not load clock info "+E.toJS(fn)) } }); @@ -128,7 +132,8 @@ Simply supply the menu data (from .load) and a function to draw the clock info. For example: -let clockInfoMenu = require("clock_info").addInteractive(require("clock_info").load(), { +let clockInfoItems = require("clock_info").load(); +let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x : 20, y: 20, w: 80, h:80, // dimensions of area used for clock_info draw : (itm, info, options) => { g.reset().clearRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1); @@ -148,12 +153,12 @@ and delete clockInfoMenu clockInfoMenu is the 'options' parameter, with the following added: -* 'index' : int - which instance number are we? Starts at 0 -* 'menuA' : int - index in 'menu' of showing clockInfo item -* 'menuB' : int - index in 'menu[menuA].items' of showing clockInfo item -* 'remove' : function - remove this clockInfo item -* 'redraw' : function - force a redraw -* 'focus' : function - bool to show if menu is focused or not +* `index` : int - which instance number are we? Starts at 0 +* `menuA` : int - index in 'menu' of showing clockInfo item +* `menuB` : int - index in 'menu[menuA].items' of showing clockInfo item +* `remove` : function - remove this clockInfo item +* `redraw` : function - force a redraw +* `focus` : function - bool to show if menu is focused or not You can have more than one clock_info at once as well, sfor instance: From 8cf2f9957a278e6639902b96482cea3a43024cd8 Mon Sep 17 00:00:00 2001 From: Kedlub Date: Thu, 24 Nov 2022 18:30:29 +0100 Subject: [PATCH 055/342] qcenter: Added widgets & fix remove --- apps/qcenter/app.js | 11 ++++++++--- apps/qcenter/settings.js | 18 ++++++------------ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js index 0493805ac..a6499f508 100644 --- a/apps/qcenter/app.js +++ b/apps/qcenter/app.js @@ -82,8 +82,8 @@ var layoutContent = [ type: "h", pad: 5, c: [ - { type: "txt", font: "8x12", label: E.getBattery() + "%" }, - { type: "txt", font: "8x12", label: " " + E.getTemperature() + "°C" }, + { type: "txt", font: "8x12", scale: 2, label: E.getBattery() + "%" }, + { type: "txt", font: "8x12", scale: 2, label: " " + E.getTemperature() + "°C" }, ], }, ]; @@ -97,6 +97,10 @@ appButtons.forEach((appGroup) => { }); }); +// create layout with content + +Bangle.loadWidgets(); + var Layout = require("Layout"); var layout = new Layout({ type: "v", @@ -104,8 +108,9 @@ var layout = new Layout({ }); g.clear(); layout.render(); +Bangle.drawWidgets(); -// add swipe event listener for exit gesture +// swipe event listener for exit gesture Bangle.on("swipe", function (lr, ud) { if(exitGesture == "swipeup" && ud == -1) Bangle.showClock(); if(exitGesture == "swipedown" && ud == 1) Bangle.showClock(); diff --git a/apps/qcenter/settings.js b/apps/qcenter/settings.js index 5550fd149..10484bc8f 100644 --- a/apps/qcenter/settings.js +++ b/apps/qcenter/settings.js @@ -53,19 +53,13 @@ }; //List all pinned apps - for (let i = 0; i < pinnedApps.length; i++) { - mainmenu[pinnedApps[i].name] = function () { - E.showMenu({ - "": { title: pinnedApps[i].name }, - "< Back": showMainMenu, - Unpin: function () { - pinnedApps.splice(i, 1); - save("pinnedApps", pinnedApps); - showMainMenu(); - }, - }); + pinnedApps.forEach((app, i) => { + mainmenu["Remove " + app.name] = function () { + pinnedApps.splice(i, 1); + save("pinnedApps", pinnedApps); + showMainMenu(); }; - } + }); // Show pin app menu, or show alert if max amount of apps are pinned mainmenu["Pin App"] = function () { From 30abb6706baf7691d956dbdfdb2b4d72eaebd291 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 24 Nov 2022 23:56:16 +0100 Subject: [PATCH 056/342] [sleeplog] Improve README, remove convertOldLog --- apps/sleeplog/ChangeLog | 2 +- apps/sleeplog/README.md | 22 +++++++++-- apps/sleeplog/lib.js | 85 ----------------------------------------- 3 files changed, 19 insertions(+), 90 deletions(-) diff --git a/apps/sleeplog/ChangeLog b/apps/sleeplog/ChangeLog index 66eeccfc2..aa700f931 100644 --- a/apps/sleeplog/ChangeLog +++ b/apps/sleeplog/ChangeLog @@ -7,4 +7,4 @@ 0.10: Complete rework off this app! 0.10beta: Add interface.html to view saved log data, add "View log" function for debugging log, send data for gadgetbridge, change caching for global getStats 0.11: Prevent module not found error -0.12: Execute functions in `sleeplog.onChange` object on a status change \ No newline at end of file +0.12: Improve README, option to add functions triggered by status changes or time periods, remove old log (<0.10) conversion \ No newline at end of file diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 4310ead58..1970d8dde 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -24,10 +24,20 @@ Logfiles are not removed on un-/reinstall to prevent data loss. --- -### App Usage +### Main App Usage --- -#### On the main app screen: +#### View: +| Status | Color | Height | +|-------------|:------:|----------:| +| unknown | black | 0% | +| not worn | red | 40% | +| awake | green | 60% | +| light sleep | cyan | 80% | +| deep sleep | blue | 100% | +| consecutive | violet | as status | + +#### Controls: - __swipe left & right__ to change the displayed day - __touch the "title"__ (e.g. `Night to Fri 20/05/2022`) @@ -40,7 +50,11 @@ Logfiles are not removed on un-/reinstall to prevent data loss. - __use back button widget__ (upper left corner) exit the app -#### Inside the settings: + +--- +### Settings Usage +--- + - __Thresholds__ submenu Changes take effect from now on, not retrospective! - __Max Awake__ | maximal awake duration @@ -198,7 +212,7 @@ The passed data object has the following properties: Please leave requests and bug reports by raising an issue at [github.com/storm64/BangleApps](https://github.com/storm64/BangleApps) (or send me a [mail](mailto:banglejs@storm64.de)). #### Creator -Storm64 ([Mail](mailto:banglejs@storm64.de), [github](https://github.com/storm64)) +Storm64 ([mail](mailto:banglejs@storm64.de), [github](https://github.com/storm64)) #### Contributors myxor ([github](https://github.com/myxor)) diff --git a/apps/sleeplog/lib.js b/apps/sleeplog/lib.js index 1919e7483..83c45de66 100644 --- a/apps/sleeplog/lib.js +++ b/apps/sleeplog/lib.js @@ -149,14 +149,6 @@ exports = { // define move log function, move StorageFile content into files seperated by fortnights moveLog: function(force) { - /** convert old logfile (< v0.10) if present **/ - if (require("Storage").list("sleeplog.log", { - sf: false - }).length) { - convertOldLog(); - } - /** may be removed in later versions **/ - // first day of this fortnight period var thisFirstDay = this.fnToMs(this.msToFn(Date.now())); @@ -384,82 +376,5 @@ exports = { "unknown,not worn,awake,light sleep,deep sleep".split(",")[entry[1]].padEnd(12) + "for" + (duration + "min").padStart(8)); }); - }, - - /** convert old (< v0.10) to new logfile data **/ - convertOldLog: function() { - // read old logfile - var oldLog = require("Storage").read("sleeplog.log") || ""; - // decode data if needed - if (!oldLog.startsWith("[")) oldLog = atob(oldLog); - // delete old logfile and return if it is empty or corrupted - if (!oldLog.startsWith("[[") || !oldLog.endsWith("]]")) { - require("Storage").erase("sleeplog.log"); - return; - } - - // transform into StorageFile and clear oldLog to have more free ram accessable - require("Storage").open("sleeplog_old.log", "w").write(JSON.parse(oldLog).reverse().join("\n")); - oldLog = undefined; - - // calculate fortnight from now - var fnOfNow = this.msToFn(Date.now()); - - // open StorageFile with old log data - var file = require("Storage").open("sleeplog_old.log", "r"); - // define active fortnight and file cache - var activeFn = true; - var fileCache = []; - // loop through StorageFile entries - while (activeFn) { - // define fortnight for this entry - var thisFn = false; - // cache new line - var line = file.readLine(); - // check if line is filled - if (line) { - // parse line - line = line.substr(0, 15).split(",").map(e => parseInt(e)); - // calculate fortnight for this entry - thisFn = this.msToFn(line[0]); - // convert timestamp into 10min steps - line[0] = line[0] / 6E5 | 0; - // set consecutive to unknown - line.push(0); - } - // check if active fortnight and file cache is set, fortnight has changed and - // active fortnight is not fortnight from now - if (activeFn && fileCache.length && activeFn !== thisFn && activeFn !== fnOfNow) { - // write file cache into new file according to fortnight - require("Storage").writeJSON("sleeplog_" + activeFn + ".log", fileCache); - // clear file cache - fileCache = []; - } - // add line to file cache if it is filled - if (line) fileCache.push(line); - // set active fortnight - activeFn = thisFn; - } - // check if entries are leftover - if (fileCache.length) { - // format fileCache entries into a string - fileCache = fileCache.map(e => e.join(",")).join("\n"); - // read complete new log StorageFile as string - file = require("Storage").open("sleeplog.log", "r"); - var newLogString = file.read(file.getLength()); - // add entries at the beginning of the new log string - newLogString = fileCache + "\n" + newLogString; - // rewrite new log StorageFile - require("Storage").open("sleeplog.log", "w").write(newLogString); - } - - // free ram - file = undefined; - fileCache = undefined; - - // clean up old files - require("Storage").erase("sleeplog.log"); - require("Storage").open("sleeplog_old.log", "w").erase(); } - /** may be removed in later versions **/ }; From f4a48e62e676897edffc0ea77c77c9357558c18d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 09:42:25 +0000 Subject: [PATCH 057/342] Added Util.close to allow interfaces to close the window Fix My Location that couldn't be installed after the most recent update --- apps/mylocation/ChangeLog | 1 + apps/mylocation/README.md | 9 ++++-- .../{custom.html => interface.html} | 31 +++++++++++++++---- apps/mylocation/metadata.json | 4 +-- core | 2 +- 5 files changed, 36 insertions(+), 11 deletions(-) rename apps/mylocation/{custom.html => interface.html} (79%) diff --git a/apps/mylocation/ChangeLog b/apps/mylocation/ChangeLog index b46b3b178..afe1810e9 100644 --- a/apps/mylocation/ChangeLog +++ b/apps/mylocation/ChangeLog @@ -6,3 +6,4 @@ 0.06: renamed source files to match standard 0.07: Move mylocation app into 'Settings -> Apps' 0.08: Allow setting location from webinterface in the AppLoader +0.09: Fix web interface so app can be installed (replaced custom with interface html) diff --git a/apps/mylocation/README.md b/apps/mylocation/README.md index b12ed5dcf..11a644262 100644 --- a/apps/mylocation/README.md +++ b/apps/mylocation/README.md @@ -1,8 +1,13 @@ # My Location - *Sets and stores GPS lat and lon of your preferred city* +*Sets and stores GPS lat and lon of your preferred city* -To access, go to `Settings -> Apps -> My Location` +To access, you have two options: + +**In the App Loader** once My Location is installed, click on the 'Save' icon +next to it - and you can choose your location on a map. + +**On Bangle.js** go to `Settings -> Apps -> My Location` * Select one of the preset Cities, setup through the GPS or use the webinterface from the AppLoader * Other Apps can read this information to do calculations based on location diff --git a/apps/mylocation/custom.html b/apps/mylocation/interface.html similarity index 79% rename from apps/mylocation/custom.html rename to apps/mylocation/interface.html index 5c0130199..79a122bf7 100644 --- a/apps/mylocation/custom.html +++ b/apps/mylocation/interface.html @@ -33,10 +33,11 @@
+ Click the map to select a location
- + @@ -68,15 +69,19 @@ let latlon; var marker; - - map.on('click', function(e){ - console.log(e); + + function setPosition(ll) { + latlon = ll; if (map.hasLayer(marker)) { map.removeLayer(marker); } - latlon = e.latlng; - marker = new L.marker(e.latlng).addTo(map); + marker = new L.marker(latlon).addTo(map); + document.getElementById("select-hint").style.display="none"; document.getElementById("select").style.display=""; + } + + map.on('click', function(e){ + setPosition(e.latlng); }); document.getElementById("select").addEventListener("click", function() { @@ -87,9 +92,23 @@ Util.showModal("Saving..."); Util.writeStorage("mylocation.json", JSON.stringify(settings), ()=>{ Util.hideModal(); + Util.close(); // close this window }); }); + function onInit() { + // read existing location + Util.readStorage("mylocation.json", function(data) { + if (data===undefined) return; // no file + try { + var j = JSON.parse(data); + setPosition(j); + } catch (e) { + console.error(e); + } + }); + } + diff --git a/apps/mylocation/metadata.json b/apps/mylocation/metadata.json index bef5b983c..1c2974030 100644 --- a/apps/mylocation/metadata.json +++ b/apps/mylocation/metadata.json @@ -4,12 +4,12 @@ "icon": "app.png", "type": "settings", "screenshots": [{"url":"screenshot_1.png"}], - "version":"0.08", + "version":"0.09", "description": "Sets and stores the latitude and longitude of your preferred City. It can be set from GPS or webinterface. `mylocation.json` can be used by other apps that need your main location. See README for details.", "readme": "README.md", "tags": "tool,utility", "supports": ["BANGLEJS", "BANGLEJS2"], - "custom": "custom.html","custom": "custom.html", + "interface": "interface.html", "storage": [ {"name":"mylocation.settings.js","url":"settings.js"} ], diff --git a/core b/core index db08367e0..aba9b6a51 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit db08367e0a2c25040449a4b556eaed459e8f47fc +Subproject commit aba9b6a51fe02dfbde307c303560b8382857916d From bc052c3aced0ce524b6ef0946964d81edf2e7136 Mon Sep 17 00:00:00 2001 From: Kedlub Date: Fri, 25 Nov 2022 14:42:10 +0100 Subject: [PATCH 058/342] qcenter: Grammar fixes & Final touches --- apps/qcenter/README.md | 16 ++++++++-------- apps/qcenter/app.js | 4 ++-- apps/qcenter/metadata.json | 30 ++++++++++++++++-------------- apps/qcenter/screenshot.png | Bin 0 -> 3647 bytes apps/qcenter/settings.js | 32 +++++++++++++++++++++++++++----- 5 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 apps/qcenter/screenshot.png diff --git a/apps/qcenter/README.md b/apps/qcenter/README.md index eb40e63ed..4931b9c7f 100644 --- a/apps/qcenter/README.md +++ b/apps/qcenter/README.md @@ -1,20 +1,20 @@ # Quick Center -App with status bar showing various info, and up to six shortcuts for your favorite apps! -Meant to be used with any kind of quick launcher, such as Quick Launch or Pattern Launcher +An app with a status bar showing various information and up to six shortcuts for your favorite apps! +Designed for use with any kind of quick launcher, such as Quick Launch or Pattern Launcher. -Add screen shots (if possible) to the app folder and link then into this file with ![](.png) +![](screenshot.png) ## Usage -Pin apps using settings, and then run this using your favorite quick launcher to access them quickly -If you don't have any pinned apps, it shows setting and about app as an example +Pin your apps with settings, then launch them with your favorite quick launcher to access them quickly. +If you don't have any apps pinned, the settings and about apps will be shown as an example. ## Features -Showing battery and temperature (for now) +Battery and GPS status display (for now) Up to six shortcuts to your favorite apps ## Upcoming features -- Quick toggles for toggleable functions, such as Bluetooth, or it's HID mode -- Customizable status info \ No newline at end of file +- Quick switches for toggleable features such as Bluetooth or HID mode +- Customizable status information \ No newline at end of file diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js index a6499f508..876d4aba9 100644 --- a/apps/qcenter/app.js +++ b/apps/qcenter/app.js @@ -76,14 +76,14 @@ var appButtons = groupBy3(pinnedApps).map((appGroup, i) => { }); }); -// create basic layout content with status info on top +// create basic layout content with status info and sensor status on top var layoutContent = [ { type: "h", pad: 5, c: [ { type: "txt", font: "8x12", scale: 2, label: E.getBattery() + "%" }, - { type: "txt", font: "8x12", scale: 2, label: " " + E.getTemperature() + "°C" }, + { type: "txt", font: "8x12", scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") }, ], }, ]; diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index 736db2024..abef0fc36 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -1,15 +1,17 @@ -{ "id": "qcenter", - "name": "Quick Center", - "shortName":"QCenter", - "version":"0.01", - "description": "Shortcut for running your favorite apps & more", - "icon": "app.png", - "tags": "", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"qcenter.app.js","url":"app.js"}, - {"name":"qcenter.settings.js","url":"settings.js"}, - {"name":"qcenter.img","url":"app-icon.js","evaluate":true} - ] +{ + "id": "qcenter", + "name": "Quick Center", + "shortName": "QCenter", + "version": "0.01", + "description": "Shortcut app for quickly running your favorite apps", + "icon": "app.png", + "tags": "", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "screenshots": [{ "url": "screenshot.png" }], + "storage": [ + { "name": "qcenter.app.js", "url": "app.js" }, + { "name": "qcenter.settings.js", "url": "settings.js" }, + { "name": "qcenter.img", "url": "app-icon.js", "evaluate": true } + ] } diff --git a/apps/qcenter/screenshot.png b/apps/qcenter/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0a335aa58ba70ca0223116ca014294119c2036 GIT binary patch literal 3647 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 { - mainmenu["Remove " + app.name] = function () { - pinnedApps.splice(i, 1); - save("pinnedApps", pinnedApps); - showMainMenu(); + mainmenu[app.name] = function () { + E.showMenu({ + "": { title: app.name }, + "< Back": () => { + showMainMenu(); + }, + "Unpin": () => { + pinnedApps.splice(i, 1); + save("pinnedApps", pinnedApps); + showMainMenu(); + }, + "Move Up": () => { + if (i > 0) { + pinnedApps.splice(i - 1, 0, pinnedApps.splice(i, 1)[0]); + save("pinnedApps", pinnedApps); + showMainMenu(); + } + }, + "Move Down": () => { + if (i < pinnedApps.length - 1) { + pinnedApps.splice(i + 1, 0, pinnedApps.splice(i, 1)[0]); + save("pinnedApps", pinnedApps); + showMainMenu(); + } + }, + }); }; }); From 459a643c8720015e582248a8a6790661624ed0d0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 15:34:51 +0000 Subject: [PATCH 059/342] openstmap Added ability to upload multiple sets of map tiles Support for zooming in on map Satellite count moved to widget bar to leave more room for the map --- apps/openstmap/ChangeLog | 2 + apps/openstmap/README.md | 48 +++++ apps/openstmap/app.js | 101 +++++---- .../openstmap/{custom.html => interface.html} | 198 +++++++++++++++--- apps/openstmap/metadata.json | 9 +- apps/openstmap/openstmap.js | 73 +++++-- apps/recorder/widget.js | 1 + 7 files changed, 343 insertions(+), 89 deletions(-) create mode 100644 apps/openstmap/README.md rename apps/openstmap/{custom.html => interface.html} (62%) diff --git a/apps/openstmap/ChangeLog b/apps/openstmap/ChangeLog index 2a6c15a09..4b8dd108c 100644 --- a/apps/openstmap/ChangeLog +++ b/apps/openstmap/ChangeLog @@ -12,3 +12,5 @@ Fix alignment of satellite info text 0.12: switch to using normal OpenStreetMap tiles (opentopomap was too slow) 0.13: Use a single image file with 'frames' of data (drastically reduces file count, possibility of >1 map on device) +0.14: Added ability to upload multiple sets of map tiles + Support for zooming in on map diff --git a/apps/openstmap/README.md b/apps/openstmap/README.md new file mode 100644 index 000000000..707dbc7f8 --- /dev/null +++ b/apps/openstmap/README.md @@ -0,0 +1,48 @@ +# OpenStreetMap + +This app allows you to upload and use OpenSteetMap map tiles onto your +Bangle. There's an uploader, the app, and also a library that +allows you to use the maps in your Bangle.js applications. + +## Uploader + +Once you've installed OpenStreepMap on your Bangle, find it +in the App Loader and click the Disk icon next to it. + +A window will pop up showing what maps you have loaded. + +To add a map: + +* Click `Add Map` +* Scroll and zoom to the area of interest or use the Search button in the top left +* Now choose the size you want to upload (Small/Medium/etc) +* On Bangle.js 1 you can choose if you want a 3 bits per pixel map (this is lower +quality but uploads faster and takes less space). On Bangle.js 2 you only have a 3bpp +display so can only use 3bpp. +* Click `Get Map`, and a preview will be displayed. If you need to adjust the area you +can change settings, move the map around, and click `Get Map` again. +* When you're ready, click `Upload` + +## Bangle.js App + +The Bangle.js app allows you to view a map - it also turns the GPS on and marks +the path that you've been travelling. + +* Drag on the screen to move the map +* Press the button to bring up a menu, where you can zoom, go to GPS location +or put the map back in its default location + +## Library + +See the documentation in the library itself for full usage info: +https://github.com/espruino/BangleApps/blob/master/apps/openstmap/openstmap.js + +Or check the app itself: https://github.com/espruino/BangleApps/blob/master/apps/openstmap/app.js + +But in the most simple form: + +``` +var m = require("openstmap"); +// m.lat/lon are now the center of the loaded map +m.draw(); // draw centered on the middle of the loaded map +``` diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 62597ca20..99362d97b 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -1,20 +1,27 @@ var m = require("openstmap"); var HASWIDGETS = true; -var y1,y2; +var R; var fix = {}; +var mapVisible = false; +var hasScrolled = false; +// Redraw the whole page function redraw() { - g.setClipRect(0,y1,g.getWidth()-1,y2); + g.setClipRect(R.x,R.y,R.x2,R.y2); m.draw(); drawMarker(); - if (WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { - g.flip(); // force immediate draw on double-buffered screens - track will update later - g.setColor(0.75,0.2,0); + if (HASWIDGETS && WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { + g.flip().setColor("#f00"); // force immediate draw on double-buffered screens - track will update later WIDGETS["gpsrec"].plotTrack(m); } + if (HASWIDGETS && WIDGETS["recorder"] && WIDGETS["recorder"].plotTrack) { + g.flip().setColor("#f00"); // force immediate draw on double-buffered screens - track will update later + WIDGETS["recorder"].plotTrack(m); + } g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); } +// Draw the marker for where we are function drawMarker() { if (!fix.fix) return; var p = m.latLonToXY(fix.lat, fix.lon); @@ -22,50 +29,66 @@ function drawMarker() { g.fillRect(p.x-2, p.y-2, p.x+2, p.y+2); } -var fix; Bangle.on('GPS',function(f) { fix=f; - g.reset().clearRect(0,y1,g.getWidth()-1,y1+8).setFont("6x8").setFontAlign(0,0); - var txt = fix.satellites+" satellites"; - if (!fix.fix) - txt += " - NO FIX"; - g.drawString(txt,g.getWidth()/2,y1 + 4); - drawMarker(); + if (HASWIDGETS) WIDGETS["sats"].draw(WIDGETS["sats"]); + if (mapVisible) drawMarker(); }); Bangle.setGPSPower(1, "app"); if (HASWIDGETS) { Bangle.loadWidgets(); + WIDGETS["sats"] = { area:"tl", width:48, draw:w=>{ + var txt = (0|fix.satellites)+" Sats"; + if (!fix.fix) txt += "\nNO FIX"; + g.reset().setFont("6x8").setFontAlign(0,0) + .drawString(txt,w.x+24,w.y+12); + } + }; Bangle.drawWidgets(); - y1 = 24; - var hasBottomRow = Object.keys(WIDGETS).some(w=>WIDGETS[w].area[0]=="b"); - y2 = g.getHeight() - (hasBottomRow ? 24 : 1); -} else { - y1=0; - y2=g.getHeight()-1; } +R = Bangle.appRect; -redraw(); - -function recenter() { - if (!fix.fix) return; - m.lat = fix.lat; - m.lon = fix.lon; +function showMap() { + mapVisible = true; + g.reset().clearRect(R); redraw(); + Bangle.setUI({mode:"custom",drag:e=>{ + if (e.b) { + g.setClipRect(R.x,R.y,R.x2,R.y2); + g.scroll(e.dx,e.dy); + m.scroll(e.dx,e.dy); + g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); + hasScrolled = true; + } else if (hasScrolled) { + hasScrolled = false; + redraw(); + } + }, btn: btn=>{ + mapVisible = false; + var menu = {"":{title:"Map"}, + "< Back": ()=> showMap(), + /*LANG*/"Zoom In": () =>{ + m.scale /= 2; + showMap(); + }, + /*LANG*/"Zoom Out": () =>{ + m.scale *= 2; + showMap(); + }, + /*LANG*/"Center Map": () =>{ + m.lat = m.map.lat; + m.lon = m.map.lon; + m.scale = m.map.scale; + showMap(); + }}; + if (fix.fix) menu[/*LANG*/"Center GPS"]=() =>{ + m.lat = fix.lat; + m.lon = fix.lon; + showMap(); + }; + E.showMenu(menu); + }}); } -setWatch(recenter, global.BTN2?BTN2:BTN1, {repeat:true}); - -var hasScrolled = false; -Bangle.on('drag',e=>{ - if (e.b) { - g.setClipRect(0,y1,g.getWidth()-1,y2); - g.scroll(e.dx,e.dy); - m.scroll(e.dx,e.dy); - g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); - hasScrolled = true; - } else if (hasScrolled) { - hasScrolled = false; - redraw(); - } -}); +showMap(); diff --git a/apps/openstmap/custom.html b/apps/openstmap/interface.html similarity index 62% rename from apps/openstmap/custom.html rename to apps/openstmap/interface.html index c1a161458..81406d807 100644 --- a/apps/openstmap/custom.html +++ b/apps/openstmap/interface.html @@ -9,7 +9,8 @@ padding: 0; margin: 0; } - html, body, #map { + html, body, #map, #mapsLoaded, #mapContainer { + position: relative; height: 100%; width: 100%; } @@ -27,20 +28,40 @@ width: 256px; height: 256px; } + .tile-title { + font-weight:bold; + font-size: 125%; + } + .tile-map { + width: 128px; + height: 128px; + } -
+
-
-

3 bit
-
- - +
+
+
+
+

3 bit
+
+ +
+
+ + +
- + @@ -60,8 +81,6 @@ TODO: */ var TILESIZE = 96; // Size of our tiles var OSMTILESIZE = 256; // Size of openstreetmap tiles - var MAPSIZE = TILESIZE*5; ///< 480 - Size of map we download - var OSMTILECOUNT = 3; // how many tiles do we download in each direction (Math.floor(MAPSIZE / OSMTILESIZE)+1) /* Can see possible tiles on http://leaflet-extras.github.io/leaflet-providers/preview/ However some don't allow cross-origin use */ //var TILELAYER = 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png'; // simple, high contrast, TOO SLOW @@ -69,8 +88,8 @@ TODO: var TILELAYER = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; var PREVIEWTILELAYER = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; - // Create map and try and set the location to where the browser thinks we are - var map = L.map('map').locate({setView: true, maxZoom: 16, enableHighAccuracy:true}); + var loadedMaps = []; + // Tiles used for Bangle.js itself var bangleTileLayer = L.tileLayer(TILELAYER, { maxZoom: 18, @@ -83,6 +102,10 @@ TODO: }); // Could optionally overlay trails: https://wiki.openstreetmap.org/wiki/Tiles + // Create map and try and set the location to where the browser thinks we are + var map = L.map('map').locate({setView: true, maxZoom: 16, enableHighAccuracy:true}); + previewTileLayer.addTo(map); + // Search box: const searchProvider = new window.GeoSearch.OpenStreetMapProvider(); const searchControl = new GeoSearch.GeoSearchControl({ @@ -96,6 +119,7 @@ TODO: }); map.addControl(searchControl); + // ---------------------------------------- Run at startup function onInit(device) { if (device && device.info && device.info.g) { // On 3 bit devices, don't even offer the option. 3 bit is the only way @@ -104,12 +128,120 @@ TODO: document.getElementById("3bitdiv").style = "display:none"; } } + + showLoadedMaps(); } - var mapFiles = []; - previewTileLayer.addTo(map); + function showLoadedMaps() { + document.getElementById("mapsLoadedContainer").style.display = ""; + document.getElementById("mapContainer").style.display = "none"; - function tilesLoaded(ctx, width, height) { + Util.showModal("Loading maps..."); + let mapsLoadedContainer = document.getElementById("mapsLoadedContainer"); + mapsLoadedContainer.innerHTML = ""; + loadedMaps = []; + + Puck.write(`\x10Bluetooth.println(require("Storage").list(/openstmap\\.\\d+\\.json/))\n`,function(files) { + console.log("MAPS:",files); + let promise = Promise.resolve(); + files.trim().split(",").forEach(filename => { + if (filename=="") return; + promise = promise.then(() => new Promise(resolve => { + Util.readStorage(filename, fileContents => { + console.log(filename + " => " + fileContents); + let mapNumber = filename.match(/\d+/)[0]; // figure out what map number we are + let mapInfo; + try { + mapInfo = JSON.parse(fileContents); + } catch (e) { + console.error(e); + } + loadedMaps[mapNumber] = mapInfo; + if (mapInfo!==undefined) { + let latlon = L.latLng(mapInfo.lat, mapInfo.lon); + mapsLoadedContainer.innerHTML += ` +
+
+
+
+
+
+

Map ${mapNumber}

+

${mapInfo.w*mapInfo.h} Tiles (${((mapInfo.imgx*mapInfo.imgy)>>11).toFixed(0)}k)

+
+
+ +
+
+ `; + let map = L.map(`tile-map-${mapNumber}`); + L.tileLayer(PREVIEWTILELAYER, { + maxZoom: 18 + }).addTo(map); + let marker = new L.marker(latlon).addTo(map); + map.fitBounds(latlon.toBounds(2000/*meters*/), {animation: false}); + } + resolve(); + }); + })); + }); + promise = promise.then(() => new Promise(resolve => { + if (!loadedMaps.length) { + mapsLoadedContainer.innerHTML += ` +
+
+
+
+
+
+

No Maps Loaded

+
+
+
+
+ `; + } + mapsLoadedContainer.innerHTML += ` +
+
+
+
+
+
+
+
+ +
+
+ `; + Util.hideModal(); + })); + }); + } + + function onMapDelete(mapNumber) { + console.log("delete", mapNumber); + Util.showModal(`Erasing map ${mapNumber}...`); + Util.eraseStorage(`openstmap.${mapNumber}.json`, function() { + Util.eraseStorage(`openstmap.${mapNumber}.img`, function() { + Util.hideModal(); + showLoadedMaps(); + }); + }); + } + + function showMap() { + document.getElementById("mapsLoadedContainer").style.display = "none"; + document.getElementById("mapContainer").style.display = ""; + document.getElementById("maptiles").style.display="none"; + document.getElementById("uploadbuttons").style.display="none"; + } + + // ----------------------------------------------------- + var mapFiles = []; + + // convert canvas into an actual tiled image file + function tilesLoaded(ctx, width, height, mapImageFile) { var options = { compression:false, output:"raw", mode:"web" @@ -166,12 +298,17 @@ TODO: } } return [{ - name:"openstmap.0.img", + name:mapImageFile, content:tiledImage }]; } document.getElementById("getmap").addEventListener("click", function() { + + var MAPTILES = parseInt(document.getElementById("mapSize").value); + var MAPSIZE = TILESIZE*MAPTILES; /// Size of map we download to Bangle in pixels + var OSMTILECOUNT = (Math.ceil((MAPSIZE+TILESIZE) / OSMTILESIZE)+1); // how many tiles do we download from OSM in each direction + var zoom = map.getZoom(); var centerlatlon = map.getBounds().getCenter(); var center = map.project(centerlatlon, zoom).divideBy(OSMTILESIZE); @@ -242,8 +379,11 @@ TODO: Promise.all(tileGetters).then(() => { document.getElementById("uploadbuttons").style.display=""; - mapFiles = tilesLoaded(ctx, canvas.width, canvas.height); - mapFiles.unshift({name:"openstmap.0.json",content:JSON.stringify({ + var mapNumber = 0; + while (loadedMaps[mapNumber]) mapNumber++; + let mapImageFile = `openstmap.${mapNumber}.img`; + mapFiles = tilesLoaded(ctx, canvas.width, canvas.height, mapImageFile); + mapFiles.unshift({name:`openstmap.${mapNumber}.json`,content:JSON.stringify({ imgx : canvas.width, imgy : canvas.height, tilesize : TILESIZE, @@ -252,21 +392,31 @@ TODO: lon : centerlatlon.lng, w : Math.round(canvas.width / TILESIZE), // width in tiles h : Math.round(canvas.height / TILESIZE), // height in tiles - fn : "openstmap.0.img" + fn : mapImageFile })}); console.log(mapFiles); }); }); document.getElementById("upload").addEventListener("click", function() { - sendCustomizedApp({ - storage:mapFiles + Util.showModal("Uploading..."); + let promise = Promise.resolve(); + mapFiles.forEach(file => { + promise = promise.then(function() { + return new Promise(resolve => { + Util.writeStorage(file.name, file.content, resolve); + }); + }); + }); + promise.then(function() { + Util.hideModal(); + console.log("Upload Complete"); + showLoadedMaps(); }); }); document.getElementById("cancel").addEventListener("click", function() { - document.getElementById("maptiles").style.display="none"; - document.getElementById("uploadbuttons").style.display="none"; + showMap(); }); diff --git a/apps/openstmap/metadata.json b/apps/openstmap/metadata.json index 32093f70e..09b4c68e3 100644 --- a/apps/openstmap/metadata.json +++ b/apps/openstmap/metadata.json @@ -2,17 +2,20 @@ "id": "openstmap", "name": "OpenStreetMap", "shortName": "OpenStMap", - "version": "0.13", + "version": "0.14", "description": "Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are. Once installed this also adds map functionality to `GPS Recorder` and `Recorder` apps", + "readme": "README.md", "icon": "app.png", "tags": "outdoors,gps,osm", "supports": ["BANGLEJS","BANGLEJS2"], "screenshots": [{"url":"screenshot.png"}], - "custom": "custom.html", - "customConnect": true, + "interface": "interface.html", "storage": [ {"name":"openstmap","url":"openstmap.js"}, {"name":"openstmap.app.js","url":"app.js"}, {"name":"openstmap.img","url":"app-icon.js","evaluate":true} + ], "data": [ + {"wildcard":"openstmap.*.json"}, + {"wildcard":"openstmap.*.img"} ] } diff --git a/apps/openstmap/openstmap.js b/apps/openstmap/openstmap.js index 2bd7d2e2e..692344357 100644 --- a/apps/openstmap/openstmap.js +++ b/apps/openstmap/openstmap.js @@ -20,32 +20,59 @@ function center() { m.draw(); } +// you can even change the scale - eg 'm/scale *= 2' + */ -var map = require("Storage").readJSON("openstmap.0.json"); -map.center = Bangle.project({lat:map.lat,lon:map.lon}); -exports.map = map; -exports.lat = map.lat; // actual position of middle of screen -exports.lon = map.lon; // actual position of middle of screen var m = exports; +m.maps = require("Storage").list(/openstmap\.\d+\.json/).map(f=>{ + let map = require("Storage").readJSON(f); + map.center = Bangle.project({lat:map.lat,lon:map.lon}); + return map; +}); +// we base our start position on the middle of the first map +m.map = m.maps[0]; +m.scale = m.map.scale; // current scale (based on first map) +m.lat = m.map.lat; // position of middle of screen +m.lon = m.map.lon; // position of middle of screen exports.draw = function() { - var img = require("Storage").read(map.fn); var cx = g.getWidth()/2; var cy = g.getHeight()/2; var p = Bangle.project({lat:m.lat,lon:m.lon}); - var ix = (p.x-map.center.x)/map.scale + (map.imgx/2) - cx; - var iy = (map.center.y-p.y)/map.scale + (map.imgy/2) - cy; - //console.log(ix,iy); - var tx = 0|(ix/map.tilesize); - var ty = 0|(iy/map.tilesize); - var ox = (tx*map.tilesize)-ix; - var oy = (ty*map.tilesize)-iy; - for (var x=ox,ttx=tx;x=0 && ttx=0 && tty { + var d = map.scale/m.scale; + var ix = (p.x-map.center.x)/m.scale + (map.imgx*d/2) - cx; + var iy = (map.center.y-p.y)/m.scale + (map.imgy*d/2) - cy; + var o = {}; + var s = map.tilesize; + if (d!=1) { // if the two are different, add scaling + s *= d; + o.scale = d; } + //console.log(ix,iy); + var tx = 0|(ix/s); + var ty = 0|(iy/s); + var ox = (tx*s)-ix; + var oy = (ty*s)-iy; + var img = require("Storage").read(map.fn); + // fix out of range so we don't have to iterate over them + if (tx<0) { + ox+=s*-tx; + tx=0; + } + if (ty<0) { + oy+=s*-ty; + ty=0; + } + var mx = g.getWidth(); + var my = g.getHeight(); + for (var x=ox,ttx=tx; x Date: Fri, 25 Nov 2022 16:08:26 +0000 Subject: [PATCH 060/342] agenda 0.08: Fix error in clkinfo (didn't require Storage & locale) --- apps/agenda/ChangeLog | 3 ++- apps/agenda/agenda.clkinfo.js | 48 +++++++++++++++++------------------ apps/agenda/metadata.json | 2 +- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index 0a7916810..bbde4d80b 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -4,4 +4,5 @@ 0.04: Added awareness of allDay field 0.05: Displaying calendar colour and name 0.06: Added clkinfo for clocks. -0.07: Clkinfo improvements. \ No newline at end of file +0.07: Clkinfo improvements. +0.08: Fix error in clkinfo (didn't require Storage & locale) diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index 6c2ddb3da..84da715b9 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -1,29 +1,29 @@ (function() { - var agendaItems = { - name: "Agenda", - img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="), - items: [] - }; + var agendaItems = { + name: "Agenda", + img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="), + items: [] + }; + var locale = require("locale"); + var now = new Date(); + var agenda = require("Storage").readJSON("android.calendar.json") + .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) + .sort((a,b)=>a.timestamp - b.timestamp); - var now = new Date(); - var agenda = storage.readJSON("android.calendar.json") - .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) - .sort((a,b)=>a.timestamp - b.timestamp); + agenda.forEach((entry, i) => { - agenda.forEach((entry, i) => { + var title = entry.title.slice(0,18); + var date = new Date(entry.timestamp*1000); + var dateStr = locale.date(date).replace(/\d\d\d\d/,""); + dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; - var title = entry.title.slice(0,18); - var date = new Date(entry.timestamp*1000); - var dateStr = locale.date(date).replace(/\d\d\d\d/,""); - dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; + agendaItems.items.push({ + name: null, + get: () => ({ text: title + "\n" + dateStr, img: null}), + show: function() { agendaItems.items[i].emit("redraw"); }, + hide: function () {} + }); + }); - agendaItems.items.push({ - name: null, - get: () => ({ text: title + "\n" + dateStr, img: null}), - show: function() { agendaItems.items[i].emit("redraw"); }, - hide: function () {} - }); - }); - - return agendaItems; -}) \ No newline at end of file + return agendaItems; +}) diff --git a/apps/agenda/metadata.json b/apps/agenda/metadata.json index 4436e143c..7e49e3f96 100644 --- a/apps/agenda/metadata.json +++ b/apps/agenda/metadata.json @@ -1,7 +1,7 @@ { "id": "agenda", "name": "Agenda", - "version": "0.07", + "version": "0.08", "description": "Simple agenda", "icon": "agenda.png", "screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}], From e5894c36af66a5e024d31525f202c4526afea1f9 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 16:08:40 +0000 Subject: [PATCH 061/342] oops - forgotten commit --- apps/openstmap/ChangeLog | 1 + apps/openstmap/app.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openstmap/ChangeLog b/apps/openstmap/ChangeLog index 4b8dd108c..7f22014ae 100644 --- a/apps/openstmap/ChangeLog +++ b/apps/openstmap/ChangeLog @@ -14,3 +14,4 @@ 0.13: Use a single image file with 'frames' of data (drastically reduces file count, possibility of >1 map on device) 0.14: Added ability to upload multiple sets of map tiles Support for zooming in on map + Satellite count moved to widget bar to leave more room for the map diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 99362d97b..9df4fa83f 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -11,11 +11,11 @@ function redraw() { m.draw(); drawMarker(); if (HASWIDGETS && WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { - g.flip().setColor("#f00"); // force immediate draw on double-buffered screens - track will update later + g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later WIDGETS["gpsrec"].plotTrack(m); } if (HASWIDGETS && WIDGETS["recorder"] && WIDGETS["recorder"].plotTrack) { - g.flip().setColor("#f00"); // force immediate draw on double-buffered screens - track will update later + g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later WIDGETS["recorder"].plotTrack(m); } g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); From 902db2a19a5a9a57112d497cc77213ff11ee3f55 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 16:08:52 +0000 Subject: [PATCH 062/342] recorder 0.18: Improve widget load speed, allow currently recording track to be plotted in openstmap --- apps/recorder/ChangeLog | 1 + apps/recorder/metadata.json | 2 +- apps/recorder/widget.js | 70 ++++++++++++++++++++++--------------- 3 files changed, 44 insertions(+), 29 deletions(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 1941a435b..2f6ec84f6 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -21,3 +21,4 @@ 0.15: Show distance more accurately in conjunction with new locale app (fix #1523) 0.16: Ability to append to existing track (fix #1712) 0.17: Use default Bangle formatter for booleans +0.18: Improve widget load speed, allow currently recording track to be plotted in openstmap diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index a7eb09cd5..9f8110cee 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.17", + "version": "0.18", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index cb42ac8ab..070675e05 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -1,10 +1,10 @@ -(() => { - var storageFile; // file for GPS track - var entriesWritten = 0; - var activeRecorders = []; - var writeInterval; +{ + let storageFile; // file for GPS track + let entriesWritten = 0; + let activeRecorders = []; + let writeInterval; - function loadSettings() { + let loadSettings = function() { var settings = require("Storage").readJSON("recorder.json",1)||{}; settings.period = settings.period||10; if (!settings.file || !settings.file.startsWith("recorder.log")) @@ -12,12 +12,12 @@ return settings; } - function updateSettings(settings) { + let updateSettings = function(settings) { require("Storage").writeJSON("recorder.json", settings); if (WIDGETS["recorder"]) WIDGETS["recorder"].reload(); } - function getRecorders() { + let getRecorders = function() { var recorders = { gps:function() { var lat = 0; @@ -159,7 +159,7 @@ return recorders; } - function writeLog() { + let writeLog = function() { entriesWritten++; WIDGETS["recorder"].draw(); try { @@ -178,7 +178,7 @@ } // Called by the GPS app to reload settings and decide what to do - function reload() { + let reload = function() { var settings = loadSettings(); if (writeInterval) clearInterval(writeInterval); writeInterval = undefined; @@ -224,7 +224,7 @@ // add the widget WIDGETS["recorder"]={area:"tl",width:0,draw:function() { if (!writeInterval) return; - g.reset(); g.drawImage(atob("DRSBAAGAHgDwAwAAA8B/D/hvx38zzh4w8A+AbgMwGYDMDGBjAA=="),this.x+1,this.y+2); + g.reset().drawImage(atob("DRSBAAGAHgDwAwAAA8B/D/hvx38zzh4w8A+AbgMwGYDMDGBjAA=="),this.x+1,this.y+2); activeRecorders.forEach((recorder,i)=>{ recorder.draw(this.x+15+(i>>1)*12, this.y+(i&1)*12); }); @@ -265,24 +265,38 @@ updateSettings(settings); WIDGETS["recorder"].reload(); return Promise.resolve(settings.recording); - }/*,plotTrack:function(m) { // m=instance of openstmap module - // FIXME - add track plotting - // if we're here, settings was already loaded - var f = require("Storage").open(settings.file,"r"); - var l = f.readLine(f); - if (l===undefined) return; - var c = l.split(","); - var mp = m.latLonToXY(+c[1], +c[2]); - g.moveTo(mp.x,mp.y); - l = f.readLine(f); - while(l!==undefined) { - c = l.split(","); - mp = m.latLonToXY(+c[1], +c[2]); - g.lineTo(mp.x,mp.y); - g.fillCircle(mp.x,mp.y,2); // make the track more visible + },plotTrack:function(m) { // m=instance of openstmap module + // Plots the current track in the currently set color + if (!activeRecorders) return; // not recording & not recording GPS + var settings = loadSettings(); + // keep function to draw track in RAM + function plot(g) { "ram"; + var f = require("Storage").open(settings.file,"r"); + var l = f.readLine(); + if (l===undefined) return; // empty file? + var mp, c = l.split(","); + var la=c.indexOf("Latitude"),lo=c.indexOf("Longitude"); + l = f.readLine(); + while (l && !c[la]) { + c = l.split(","); + l = f.readLine(f); + } + if (l===undefined) return; // empty file? + mp = m.latLonToXY(+c[la], +c[lo]); + g.moveTo(mp.x,mp.y); l = f.readLine(f); + var n = 200; // only plot first 200 points to keep things fast(ish) + while(l && n--) { + c = l.split(","); + if (c[la]) { + mp = m.latLonToXY(+c[la], +c[lo]); + g.lineTo(mp.x,mp.y); + } + l = f.readLine(f); + } } - }*/}; + plot(g); + }}; // load settings, set correct widget width reload(); -})() +} From 602689ed28fbe8866fae44b176a41307a137c11c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 16:26:38 +0000 Subject: [PATCH 063/342] Fix clkinfo icon --- apps/agenda/ChangeLog | 1 + apps/agenda/agenda.clkinfo.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index bbde4d80b..7f749ff25 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -6,3 +6,4 @@ 0.06: Added clkinfo for clocks. 0.07: Clkinfo improvements. 0.08: Fix error in clkinfo (didn't require Storage & locale) + Fix clkinfo icon diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index 84da715b9..baa8b9516 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -1,7 +1,7 @@ (function() { var agendaItems = { name: "Agenda", - img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="), + img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), items: [] }; var locale = require("locale"); @@ -12,13 +12,13 @@ agenda.forEach((entry, i) => { - var title = entry.title.slice(0,18); + var title = entry.title.slice(0,12); var date = new Date(entry.timestamp*1000); var dateStr = locale.date(date).replace(/\d\d\d\d/,""); dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; agendaItems.items.push({ - name: null, + name: "Agenda "+i, get: () => ({ text: title + "\n" + dateStr, img: null}), show: function() { agendaItems.items[i].emit("redraw"); }, hide: function () {} From 7bdafa281aa4309a49291ec9cb2e08728ba06aa1 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 16:27:42 +0000 Subject: [PATCH 064/342] clock_info images now optional --- apps/slopeclockpp/ChangeLog | 1 + apps/slopeclockpp/app.js | 10 +++++----- apps/slopeclockpp/metadata.json | 2 +- modules/clock_info.js | 15 ++++++++------- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/slopeclockpp/ChangeLog b/apps/slopeclockpp/ChangeLog index 1d28ea553..b5e455f78 100644 --- a/apps/slopeclockpp/ChangeLog +++ b/apps/slopeclockpp/ChangeLog @@ -4,3 +4,4 @@ 0.04: Changed to use clock_info for displayed data Made fonts smaller to avoid overlap when (eg) 22:00 Allowed black/white background (as that can look nice too) +0.05: Images in clkinfo are optional now diff --git a/apps/slopeclockpp/app.js b/apps/slopeclockpp/app.js index 99ef7272b..0f2416a4f 100644 --- a/apps/slopeclockpp/app.js +++ b/apps/slopeclockpp/app.js @@ -121,18 +121,18 @@ let animate = function(isIn, callback) { // clock info menus (scroll up/down for info) let clockInfoDraw = (itm, info, options) => { - let texty = options.y+26; + let texty = options.y+41; g.reset().setFont("6x15").setBgColor(options.bg).setColor(options.fg).clearRect(options.x, texty, options.x+options.w-2, texty+15); if (options.focus) g.setColor(options.hl); if (options.x < g.getWidth()/2) { // left align let x = options.x+2; - g.clearRect(x, options.y, x+23, options.y+23).drawImage(info.img, x, options.y); - g.setFontAlign(-1,-1).drawString(info.text, x,texty); + if (info.img) g.clearRect(x, options.y, x+23, options.y+23).drawImage(info.img, x, options.y); + g.setFontAlign(-1,1).drawString(info.text, x,texty); } else { // right align let x = options.x+options.w-3; - g.clearRect(x-23, options.y, x, options.y+23).drawImage(info.img, x-23, options.y); - g.setFontAlign(1,-1).drawString(info.text, x,texty); + if (info.img) g.clearRect(x-23, options.y, x, options.y+23).drawImage(info.img, x-23, options.y); + g.setFontAlign(1,1).drawString(info.text, x,texty); } }; let clockInfoItems = require("clock_info").load(); diff --git a/apps/slopeclockpp/metadata.json b/apps/slopeclockpp/metadata.json index 3100d8b50..b419ef898 100644 --- a/apps/slopeclockpp/metadata.json +++ b/apps/slopeclockpp/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockpp", "name": "Slope Clock ++", - "version":"0.04", + "version":"0.05", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], diff --git a/modules/clock_info.js b/modules/clock_info.js index 6f26f5c4b..cdd3c7520 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -15,7 +15,7 @@ Note that each item is an object with: { 'text' // the text to display for this item - 'img' // a 24x24px image to display for this item + 'img' // optional: a 24x24px image to display for this item 'v' // (if hasRange==true) a numerical value 'min','max' // (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage) } @@ -36,7 +36,8 @@ example.clkinfo.js : items: [ { name : "Item1", get : () => ({ text : "TextOfItem1", v : 10, min : 0, max : 100, - img : atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }), + img : atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") + }), show : () => {}, hide : () => {} // run : () => {} optional (called when tapped) @@ -139,8 +140,8 @@ let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { g.reset().clearRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1); if (options.focus) g.drawRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1); // show if focused var midx = options.x+options.w/2; - g.drawImage(info.img, midx-12,options.y+4); - g.setFont("6x8:2").setFontAlign(0,0).drawString(info.text, midx,options.y+36); + if (info.img) g.drawImage(info.img, midx-12,options.y+4); + g.setFont("6x8:2").setFontAlign(0,1).drawString(info.text, midx,options.y+44); } }); // then when clock 'unloads': @@ -166,8 +167,8 @@ let clockInfoDraw = (itm, info, options) => { g.reset().setBgColor(options.bg).setColor(options.fg).clearRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1); if (options.focus) g.drawRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1) var midx = options.x+options.w/2; - g.drawImage(info.img, midx-12,options.y); - g.setFont("6x15").setFontAlign(0,-1).drawString(info.text, midx,options.y+26); + if (info.img) g.drawImage(info.img, midx-12,options.y); + g.setFont("6x15").setFontAlign(0,1).drawString(info.text, midx,options.y+41); }; let clockInfoItems = require("clock_info").load(); let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:126, y:24, w:50, h:40, draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg }); @@ -225,7 +226,7 @@ exports.addInteractive = function(menu, options) { } else if (lr) { if (menu.length==1) return; // 1 item - can't move oldMenuItem = menu[options.menuA].items[options.menuB]; - options.menuA += ud; + options.menuA += lr; if (options.menuA<0) options.menuA = menu.length-1; if (options.menuA>=menu.length) options.menuA = 0; options.menuB = 0; From c0a89a375e38201e5c3c4274d97b2be0db527eb3 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 16:36:07 +0000 Subject: [PATCH 065/342] oops --- apps/slopeclockpp/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slopeclockpp/app.js b/apps/slopeclockpp/app.js index 0f2416a4f..013c25733 100644 --- a/apps/slopeclockpp/app.js +++ b/apps/slopeclockpp/app.js @@ -122,7 +122,7 @@ let animate = function(isIn, callback) { // clock info menus (scroll up/down for info) let clockInfoDraw = (itm, info, options) => { let texty = options.y+41; - g.reset().setFont("6x15").setBgColor(options.bg).setColor(options.fg).clearRect(options.x, texty, options.x+options.w-2, texty+15); + g.reset().setFont("6x15").setBgColor(options.bg).setColor(options.fg).clearRect(options.x, texty-15, options.x+options.w-2, texty); if (options.focus) g.setColor(options.hl); if (options.x < g.getWidth()/2) { // left align From fb0dcb82cd99e7a44b4e95e80d59a31c7ea2bee4 Mon Sep 17 00:00:00 2001 From: Kedlub Date: Fri, 25 Nov 2022 17:53:34 +0100 Subject: [PATCH 066/342] qcenter: Update description --- apps/qcenter/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index abef0fc36..96d8fa9f7 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -3,7 +3,7 @@ "name": "Quick Center", "shortName": "QCenter", "version": "0.01", - "description": "Shortcut app for quickly running your favorite apps", + "description": "An app for quickly launching your favourite apps, inspired by the control centres of other watches.", "icon": "app.png", "tags": "", "supports": ["BANGLEJS2"], From a9b12f0dbac0841509dfe525976d69cfa4d5ee9b Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 25 Nov 2022 17:05:30 +0000 Subject: [PATCH 067/342] misc fixes/tweaks for map rendering --- apps/openstmap/interface.html | 1 + apps/recorder/widget.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/openstmap/interface.html b/apps/openstmap/interface.html index 81406d807..e44474d63 100644 --- a/apps/openstmap/interface.html +++ b/apps/openstmap/interface.html @@ -250,6 +250,7 @@ TODO: options = { compression:false, output:"raw", mode:"3bit", + diffusion:"bayer2" }; /* If in 3 bit mode, go through all the data beforehand and turn the saturation up to maximum, so when thresholded it diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 070675e05..9d61cfee5 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -267,7 +267,7 @@ return Promise.resolve(settings.recording); },plotTrack:function(m) { // m=instance of openstmap module // Plots the current track in the currently set color - if (!activeRecorders) return; // not recording & not recording GPS + if (!activeRecorders.length) return; // not recording var settings = loadSettings(); // keep function to draw track in RAM function plot(g) { "ram"; @@ -276,6 +276,7 @@ if (l===undefined) return; // empty file? var mp, c = l.split(","); var la=c.indexOf("Latitude"),lo=c.indexOf("Longitude"); + if (la<0 || lb<0) return; // no GPS! l = f.readLine(); while (l && !c[la]) { c = l.split(","); From c8ee05a4b60fb573b20ce886efdbda405914e43c Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Thu, 11 Aug 2022 13:07:28 +0200 Subject: [PATCH 068/342] clkinfo: added sched and ranges in weather --- apps/sched/ChangeLog | 1 + apps/sched/clkinfo.js | 71 ++++++++++++++++++++++++++++++++++++++++ apps/sched/metadata.json | 5 +-- apps/weather/clkinfo.js | 16 +++++---- modules/clock_info.js | 11 ++++++- 5 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 apps/sched/clkinfo.js diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index f23cf93cb..3bb321ccf 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -14,3 +14,4 @@ Improve timer message using formatDuration Fix wrong fallback for buzz pattern 0.13: Ask to delete a timer after stopping it +0.14: Added clkinfo here diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js new file mode 100644 index 000000000..578089c1e --- /dev/null +++ b/apps/sched/clkinfo.js @@ -0,0 +1,71 @@ +(function() { + const alarm = require('sched'); + const iconAlarmOn = atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA=="); + const iconAlarmOff = + atob("GBjBAP////8AAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg="); + //atob("GBjBAP//AAAAAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg="); + + const iconTimerOn = + atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA="); + //atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA="); + const iconTimerOff = + atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg="); + //atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg="); + + //from 0 to max, the higher the closer to fire (as in a progress bar) + function getAlarmValue(a){ + let min = Math.round(alarm.getTimeToAlarm(a)/(60*1000)); + if(!min) return 0; //not active or more than a day + return getAlarmMax(a)-min; + } + + function getAlarmMax(a) { + if(a.timer) + return Math.round(a.timer/(60*1000)); + //minutes cannot be more than a full day + return 1440; + } + + function getAlarmIcon(a) { + if(a.on) { + if(a.timer) return iconTimerOn; + return iconAlarmOn; + } else { + if(a.timer) return iconTimerOff; + return iconAlarmOff; + } + } + + function getAlarmText(a){ + if(a.timer) { + if(!a.on) return "off"; + let time = Math.round(alarm.getTimeToAlarm(a)/(60*1000)); + if(time > 60) + time = Math.round(time / 60) + "h"; + else + time += "m"; + return time; + } + return require("time_utils").formatTime(a.t); + } + + var img = iconAlarmOn; + //get only alarms not created by other apps + var alarmItems = { + name: "Alarms", + img: img, + items: alarm.getAlarms().filter(a=>!a.appid) + .sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b)) + //.sort((a,b)=>getAlarmMinutes(a)-getAlarmMinutes(b)) + .map((a, i)=>({ + name: null, + get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a), + hasRange: true, v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), + show: function() { alarmItems.items[i].emit("redraw"); }, + hide: function () {}, + run: function() { } + })), + }; + + return alarmItems; +}) diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 163d2f552..4b38ee653 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.13", + "version": "0.14", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", @@ -13,7 +13,8 @@ {"name":"sched.js","url":"sched.js"}, {"name":"sched.img","url":"app-icon.js","evaluate":true}, {"name":"sched","url":"lib.js"}, - {"name":"sched.settings.js","url":"settings.js"} + {"name":"sched.settings.js","url":"settings.js"}, + {"name":"sched.clkinfo.js","url":"clkinfo.js"} ], "data": [{"name":"sched.json"}, {"name":"sched.settings.json"}] } diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index caaebf273..2d1966c82 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -5,34 +5,38 @@ wind: "?", }; - var weatherJson = storage.readJSON('weather.json'); + var weatherJson = require("Storage").readJSON('weather.json'); if(weatherJson !== undefined && weatherJson.weather !== undefined){ weather = weatherJson.weather; - weather.temp = locale.temp(weather.temp-273.15); + weather.temp = require("locale").temp(weather.temp-273.15); weather.hum = weather.hum + "%"; - weather.wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/); + weather.wind = require("locale").speed(weather.wind).match(/^(\D*\d*)(.*)$/); weather.wind = Math.round(weather.wind[1]) + "kph"; } + //FIXME ranges are somehow arbitrary var weatherItems = { name: "Weather", img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="), items: [ { name: "temperature", - get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA==")}), + get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), + hasRange: true, v: parseInt(weather.temp), min: -30, max: 55}), show: function() { weatherItems.items[0].emit("redraw"); }, hide: function () {} }, { name: "humidity", - get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A==")}), + get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), + hasRange: true, v: parseInt(weather.hum), min: 0, max: 100}), show: function() { weatherItems.items[1].emit("redraw"); }, hide: function () {} }, { name: "wind", - get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA==")}), + get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), + hasRange: true, v: parseInt(weather.wind), min: 0, max: 118}), show: function() { weatherItems.items[2].emit("redraw"); }, hide: function () {} }, diff --git a/modules/clock_info.js b/modules/clock_info.js index cdd3c7520..d2f1dea7c 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -48,6 +48,15 @@ example.clkinfo.js : */ +let storage = require("Storage"); +let stepGoal = undefined; +// Load step goal from health app and pedometer widget +let d = storage.readJSON("health.json", true) || {}; +stepGoal = d != undefined && d.settings != undefined ? d.settings.stepGoal : undefined; +if (stepGoal == undefined) { + d = storage.readJSON("wpedom.json", true) || {}; + stepGoal = d != undefined && d.settings != undefined ? d.settings.goal : 10000; +} exports.load = function() { // info used for drawing... @@ -81,7 +90,7 @@ exports.load = function() { { name : "Steps", hasRange : true, get : () => { let v = Bangle.getHealthStatus("day").steps; return { - text : v, v : v, min : 0, max : 10000, // TODO: do we have a target step amount anywhere? + text : v, v : v, min : 0, max : stepGoal, img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==") }}, show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); }, From 4ff8e9a52cefa526a52c81cf4f2599c46d01b60f Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Fri, 25 Nov 2022 08:59:07 +0100 Subject: [PATCH 069/342] Fixed sched clkinfo icons and sorting --- apps/sched/clkinfo.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js index 578089c1e..52f553988 100644 --- a/apps/sched/clkinfo.js +++ b/apps/sched/clkinfo.js @@ -1,16 +1,9 @@ (function() { const alarm = require('sched'); const iconAlarmOn = atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA=="); - const iconAlarmOff = - atob("GBjBAP////8AAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg="); - //atob("GBjBAP//AAAAAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg="); - - const iconTimerOn = - atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA="); - //atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA="); - const iconTimerOff = - atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg="); - //atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg="); + const iconAlarmOff = atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/nAB/mAB/geB/5/g/5tg/zAwfzhwPzhwHzAwB5tgAB/gAAeA=="); + const iconTimerOn = atob("GBiBAAAAAAAAAAAAAAf/4Af/4AGBgAGBgAGBgAD/AAD/AAB+AAA8AAA8AAB+AADnAADDAAGBgAGBgAGBgAf/4Af/4AAAAAAAAAAAAA=="); + const iconTimerOff = atob("GBiBAAAAAAAAAAAAAAf/4Af/4AGBgAGBgAGBgAD/AAD/AAB+AAA8AAA8AAB+AADkeADB/gGBtgGDAwGDhwfzhwfzAwABtgAB/gAAeA=="); //from 0 to max, the higher the closer to fire (as in a progress bar) function getAlarmValue(a){ @@ -49,14 +42,21 @@ return require("time_utils").formatTime(a.t); } + //workaround for sorting undefined values + function getAlarmOrder(a) { + let val = alarm.getTimeToAlarm(a); + if(typeof val == "undefined") return 86400*1000; + return val; + } + var img = iconAlarmOn; //get only alarms not created by other apps var alarmItems = { name: "Alarms", img: img, items: alarm.getAlarms().filter(a=>!a.appid) - .sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b)) - //.sort((a,b)=>getAlarmMinutes(a)-getAlarmMinutes(b)) + //.sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b)) + .sort((a,b)=>getAlarmOrder(a)-getAlarmOrder(b)) .map((a, i)=>({ name: null, get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a), From 18d91bf5f95d02014c52a40a53a2c79d06bfd81a Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Fri, 25 Nov 2022 18:28:20 +0100 Subject: [PATCH 070/342] Added short field and general clkinfo improvements --- apps/agenda/ChangeLog | 1 + apps/agenda/agenda.clkinfo.js | 29 +++++++++++++++++++---------- apps/sched/ChangeLog | 2 +- apps/sched/clkinfo.js | 4 +++- apps/weather/ChangeLog | 3 ++- apps/weather/clkinfo.js | 9 ++++++--- apps/weather/metadata.json | 2 +- modules/clock_info.js | 3 ++- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index 7f749ff25..6384fe887 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -7,3 +7,4 @@ 0.07: Clkinfo improvements. 0.08: Fix error in clkinfo (didn't require Storage & locale) Fix clkinfo icon +0.09: Clkinfo new fields and filter past events. diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index baa8b9516..43b7cf57e 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -1,25 +1,34 @@ (function() { var agendaItems = { - name: "Agenda", - img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), - items: [] - }; + name: "Agenda", + img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), + dynamic: true, + items: [] + }; + var storage = require("Storage"); var locale = require("locale"); var now = new Date(); - var agenda = require("Storage").readJSON("android.calendar.json") - .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) - .sort((a,b)=>a.timestamp - b.timestamp); + var agenda = (storage.readJSON("android.calendar.json",true)||[]) + .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) + .sort((a,b)=>a.timestamp - b.timestamp); + var settings = storage.readJSON("agenda.settings.json",true)||{}; agenda.forEach((entry, i) => { - var title = entry.title.slice(0,12); var date = new Date(entry.timestamp*1000); var dateStr = locale.date(date).replace(/\d\d\d\d/,""); + var dateStrToday = locale.date(new Date()).replace(/\d\d\d\d/,""); + var timeStr = locale.time(date); + //maybe not the most efficient.. + var shortTxt = (dateStrToday == dateStr) ? timeStr : dateStr; dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; + if(!settings.pastEvents && entry.timestamp + entry.durationInSeconds < (new Date())/1000) + return; + agendaItems.items.push({ - name: "Agenda "+i, - get: () => ({ text: title + "\n" + dateStr, img: null}), + name: null, + get: () => ({ text: title + "\n" + dateStr, short: shortTxt, img: null}), show: function() { agendaItems.items[i].emit("redraw"); }, hide: function () {} }); diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 3bb321ccf..f2dd54338 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -14,4 +14,4 @@ Improve timer message using formatDuration Fix wrong fallback for buzz pattern 0.13: Ask to delete a timer after stopping it -0.14: Added clkinfo here +0.14: Added clkinfo for alarms and timers diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js index 52f553988..71992dbb8 100644 --- a/apps/sched/clkinfo.js +++ b/apps/sched/clkinfo.js @@ -54,13 +54,15 @@ var alarmItems = { name: "Alarms", img: img, + dynamic: true, items: alarm.getAlarms().filter(a=>!a.appid) //.sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b)) .sort((a,b)=>getAlarmOrder(a)-getAlarmOrder(b)) .map((a, i)=>({ name: null, + hasRange: true, get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a), - hasRange: true, v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), + v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), show: function() { alarmItems.items[i].emit("redraw"); }, hide: function () {}, run: function() { } diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index da28d8d5a..b11ed24ff 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -13,4 +13,5 @@ 0.14: Use weather condition code for icon selection 0.15: Fix widget icon 0.16: Don't mark app as clock -0.17: Added clkinfo for clocks. \ No newline at end of file +0.17: Added clkinfo for clocks. +0.18: Added hasRange to clkinfo. diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 2d1966c82..6191c6dbe 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -21,22 +21,25 @@ items: [ { name: "temperature", + hasRange : true, get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), - hasRange: true, v: parseInt(weather.temp), min: -30, max: 55}), + v: parseInt(weather.temp), min: -30, max: 55}), show: function() { weatherItems.items[0].emit("redraw"); }, hide: function () {} }, { name: "humidity", + hasRange : true, get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), - hasRange: true, v: parseInt(weather.hum), min: 0, max: 100}), + v: parseInt(weather.hum), min: 0, max: 100}), show: function() { weatherItems.items[1].emit("redraw"); }, hide: function () {} }, { name: "wind", + hasRange : true, get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), - hasRange: true, v: parseInt(weather.wind), min: 0, max: 118}), + v: parseInt(weather.wind), min: 0, max: 118}), show: function() { weatherItems.items[2].emit("redraw"); }, hide: function () {} }, diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index e28a282d6..4a8751302 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.17", + "version": "0.18", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], diff --git a/modules/clock_info.js b/modules/clock_info.js index d2f1dea7c..238888b1c 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -2,9 +2,9 @@ that can be scrolled through on the clock face. `load()` returns an array of menu objects, where each object contains a list of menu items: - * `name` : text to display and identify menu object (e.g. weather) * `img` : a 24x24px image +* `dynamic` : if `true`, items are not constant but are sorted (e.g. calendar events sorted by date) * `items` : menu items such as temperature, humidity, wind etc. Note that each item is an object with: @@ -15,6 +15,7 @@ Note that each item is an object with: { 'text' // the text to display for this item + 'short' : (optional) a shorter text to display for this item (at most 6 characters) 'img' // optional: a 24x24px image to display for this item 'v' // (if hasRange==true) a numerical value 'min','max' // (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage) From 93c2429bf57aeb3a16c3212982a97efaab359d01 Mon Sep 17 00:00:00 2001 From: eyecreate Date: Fri, 25 Nov 2022 12:51:08 -0500 Subject: [PATCH 071/342] Add locale time support to watch --- apps/slopeclockpp/app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/slopeclockpp/app.js b/apps/slopeclockpp/app.js index 013c25733..bf719344e 100644 --- a/apps/slopeclockpp/app.js +++ b/apps/slopeclockpp/app.js @@ -51,8 +51,9 @@ let draw = function() { x = R.w / 2; y = R.y + R.h / 2 - 12; // 12 = room for date var date = new Date(); - var hourStr = date.getHours(); - var minStr = date.getMinutes().toString().padStart(2,0); + var local_time = require("locale").time(date, 1); + var hourStr = local_time.split(":")[0].trim().padStart(2,'0'); + var minStr = local_time.split(":")[1].trim().padStart(2, '0'); dateStr = require("locale").dow(date, 1).toUpperCase()+ " "+ require("locale").date(date, 0).toUpperCase(); From ebc2091c2994e8aea228da0a2e379258e74103d8 Mon Sep 17 00:00:00 2001 From: eyecreate Date: Fri, 25 Nov 2022 12:52:13 -0500 Subject: [PATCH 072/342] Update metadata --- apps/slopeclockpp/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slopeclockpp/metadata.json b/apps/slopeclockpp/metadata.json index b419ef898..bebed4b71 100644 --- a/apps/slopeclockpp/metadata.json +++ b/apps/slopeclockpp/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockpp", "name": "Slope Clock ++", - "version":"0.05", + "version":"0.06", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 58fbe0455eb4ae11e038ed534a2da3b5e71e665d Mon Sep 17 00:00:00 2001 From: eyecreate Date: Fri, 25 Nov 2022 12:52:37 -0500 Subject: [PATCH 073/342] Update ChangeLog --- apps/slopeclockpp/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/slopeclockpp/ChangeLog b/apps/slopeclockpp/ChangeLog index b5e455f78..9ae4ccc96 100644 --- a/apps/slopeclockpp/ChangeLog +++ b/apps/slopeclockpp/ChangeLog @@ -5,3 +5,4 @@ Made fonts smaller to avoid overlap when (eg) 22:00 Allowed black/white background (as that can look nice too) 0.05: Images in clkinfo are optional now +0.06: Added support for locale based time From e35f3a26bb629c61b8da535a3e8e369ed1616acf Mon Sep 17 00:00:00 2001 From: Kedlub Date: Fri, 25 Nov 2022 21:37:54 +0100 Subject: [PATCH 074/342] qcenter: Add padding --- apps/qcenter/app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js index 876d4aba9..1530cc5fb 100644 --- a/apps/qcenter/app.js +++ b/apps/qcenter/app.js @@ -81,9 +81,10 @@ var layoutContent = [ { type: "h", pad: 5, + fillx: 1, c: [ - { type: "txt", font: "8x12", scale: 2, label: E.getBattery() + "%" }, - { type: "txt", font: "8x12", scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") }, + { type: "txt", font: "8x12", pad: 3, scale: 2, label: E.getBattery() + "%" }, + { type: "txt", font: "8x12", pad: 3, scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") }, ], }, ]; From 21e9fc1e24b3d4d6fca04829ddfb105b6dfa0f41 Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Fri, 25 Nov 2022 20:06:29 -0500 Subject: [PATCH 075/342] Add tetris app, first commit --- apps/tetris/README.md | 8 ++ apps/tetris/app-icon.js | 1 + apps/tetris/metadata.json | 14 ++++ apps/tetris/tetris.app.js | 170 ++++++++++++++++++++++++++++++++++++++ apps/tetris/tetris.png | Bin 0 -> 492 bytes 5 files changed, 193 insertions(+) create mode 100644 apps/tetris/README.md create mode 100644 apps/tetris/app-icon.js create mode 100644 apps/tetris/metadata.json create mode 100644 apps/tetris/tetris.app.js create mode 100644 apps/tetris/tetris.png diff --git a/apps/tetris/README.md b/apps/tetris/README.md new file mode 100644 index 000000000..2c41657f4 --- /dev/null +++ b/apps/tetris/README.md @@ -0,0 +1,8 @@ +# Tetris + +Bangle version of the classic game of Tetris. + +## Controls + +Tapping the screen rotates the pieces once, swiping left, right or down moves the +piece in that direction, if possible. \ No newline at end of file diff --git a/apps/tetris/app-icon.js b/apps/tetris/app-icon.js new file mode 100644 index 000000000..b87ef84f4 --- /dev/null +++ b/apps/tetris/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+If4A/AH4A/AH4A/ABe5AA0jABwvYAIovBgABEFAQHFL7IuEL4QuFA45fcF4YuNL7i/FFwoHHL7QvFFxpfaF4wAOF/4nHF5+0AAy3SXYoHGW4QBDF4MAAIgvRFwwHHdAbqDFIQuDL6ouJL4ovDFwpfUAAoHFL4a/FFwhfTFxZfDF4ouFL6QANFopfDF/4vNjwAGF8ABFF4MAAIgvBX4IBDX4YBDL6TyFFIIuEL4QuEL4QuEL6ovDFwpfFF4YuFL6i/FFwhfEX4ouEL6YvFFwpfDF4ouFL6QvGAAwtFL4Yv/AAonHAB4vHG563CAIbuDA5i/CAIb2DA4hfJEwoHPFApZEGwpfLFyJfFFxJfMAAoHNFAa5GX54uTL4YuLL5QAVFowAIF+4A/AH4A/AH4A/AHY")) diff --git a/apps/tetris/metadata.json b/apps/tetris/metadata.json new file mode 100644 index 000000000..778e55c24 --- /dev/null +++ b/apps/tetris/metadata.json @@ -0,0 +1,14 @@ +{ "id": "tetris", + "name": "Tetris", + "shortName":"Tetris", + "version":"0.01", + "description": "Tetris", + "icon": "tetris.png", + "readme": "README.md", + "tags": "games", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"tetris.app.js","url":"app.js"}, + {"name":"tetris.img","url":"app-icon.js","evaluate":true}, + ] +} diff --git a/apps/tetris/tetris.app.js b/apps/tetris/tetris.app.js new file mode 100644 index 000000000..e24a731a9 --- /dev/null +++ b/apps/tetris/tetris.app.js @@ -0,0 +1,170 @@ +const block = Graphics.createImage(` +######## +# # # ## +## # ### +# # #### +## ##### +# ###### +######## +######## +`); +const tcols = [ {r:0, g:0, b:1}, {r:0, g:1, b:0}, {r:0, g:1, b:1}, {r:1, g:0, b:0}, {r:1, g:0, b:1}, {r:1, g:1, b:0}, {r:1, g:0.5, b:0.5} ]; +const tiles = [ + [[0, 0, 0, 0], + [0, 0, 0, 0], + [1, 1, 1, 1], + [0, 0, 0, 0]], + [[0, 0, 0], + [0, 1, 0], + [1, 1, 1]], + [[0, 0, 0], + [1, 0, 0], + [1, 1, 1]], + [[0, 0, 0], + [0, 0, 1], + [1, 1, 1]], + [[0, 0, 0], + [1, 1, 0], + [0, 1, 1]], + [[0, 0, 0], + [0, 1, 1], + [1, 1, 0]], + [[1, 1], + [1, 1]] +]; + +const ox = 176/2 - 5*8; +const oy = 8; + +var pf = Array(23).fill().map(()=>Array(12).fill(0)); // field is really 10x20, but adding a border for collision checks +pf[20].fill(1); +pf[21].fill(1); +pf[22].fill(1); +pf.forEach((x,i) => { pf[i][0] = 1; pf[i][11] = 1; }); + +function rotateTile(t, r) { + var nt = JSON.parse(JSON.stringify(t)); + if (t.length==2) return nt; + var s = t.length; + for (m=0; m0) + if (qClear) g.fillRect(x+8*i, y+8*j, x+8*(i+1)-1, y+8*(j+1)-1); + else g.drawImage(block, x+8*i, y+8*j); +} + +function showNext(n, r) { + var nt = rotateTile(tiles[n], r); + g.setColor(0).fillRect(176-33, 40, 176-33+33, 82); + drawTile(nt, ntn, 176-33, 40); +} + +var time = Date.now(); +var px=4, py=0; +var ctn = Math.floor(Math.random()*7); // current tile number +var ntn = Math.floor(Math.random()*7); // next tile number +var ntr = Math.floor(Math.random()*4); // next tile rotation +var ct = rotateTile(tiles[ctn], Math.floor(Math.random()*4)); // current tile (rotated) +var dropInterval = 450; +var nlines = 0; + +function redrawPF(ly) { + for (y=0; y<=ly; ++y) + for (x=1; x<11; ++x) { + c = pf[y][x]; + if (c>0) g.setColor(tcols[c-1].r, tcols[c-1].g, tcols[c-1].b).drawImage(block, ox+(x-1)*8, oy+y*8); + else g.setColor(0, 0, 0).fillRect(ox+(x-1)*8, oy+y*8, ox+x*8-1, oy+(y+1)*8-1); + } +} + +function insertAndCheck() { + for (y=0; y0) pf[py+y][px+x+1] = ctn+1; + // check for full lines + for (y=19; y>0; y--) { + var qFull = true; + for (x=1; x<11; ++x) qFull &= pf[y][x]>0; + if (qFull) { + nlines++; + dropInterval -= 5; + Bangle.buzz(30); + for (ny=y; ny>0; ny--) pf[ny] = JSON.parse(JSON.stringify(pf[ny-1])); + redrawPF(y); + g.setColor(0).fillRect(5, 30, 41, 80).setColor(1, 1, 1).drawString(nlines.toString(), 22, 50); + } + } + // spawn new tile + px = 4; py = 0; + ctn = ntn; + ntn = Math.floor(Math.random()*7); + ct = rotateTile(tiles[ctn], ntr); + ntr = Math.floor(Math.random()*4); + showNext(ntn, ntr); +} + +function moveOk(t, dx, dy) { + var ok = true; + for (y=0; y 0) ok = false; + return ok; +} + +function gameStep() { + if (Date.now()-time > dropInterval) { // drop one step + time = Date.now(); + if (moveOk(ct, 0, 1)) { + drawTile(ct, ctn, ox+px*8, oy+py*8, true); + py++; + } + else { // reached the bottom + insertAndCheck(ct, ctn, px, py); + } + drawTile(ct, ctn, ox+px*8, oy+py*8, false); + } +} + +Bangle.setUI(); +Bangle.on("touch", (e) => { + t = rotateTile(ct, 3); + if (moveOk(t, 0, 0)) { + drawTile(ct, ctn, ox+px*8, oy+py*8, true); + ct = t; + drawTile(ct, ctn, ox+px*8, oy+py*8, false); + } +}); + +Bangle.on("swipe", (x,y) => { + if (y<0) y = 0; + if (moveOk(ct, x, y)) { + drawTile(ct, ctn, ox+px*8, oy+py*8, true); + px += x; + py += y; + drawTile(ct, ctn, ox+px*8, oy+py*8, false); + } +}); + +drawBoundingBox(); +g.setColor(1, 1, 1).setFontAlign(0, 1, 0).setFont("6x15", 1).drawString("Lines", 22, 30).drawString("Next", 176-22, 30); +showNext(ntn, ntr); +g.setColor(0).fillRect(5, 30, 41, 80).setColor(1, 1, 1).drawString(nlines.toString(), 22, 50); +var gi = setInterval(gameStep, 20); diff --git a/apps/tetris/tetris.png b/apps/tetris/tetris.png new file mode 100644 index 0000000000000000000000000000000000000000..8e884eaf35c9bfa6103591255bba423228c12192 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq8r{zDi(Vu$sZZAYL$MSD+10LMXr|#1%;Y0Kz{%egIj2 z82zm0Xkxq!^40jEr;*4RsAoLkvx=jEt=e%(V>+tPBihXXOZ> dXvob^$xN%nt>KmVl{G*O44$rjF6*2UngE)~sv`gZ literal 0 HcmV?d00001 From 5a1c701adde86a7de92e81ef8a426648b29f7218 Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Fri, 25 Nov 2022 20:24:30 -0500 Subject: [PATCH 076/342] Fix metadata typo --- apps/tetris/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tetris/metadata.json b/apps/tetris/metadata.json index 778e55c24..374f97ac8 100644 --- a/apps/tetris/metadata.json +++ b/apps/tetris/metadata.json @@ -9,6 +9,6 @@ "supports" : ["BANGLEJS2"], "storage": [ {"name":"tetris.app.js","url":"app.js"}, - {"name":"tetris.img","url":"app-icon.js","evaluate":true}, + {"name":"tetris.img","url":"app-icon.js","evaluate":true} ] } From 43fdeecdb105ceaa559d1cc66919f5306340e94a Mon Sep 17 00:00:00 2001 From: "Marko.Kl.Berkenbusch@gmail.com" Date: Fri, 25 Nov 2022 20:27:44 -0500 Subject: [PATCH 077/342] Another mistake in metadata --- apps/tetris/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tetris/metadata.json b/apps/tetris/metadata.json index 374f97ac8..5669d8953 100644 --- a/apps/tetris/metadata.json +++ b/apps/tetris/metadata.json @@ -8,7 +8,7 @@ "tags": "games", "supports" : ["BANGLEJS2"], "storage": [ - {"name":"tetris.app.js","url":"app.js"}, + {"name":"tetris.app.js","url":"tetris.app.js"}, {"name":"tetris.img","url":"app-icon.js","evaluate":true} ] } From 2a506e7421f2320ba65afcadeb9d3458a8958dd1 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 20 Nov 2022 15:41:02 +0100 Subject: [PATCH 078/342] messages: split library/gui/widget into separate apps --- apps/android/ChangeLog | 1 + apps/android/metadata.json | 4 +- apps/android/settings.js | 2 +- apps/hcclock/ChangeLog | 3 +- apps/hcclock/hcclock.app.js | 2 +- apps/hcclock/metadata.json | 2 +- apps/ios/ChangeLog | 1 + apps/ios/app.js | 2 +- apps/ios/metadata.json | 4 +- apps/messagegui/ChangeLog | 79 +++++ apps/messagegui/README.md | 68 +++++ apps/{messages => messagegui}/app-icon.js | 0 .../app-newmessage.js | 4 +- apps/{messages => messagegui}/app.js | 25 +- apps/messagegui/app.png | Bin 0 -> 917 bytes apps/messagegui/boot.js | 3 + apps/messagegui/lib.js | 60 ++++ apps/messagegui/metadata.json | 22 ++ apps/{messages => messagegui}/screenshot.png | Bin apps/messages/ChangeLog | 78 +---- apps/messages/README.md | 89 ++---- apps/messages/lib.js | 283 +++++++++++------- apps/messages/metadata.json | 21 +- apps/messages/widget.js | 56 ---- apps/messagesmusic/ChangeLog | 1 + apps/messagesmusic/README.md | 6 - apps/messagesmusic/app.js | 15 +- apps/messagesmusic/metadata.json | 4 +- apps/widmessages/ChangeLog | 1 + apps/widmessages/README.md | 30 ++ apps/widmessages/app.png | Bin 0 -> 917 bytes apps/widmessages/lib.js | 8 + apps/widmessages/metadata.json | 18 ++ .../screenshot.gif} | Bin apps/widmessages/widget.js | 73 +++++ apps/widmsggrid/ChangeLog | 1 + apps/widmsggrid/README.md | 6 +- apps/widmsggrid/lib.js | 8 + apps/widmsggrid/metadata.json | 9 +- apps/widmsggrid/widget.js | 19 +- bin/sanitycheck.js | 3 +- 41 files changed, 642 insertions(+), 369 deletions(-) create mode 100644 apps/messagegui/ChangeLog create mode 100644 apps/messagegui/README.md rename apps/{messages => messagegui}/app-icon.js (100%) rename apps/{messages => messagegui}/app-newmessage.js (50%) rename apps/{messages => messagegui}/app.js (96%) create mode 100644 apps/messagegui/app.png create mode 100644 apps/messagegui/boot.js create mode 100644 apps/messagegui/lib.js create mode 100644 apps/messagegui/metadata.json rename apps/{messages => messagegui}/screenshot.png (100%) delete mode 100644 apps/messages/widget.js create mode 100644 apps/widmessages/ChangeLog create mode 100644 apps/widmessages/README.md create mode 100644 apps/widmessages/app.png create mode 100644 apps/widmessages/lib.js create mode 100644 apps/widmessages/metadata.json rename apps/{messages/screenshot-notify.gif => widmessages/screenshot.gif} (100%) create mode 100644 apps/widmessages/widget.js create mode 100644 apps/widmsggrid/lib.js diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index fcb139c94..f75638265 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -15,3 +15,4 @@ 0.15: Allow method/body/headers to be specified for `http` (needs Gadgetbridge 0.68.0b or later) 0.16: Bangle.http now fails immediately if there is no Bluetooth connection (fix #2152) 0.17: Now kick off Calendar sync as soon as connected to Gadgetbridge +0.18: Use new message library diff --git a/apps/android/metadata.json b/apps/android/metadata.json index ac47449d6..45c08a75a 100644 --- a/apps/android/metadata.json +++ b/apps/android/metadata.json @@ -2,11 +2,11 @@ "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.17", + "version": "0.18", "description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.", "icon": "app.png", "tags": "tool,system,messages,notifications,gadgetbridge", - "dependencies": {"messages":"app"}, + "dependencies": {"messages":"module"}, "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/android/settings.js b/apps/android/settings.js index c7c34a76f..aede4b413 100644 --- a/apps/android/settings.js +++ b/apps/android/settings.js @@ -23,7 +23,7 @@ updateSettings(); } }, - /*LANG*/"Messages" : ()=>load("messages.app.js"), + /*LANG*/"Messages" : ()=>require("message").openGUI(), }; E.showMenu(mainmenu); }) diff --git a/apps/hcclock/ChangeLog b/apps/hcclock/ChangeLog index 289c7ac2d..e2eb18be3 100644 --- a/apps/hcclock/ChangeLog +++ b/apps/hcclock/ChangeLog @@ -1,4 +1,5 @@ 0.01: Base code 0.02: Saved settings when switching color scheme 0.03: Added Button 3 opening messages (if app is installed) -0.04: Use `messages` library to check for new messages \ No newline at end of file +0.04: Use `messages` library to check for new messages +0.05: Use `messages` library to open message GUI \ No newline at end of file diff --git a/apps/hcclock/hcclock.app.js b/apps/hcclock/hcclock.app.js index 9558c052b..f12a4733e 100644 --- a/apps/hcclock/hcclock.app.js +++ b/apps/hcclock/hcclock.app.js @@ -234,7 +234,7 @@ function handleMessages() { if(!hasMessages()) return; E.showMessage("Loading Messages..."); - load("messages.app.js"); + require("messages").openGUI(); } function hasMessages() diff --git a/apps/hcclock/metadata.json b/apps/hcclock/metadata.json index b8f8c14b9..407114e25 100644 --- a/apps/hcclock/metadata.json +++ b/apps/hcclock/metadata.json @@ -1,7 +1,7 @@ { "id": "hcclock", "name": "Hi-Contrast Clock", - "version": "0.04", + "version": "0.05", "description": "Hi-Contrast Clock : A simple yet very bold clock that aims to be readable in high luninosity environments. Uses big 10x5 pixel digits. Use BTN 1 to switch background and foreground colors.", "icon": "hcclock-icon.png", "type": "clock", diff --git a/apps/ios/ChangeLog b/apps/ios/ChangeLog index 85aafb34f..5763801f5 100644 --- a/apps/ios/ChangeLog +++ b/apps/ios/ChangeLog @@ -9,3 +9,4 @@ 0.09: Enable 'ams' on new firmwares (ams/ancs can now be enabled individually) (fix #1365) 0.10: Added more bundleIds 0.11: Added letters with caron to unicodeRemap, to properly display messages in Czech language +0.12: Use new message library diff --git a/apps/ios/app.js b/apps/ios/app.js index b210886fd..2a9e8f322 100644 --- a/apps/ios/app.js +++ b/apps/ios/app.js @@ -1,2 +1,2 @@ // Config app not implemented yet -setTimeout(()=>load("messages.app.js"),10); +setTimeout(()=>require("messages").openGUI(),10); diff --git a/apps/ios/metadata.json b/apps/ios/metadata.json index a26d22cb1..5042ff1c0 100644 --- a/apps/ios/metadata.json +++ b/apps/ios/metadata.json @@ -1,11 +1,11 @@ { "id": "ios", "name": "iOS Integration", - "version": "0.11", + "version": "0.12", "description": "Display notifications/music/etc from iOS devices", "icon": "app.png", "tags": "tool,system,ios,apple,messages,notifications", - "dependencies": {"messages":"app"}, + "dependencies": {"messages":"module"}, "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog new file mode 100644 index 000000000..3dcb20fe8 --- /dev/null +++ b/apps/messagegui/ChangeLog @@ -0,0 +1,79 @@ +0.01: New App! +0.02: Add 'messages' library +0.03: Fixes for Bangle.js 1 +0.04: Add require("messages").clearAll() +0.05: Handling of message actions (ok/clear) +0.06: New messages now go at the start (fix #898) + Answering true/false now exits the messages app if no new messages + Back now marks a message as read + Clicking top-left opens a menu which allows you to delete a message or mark unread +0.07: Added settings menu with option to choose vibrate pattern and frequency (fix #909) +0.08: Fix rendering of long messages (fix #969) + buzz on new message (fix #999) +0.09: Message now disappears after 60s if no action taken and clock loads (fix 922) + Fix phone icon (#1014) +0.10: Respect the 'new' attribute if it was set from iOS integrations +0.11: Open app when touching the widget (Bangle.js 2 only) +0.12: Extra app-specific notification icons + New animated notification icon (instead of large blinking 'MESSAGES') + Added screenshots +0.13: Add /*LANG*/ comments for internationalisation + Add 'Delete All' option to message options + Now update correctly when 'require("messages").clearAll()' is called +0.14: Hide widget when all unread notifications are dismissed from phone +0.15: Don't buzz when Quiet Mode is active +0.16: Fix text wrapping so it fits the screen even if title is big (fix #1147) +0.17: Fix: Get dynamic dimensions of notify icon, fixed notification font +0.18: Use app-specific icon colors + Spread message action buttons out + Back button now goes back to list of messages + If showMessage called with no message (eg all messages deleted) now return to the clock (fix #1267) +0.19: Use a larger font for message text if it'll fit +0.20: Allow tapping on the body to show a scrollable view of the message and title in a bigger font (fix #1405, #1031) +0.21: Improve list readability on dark theme +0.22: Add Home Assistant icon + Allow repeat to be switched Off, so there is no buzzing repetition. + Also gave the widget a pixel more room to the right +0.23: Change message colors to match current theme instead of using green + Now attempt to use Large/Big/Medium fonts, and allow minimum font size to be configured +0.24: Remove left-over debug statement +0.25: Fix widget memory usage issues if message received and watch repeatedly calls Bangle.drawWidgets (fix #1550) +0.26: Setting to auto-open music +0.27: Add 'mark all read' option to popup menu (fix #1624) +0.28: Option to auto-unlock the watch when a new message arrives +0.29: Fix message list overwrites on Bangle.js 1 (fix #1642) +0.30: Add new Icons (Youtube, Twitch, MS TODO, Teams, Snapchat, Signal, Post & DHL, Nina, Lieferando, Kalender, Discord, Corona Warn, Bibel) +0.31: Option to disable icon flashing +0.32: Added an option to allow quiet mode to override message auto-open +0.33: Timeout from the message list screen if the message being displayed is removed and there is a timer going +0.34: Don't buzz for 'map' update messages +0.35: Reset graphics colors before rendering a message (possibly fix #1752) +0.36: Ensure a new message plus an almost immediate deletion of that message doesn't load the messages app (fix #1362) +0.37: Now use the setUI 'back' icon in the top left rather than specific buttons/menu items +0.38: Add telegram foss handling +0.39: Set default color for message icons according to theme +0.40: Use default Bangle formatter for booleans +0.41: Add notification icons in the widget +0.42: Fix messages ignoring "Vibrate: Off" setting +0.43: Add new Icons (Airbnb, warnwetter) +0.44: Separate buzz pattern for incoming calls +0.45: Added new app colors and icons +0.46: Add 'Vibrate Timer' option to set how long to vibrate for, and fix Repeat:off + Fix message removal from widget bar (previously caused exception as .hide has been removed) +0.47: Add new Icons (Nextbike, Mattermost, etc.) +0.48: When getting new message from the clock, only buzz once the messages app is loaded +0.49: Change messages icon (to fit within 24px) and ensure widget renders icons centrally +0.50: Add `getMessages` and `status` functions to library + Option to disable auto-open of messages + Option to make message icons monochrome (not colored) + messages widget buzz now returns a promise +0.51: Emit "message events" + Setting to hide widget + Add custom event handlers to prevent default app form loading + Move WIDGETS.messages.buzz() to require("messages").buzz() +0.52: Fix require("messages").buzz() regression + Fix background color in messages list after one unread message is shown +0.53: Messages now uses Bangle.load() to load messages app faster (if possible) +0.54: Move icons out to messageicons module +0.55: Rename to messagegui, move global message handling library to message module + Move widget to widmessage diff --git a/apps/messagegui/README.md b/apps/messagegui/README.md new file mode 100644 index 000000000..699588e1b --- /dev/null +++ b/apps/messagegui/README.md @@ -0,0 +1,68 @@ +# Messages app + +Default app to handle the display of messages and message notifications. It allows +them to be listed, viewed, and responded to. +It is installed automatically if you install `Android Integration` or `iOS Integration`. + +It is a replacement for the old `notify`/`gadgetbridge` apps. + + +## Settings + +You can change settings by going to the global `Settings` app, then `App Settings` +and `Messages`: + +* `Vibrate` - This is the pattern of buzzes that should be made when a new message is received +* `Vibrate for calls` - This is the pattern of buzzes that should be made when an incoming call is received +* `Repeat` - How often should buzzes repeat - the default of 4 means the Bangle will buzz every 4 seconds +* `Vibrate Timer` - When a new message is received when in a non-clock app, we display the message icon and +buzz every `Repeat` seconds. This is how long we continue to do that. +* `Unread Timer` - When a new message is received when showing the clock we go into the Messages app. +If there is no user input for this amount of time then the app will exit and return +to the clock where a ringing bell will be shown in the Widget bar. +* `Min Font` - The minimum font size used when displaying messages on the screen. A bigger font +is chosen if there isn't much message text, but this specifies the smallest the font should get before +it starts getting clipped. +* `Auto-Open Music` - Should the app automatically open when the phone starts playing music? +* `Unlock Watch` - Should the app unlock the watch when a new message arrives, so you can touch the buttons at the bottom of the app? + +## New Messages + +When a new message is received: + +* If you're in an app, the Bangle will buzz and a message icon appears in the Widget bar. You can tap this icon to view the message. +* If you're in a clock, the Messages app will automatically start and show the message + +When a message is shown, you'll see a screen showing the message title and text. + +* The 'back-arrow' button (or physical button on Bangle.js 2) goes back to Messages, marking the current message as read. +* The top-left icon shows more options, for instance deleting the message of marking unread +* On Bangle.js 2 you can tap on the message body to view a scrollable version of the title and text (or can use the top-left icon + `View Message`) +* If shown, the 'tick' button: + * **Android** opens the notification on the phone + * **iOS** responds positively to the notification (accept call/etc) +* If shown, the 'cross' button: + * **Android** dismisses the notification on the phone + * **iOS** responds negatively to the notification (dismiss call/etc) + +## Images +_1. Screenshot of a notification_ + +![](screenshot.png) + + +## Requests + +Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=messages%20app + +## Creator + +Gordon Williams + +## Contributors + +[Jeroen Peters](https://github.com/jeroenpeters1986) + +## Attributions + +Icons used in this app are from https://icons8.com diff --git a/apps/messages/app-icon.js b/apps/messagegui/app-icon.js similarity index 100% rename from apps/messages/app-icon.js rename to apps/messagegui/app-icon.js diff --git a/apps/messages/app-newmessage.js b/apps/messagegui/app-newmessage.js similarity index 50% rename from apps/messages/app-newmessage.js rename to apps/messagegui/app-newmessage.js index 328927c70..73d9a79c1 100644 --- a/apps/messages/app-newmessage.js +++ b/apps/messagegui/app-newmessage.js @@ -1,5 +1,5 @@ /* Called when we have a new message when we're in the clock... -BUZZ_ON_NEW_MESSAGE is set so when messages.app.js loads it knows +BUZZ_ON_NEW_MESSAGE is set so when messagegui.app.js loads it knows that it should buzz */ global.BUZZ_ON_NEW_MESSAGE = true; -eval(require("Storage").read("messages.app.js")); +eval(require("Storage").read("messagegui.app.js")); diff --git a/apps/messages/app.js b/apps/messagegui/app.js similarity index 96% rename from apps/messages/app.js rename to apps/messagegui/app.js index bebd92816..bf086dd3d 100644 --- a/apps/messages/app.js +++ b/apps/messagegui/app.js @@ -19,7 +19,6 @@ require("messages").pushMessage({"t":"add","id":1,"src":"Maps","title":"0 yd - H // call require("messages").pushMessage({"t":"add","id":"call","src":"Phone","title":"Bob","body":"12421312",positive:true,negative:true}) */ - var Layout = require("Layout"); var settings = require('Storage').readJSON("messages.settings.json", true) || {}; var fontSmall = "6x8"; @@ -49,8 +48,11 @@ to the clock. */ var unreadTimeout; /// List of all our messages var MESSAGES = require("messages").getMessages(); -if (!Array.isArray(MESSAGES)) MESSAGES=[]; -var onMessagesModified = function(msg) { + +var onMessagesModified = function(type,msg) { + if (msg.handled) return; + msg.handled = true; + require("messages").apply(msg, MESSAGES); // TODO: if new, show this new one if (msg && msg.id!=="music" && msg.new && active!="map" && !((require('Storage').readJSON('setting.json', 1) || {}).quiet)) { @@ -62,9 +64,15 @@ var onMessagesModified = function(msg) { } showMessage(msg&&msg.id); }; +Bangle.on("message", onMessagesModified); + function saveMessages() { - require("Storage").writeJSON("messages.json",MESSAGES) + require("messages").write(MESSAGES.map(m => { + delete m.show; + return m; + })); } +E.on("kill", saveMessages); function showMapMessage(msg) { active = "map"; @@ -355,12 +363,16 @@ function checkMessages(options) { } // we have >0 messages var newMessages = MESSAGES.filter(m=>m.new&&m.id!="music"); + var toShow = MESSAGES.find(m=>m.show); + if (toShow) { + newMessages.unshift(toShow); + } // If we have a new message, show it - if (options.showMsgIfUnread && newMessages.length) { + if ((toShow||options.showMsgIfUnread) && newMessages.length) { showMessage(newMessages[0].id); // buzz after showMessage, so being busy during layout doesn't affect the buzz pattern if (global.BUZZ_ON_NEW_MESSAGE) { - // this is set if we entered the messages app by loading `messages.new.js` + // this is set if we entered the messages app by loading `messagegui.new.js` // ... but only buzz the first time we view a new message global.BUZZ_ON_NEW_MESSAGE = false; // messages.buzz respects quiet mode - no need to check here @@ -428,6 +440,7 @@ function cancelReloadTimeout() { g.clear(); Bangle.loadWidgets(); +require("messages").toggleWidget(false); Bangle.drawWidgets(); setTimeout(() => { diff --git a/apps/messagegui/app.png b/apps/messagegui/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c9177692e282e1247ced30f6ec0e2d14dc6dfa25 GIT binary patch literal 917 zcmV;G18V$CmK~!jg?U~I_6G0fppJ|s5%ZG(_jU{sLoS)M|Tx5HNwbU93{dM|XETG(}U{r87GP zP5QgOGds^S`_B9Bv_O#}MT#6JB;SE&AFiJ#PVFW@+5j{Fs1U4W3&1i!=cz7@tv)#Y zDW6G)8t?@prO7h)FeSJHz+qQqp6HZfw0bu&7zz6JtOi;d@C75Ko8|7;0Ims@mp=#J3E*{IZSCaRo7jz0My7S0nqA z?9Rp%4b8HI>M{r3e%-^}7vKLHd-Y5ye(oBGDVaVJ^4o8QwhZKo5Ba?~SxzwZA%&Tb z+lVS@06>def}RU5^jtiFA3Jn^jtCRn26CIwMDK4Qfz}EHS`WVSdt3w|zjyyIcTdI< z_Iq%ulJDxlW!-Ky5!DO<4g;b}p(qo~D|bzZD}}iwxHqISKZAMo>{p|R3Ib$Ig#6z9 zuUuBR4)M~4hRY-CJX3}9-`~ir3~U~mio^M77O*m~S^yz@5V~R(vM@mB3ZaDu3db9> zn1uo77y$nJqBwM-ljmkZQv)kQbrDK2S{O|%(5EZ+>pq)BEvr!VZekF?f^bdwGcVVy z-?JKEX&@5x?N#k0IslB|Xwyjp=o7hSt>fM8D`~5NdH=;!|7gueKnEx>+CfPJ#Q*e| r1fk1>I_9WBo>`?$ks?Kk{5$*tT^fbQe@cvs00000NkvXXu0mjfYw(!I literal 0 HcmV?d00001 diff --git a/apps/messagegui/boot.js b/apps/messagegui/boot.js new file mode 100644 index 000000000..4592f825d --- /dev/null +++ b/apps/messagegui/boot.js @@ -0,0 +1,3 @@ +(function() { + Bangle.on("message", (type, msg) => require("messagegui").listener(type, msg)); +})(); \ No newline at end of file diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js new file mode 100644 index 000000000..5b07dd160 --- /dev/null +++ b/apps/messagegui/lib.js @@ -0,0 +1,60 @@ +/** + * Listener set up in boot.js, calls into here to keep boot.js short + */ +exports.listener = function(type, msg) { + // Default handler: Launch the GUI for all unhandled messages (except music if disabled in settings) + if (msg.handled || (global.__FILE__ && __FILE__.startsWith('messagegui.'))) return; // already handled or app open + + // if no new messages now, make sure we don't load the messages app + if (exports.messageTimeout && !msg.new && require("messages").status(msg) !== "new") { + clearTimeout(exports.messageTimeout); + delete exports.messageTimeout; + } + if (msg.t==="remove") return; + + const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {}; + let loadMessages = (Bangle.CLOCK || event.important); + if (type==="music") { + if (Bangle.CLOCK && msg.new && appSettings.openMusic) loadMessages = true; + else return; + } + require("messages").save(msg); + msg.handled = true; + if (msg.t!=="add" || !msg.new) { + return; + } + + const quiet = (require("Storage").readJSON("setting.json", 1) || {}).quiet; + const unlockWatch = appSettings.unlockWatch; + // don't auto-open messages in quiet mode if quietNoAutOpn is true + if ((quiet && appSettings.quietNoAutOpn) || appSettings.noAutOpn) + loadMessages = false; + + // after a delay load the app, to ensure we have all the messages + if (exports.messageTimeout) clearTimeout(exports.messageTimeout); + exports.messageTimeout = setTimeout(function() { + delete exports.messageTimeout; + if (type!=="music") { + if (!loadMessages) return require("messages").buzz(msg.src); // no opening the app, just buzz + if (!quiet && unlockWatch) { + Bangle.setLocked(false); + Bangle.setLCDPower(1); // turn screen on + } + } + exports.open(msg); + }, 500); +}; + +/** + * Launch GUI app with given message + * @param {object} msg + */ +exports.open = function(msg) { + if (msg && msg.id && !msg.show) { + // store which message to load + msg.show = 1; + require("messages").save(msg, {force: 1}); + } + + Bangle.load((msg && msg.new && msg.id!=="music") ? "messagegui.new.js" : "messagegui.app.js"); +}; diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json new file mode 100644 index 000000000..7444050fd --- /dev/null +++ b/apps/messagegui/metadata.json @@ -0,0 +1,22 @@ +{ + "id": "messagegui", + "name": "Messages", + "version": "0.55", + "description": "Default app to display notifications from iOS and Gadgetbridge/Android", + "icon": "app.png", + "type": "app", + "tags": "tool,system", + "supports": ["BANGLEJS","BANGLEJS2"], + "dependencies" : { "messageicons":"module" }, + "provides_modules": ["messagegui"], + "readme": "README.md", + "storage": [ + {"name":"messagegui","url":"lib.js"}, + {"name":"messagegui.app.js","url":"app.js"}, + {"name":"messagegui.new.js","url":"app-newmessage.js"}, + {"name":"messagegui.boot.js","url":"boot.js"}, + {"name":"messagegui.img","url":"app-icon.js","evaluate":true} + ], + "screenshots": [{"url":"screenshot.png"}], + "sortorder": -9 +} diff --git a/apps/messages/screenshot.png b/apps/messagegui/screenshot.png similarity index 100% rename from apps/messages/screenshot.png rename to apps/messagegui/screenshot.png diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index ee27d41c6..b0a84783b 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1,77 +1 @@ -0.01: New App! -0.02: Add 'messages' library -0.03: Fixes for Bangle.js 1 -0.04: Add require("messages").clearAll() -0.05: Handling of message actions (ok/clear) -0.06: New messages now go at the start (fix #898) - Answering true/false now exits the messages app if no new messages - Back now marks a message as read - Clicking top-left opens a menu which allows you to delete a message or mark unread -0.07: Added settings menu with option to choose vibrate pattern and frequency (fix #909) -0.08: Fix rendering of long messages (fix #969) - buzz on new message (fix #999) -0.09: Message now disappears after 60s if no action taken and clock loads (fix 922) - Fix phone icon (#1014) -0.10: Respect the 'new' attribute if it was set from iOS integrations -0.11: Open app when touching the widget (Bangle.js 2 only) -0.12: Extra app-specific notification icons - New animated notification icon (instead of large blinking 'MESSAGES') - Added screenshots -0.13: Add /*LANG*/ comments for internationalisation - Add 'Delete All' option to message options - Now update correctly when 'require("messages").clearAll()' is called -0.14: Hide widget when all unread notifications are dismissed from phone -0.15: Don't buzz when Quiet Mode is active -0.16: Fix text wrapping so it fits the screen even if title is big (fix #1147) -0.17: Fix: Get dynamic dimensions of notify icon, fixed notification font -0.18: Use app-specific icon colors - Spread message action buttons out - Back button now goes back to list of messages - If showMessage called with no message (eg all messages deleted) now return to the clock (fix #1267) -0.19: Use a larger font for message text if it'll fit -0.20: Allow tapping on the body to show a scrollable view of the message and title in a bigger font (fix #1405, #1031) -0.21: Improve list readability on dark theme -0.22: Add Home Assistant icon - Allow repeat to be switched Off, so there is no buzzing repetition. - Also gave the widget a pixel more room to the right -0.23: Change message colors to match current theme instead of using green - Now attempt to use Large/Big/Medium fonts, and allow minimum font size to be configured -0.24: Remove left-over debug statement -0.25: Fix widget memory usage issues if message received and watch repeatedly calls Bangle.drawWidgets (fix #1550) -0.26: Setting to auto-open music -0.27: Add 'mark all read' option to popup menu (fix #1624) -0.28: Option to auto-unlock the watch when a new message arrives -0.29: Fix message list overwrites on Bangle.js 1 (fix #1642) -0.30: Add new Icons (Youtube, Twitch, MS TODO, Teams, Snapchat, Signal, Post & DHL, Nina, Lieferando, Kalender, Discord, Corona Warn, Bibel) -0.31: Option to disable icon flashing -0.32: Added an option to allow quiet mode to override message auto-open -0.33: Timeout from the message list screen if the message being displayed is removed and there is a timer going -0.34: Don't buzz for 'map' update messages -0.35: Reset graphics colors before rendering a message (possibly fix #1752) -0.36: Ensure a new message plus an almost immediate deletion of that message doesn't load the messages app (fix #1362) -0.37: Now use the setUI 'back' icon in the top left rather than specific buttons/menu items -0.38: Add telegram foss handling -0.39: Set default color for message icons according to theme -0.40: Use default Bangle formatter for booleans -0.41: Add notification icons in the widget -0.42: Fix messages ignoring "Vibrate: Off" setting -0.43: Add new Icons (Airbnb, warnwetter) -0.44: Separate buzz pattern for incoming calls -0.45: Added new app colors and icons -0.46: Add 'Vibrate Timer' option to set how long to vibrate for, and fix Repeat:off - Fix message removal from widget bar (previously caused exception as .hide has been removed) -0.47: Add new Icons (Nextbike, Mattermost, etc.) -0.48: When getting new message from the clock, only buzz once the messages app is loaded -0.49: Change messages icon (to fit within 24px) and ensure widget renders icons centrally -0.50: Add `getMessages` and `status` functions to library - Option to disable auto-open of messages - Option to make message icons monochrome (not colored) - messages widget buzz now returns a promise -0.51: Emit "message events" - Setting to hide widget - Add custom event handlers to prevent default app form loading - Move WIDGETS.messages.buzz() to require("messages").buzz() -0.52: Fix require("messages").buzz() regression - Fix background color in messages list after one unread message is shown -0.53: Messages now uses Bangle.load() to load messages app faster (if possible) -0.54: Move icons out to messageicons module +0.01: Moved messages library into standalone library \ No newline at end of file diff --git a/apps/messages/README.md b/apps/messages/README.md index 72a989146..1a6758311 100644 --- a/apps/messages/README.md +++ b/apps/messages/README.md @@ -1,62 +1,25 @@ -# Messages app +# Messages library -This app handles the display of messages and message notifications. It stores -a list of currently received messages and allows them to be listed, viewed, -and responded to. +This library handles the passing of messages. It can storess a list of messages +and allows them to be retrieved by other apps. -It is a replacement for the old `notify`/`gadgetbridge` apps. +## Example -## Settings +Assuming you are using GadgetBridge and "overlay notifications": -You can change settings by going to the global `Settings` app, then `App Settings` -and `Messages`: - -* `Vibrate` - This is the pattern of buzzes that should be made when a new message is received -* `Vibrate for calls` - This is the pattern of buzzes that should be made when an incoming call is received -* `Repeat` - How often should buzzes repeat - the default of 4 means the Bangle will buzz every 4 seconds -* `Vibrate Timer` - When a new message is received when in a non-clock app, we display the message icon and -buzz every `Repeat` seconds. This is how long we continue to do that. -* `Unread Timer` - When a new message is received when showing the clock we go into the Messages app. -If there is no user input for this amount of time then the app will exit and return -to the clock where a ringing bell will be shown in the Widget bar. -* `Min Font` - The minimum font size used when displaying messages on the screen. A bigger font -is chosen if there isn't much message text, but this specifies the smallest the font should get before -it starts getting clipped. -* `Auto-Open Music` - Should the app automatically open when the phone starts playing music? -* `Unlock Watch` - Should the app unlock the watch when a new message arrives, so you can touch the buttons at the bottom of the app? -* `Flash Icon` - Toggle flashing of the widget icon. -* `Widget messages` - The maximum amount of message icons to show on the widget, or `Hide` the widget completely. - -## New Messages - -When a new message is received: - -* If you're in an app, the Bangle will buzz and a message icon appears in the Widget bar. You can tap this icon to view the message. -* If you're in a clock, the Messages app will automatically start and show the message - -When a message is shown, you'll see a screen showing the message title and text. - -* The 'back-arrow' button (or physical button on Bangle.js 2) goes back to Messages, marking the current message as read. -* The top-left icon shows more options, for instance deleting the message of marking unread -* On Bangle.js 2 you can tap on the message body to view a scrollable version of the title and text (or can use the top-left icon + `View Message`) -* If shown, the 'tick' button: - * **Android** opens the notification on the phone - * **iOS** responds positively to the notification (accept call/etc) -* If shown, the 'cross' button: - * **Android** dismisses the notification on the phone - * **iOS** responds negatively to the notification (dismiss call/etc) - -## Images -_1. Screenshot of a notification_ - -![](screenshot.png) - -_2. What the notify icon looks like (it's touchable on Bangle.js2!)_ - -![](screenshot-notify.gif) +1. Gadgetbridge sends an event to your watch for an incoming message +2. The `android` app parses the message, and calls `require("messages").pushMessage({/** the message */})` +3. `require("messages")` (provided by `messagelib`) calls `Bangle.emit("message", "text", {/** the message */})` +4. Overlay Notifications shows the message in an overlay, and marks it as `handled` +5. The default GUI app (`messages`) sees the event is marked as `handled`, so does nothing. +6. The default widget (`widmessages`) does nothing with `handled`, and shows a notification icon. +7. You tap the notification, in order to open the full GUI Overlay Notifications + calls `require("messages").openGUI({/** the message */})` +8. The default GUI app (`messages`) sees the "messageGUI" event, and launches itself -## Events (for app/widget developers) + +## Events When a new message arrives, a `"message"` event is emitted, you can listen for it like this: @@ -64,9 +27,8 @@ it like this: ```js myMessageListener = Bangle.on("message", (type, message)=>{ if (message.handled) return; // another app already handled this message - // is one of "text", "call", "alarm", "map", "music", or "clearAll" - if (type === "clearAll") return; // not a message - // see `messages/lib.js` for possible formats + // is one of "text", "call", "alarm", "map", or "music" + // see `messagelib/lib.js` for possible formats // message.t could be "add", "modify" or "remove" E.showMessage(`${message.title}\n${message.body}`, `${message.t} ${type} message`); // You can prevent the default `message` app from loading by setting `message.handled = true`: @@ -74,10 +36,23 @@ myMessageListener = Bangle.on("message", (type, message)=>{ }); ``` +Apps can launch the full GUI by calling `require("messages").openGUI()`, if you +want to write your own GUI, it should include boot code that listens for +`"messageGUI"` events: + +```js +Bangle.on("messageGUI", message=>{ + if (message.handled) return; // another app already opened it's GUI + message.handled = true; // prevent other apps form launching + Bangle.load("my_message_gui.app.js"); +}) + +``` + ## Requests -Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=messages%20app +Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=messagelib%library ## Creator diff --git a/apps/messages/lib.js b/apps/messages/lib.js index 0ed03e4b6..fa1419c95 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -1,10 +1,16 @@ -function openMusic() { - // only read settings file for first music message - if ("undefined"==typeof exports._openMusic) { - exports._openMusic = !!((require('Storage').readJSON("messages.settings.json", true) || {}).openMusic); - } - return exports._openMusic; +exports.music = {}; +/** + * Emit "message" event with appropriate type from Bangle + * @param {object} msg + */ +function emit(msg) { + let type = "text"; + if (["call", "music", "map"].includes(msg.id)) type = msg.id; + if (type==="music" && msg.t!=="remove" && (!("state" in msg) || (!("track" in msg)))) return; // wait for complete music info + if (msg.src && msg.src.toLowerCase().startsWith("alarm")) type = "alarm"; + Bangle.emit("message", type, msg); } + /* Push a new message onto messages queue, event is: {t:"add",id:int, src,title,subject,body,sender,tel, important:bool, new:bool} {t:"add",id:int, id:"music", state, artist, track, etc} // add new @@ -12,125 +18,178 @@ function openMusic() { {t:"modify",id:int, title:string} // modified */ exports.pushMessage = function(event) { - var messages = exports.getMessages(); // now modify/delete as appropriate - var mIdx = messages.findIndex(m=>m.id==event.id); - if (event.t=="remove") { - if (mIdx>=0) messages.splice(mIdx, 1); // remove item - mIdx=-1; + if (event.t==="remove") { + if (event.id==="music") exports.music = {}; } else { // add/modify - if (event.t=="add"){ - if(event.new === undefined ) { // If 'new' has not been set yet, set it - event.new=true; // Assume it should be new - } + if (event.t==="add") { + if (event.new===undefined) event.new = true; // Assume it should be new + } else if (event.t==="modify") { + const old = exports.getMessages().find(m => m.id===event.id); + if (old) event = Object.assign(old, event); } - if (mIdx<0) { - mIdx=0; - messages.unshift(event); // add new messages to the beginning - } - else Object.assign(messages[mIdx], event); - if (event.id=="music" && messages[mIdx].state=="play") { - messages[mIdx].new = true; // new track, or playback (re)started - type = 'music'; + + // combine musicinfo and musicstate events + if (event.id==="music") { + if (event.state==="play") event.new = true; // new track, or playback (re)started + event = Object.assign(exports.music, event); } } - require("Storage").writeJSON("messages.json",messages); - var message = mIdx<0 ? {id:event.id, t:'remove'} : messages[mIdx]; - // if in app, process immediately - if ("undefined"!=typeof MESSAGES) return onMessagesModified(message); - // emit message event - var type = 'text'; - if (["call", "music", "map"].includes(message.id)) type = message.id; - if (message.src && message.src.toLowerCase().startsWith("alarm")) type = "alarm"; - Bangle.emit("message", type, message); - // update the widget icons shown - if (global.WIDGETS && WIDGETS.messages) WIDGETS.messages.update(messages,true); - var handleMessage = () => { - // if no new messages now, make sure we don't load the messages app - if (event.t=="remove" && exports.messageTimeout && !messages.some(m => m.new)) { - clearTimeout(exports.messageTimeout); - delete exports.messageTimeout; - } - // ok, saved now - if (event.id=="music" && Bangle.CLOCK && messages[mIdx].new && openMusic()) { - // just load the app to display music: no buzzing - Bangle.load("messages.app.js"); - } else if (event.t!="add") { - // we only care if it's new - return; - } else if (event.new==false) { - return; - } - // otherwise load messages/show widget - var loadMessages = Bangle.CLOCK || event.important; - var quiet = (require('Storage').readJSON('setting.json', 1) || {}).quiet; - var appSettings = require('Storage').readJSON('messages.settings.json', 1) || {}; - var unlockWatch = appSettings.unlockWatch; - // don't auto-open messages in quiet mode if quietNoAutOpn is true - if ((quiet && appSettings.quietNoAutOpn) || appSettings.noAutOpn) - loadMessages = false; - delete appSettings; - // after a delay load the app, to ensure we have all the messages - if (exports.messageTimeout) clearTimeout(exports.messageTimeout); - exports.messageTimeout = setTimeout(function() { - exports.messageTimeout = undefined; - // if we're in a clock or it's important, go straight to messages app - if (loadMessages) { - if (!quiet && unlockWatch) { - Bangle.setLocked(false); - Bangle.setLCDPower(1); // turn screen on - } - // we will buzz when we enter the messages app - return Bangle.load("messages.new.js"); - } - if (global.WIDGETS && WIDGETS.messages) WIDGETS.messages.update(messages); - exports.buzz(message.src); - }, 500); - }; - setTimeout(()=>{ - if (!message.handled) handleMessage(); - },0); -} -/// Remove all messages + // reset state (just in case) + delete event.handled; + delete event.saved; + emit(event); +}; + +/** + * Save a single message to flash + * Also sets msg.saved=true + * + * @param {object} msg + * @param {object} [options={}] Options: + * {boolean} [force=false] Force save even if msg.saved is already set + */ +exports.save = function(msg, options) { + if (!options) options = {}; + if (msg.saved && !options.force) return; //already saved + let messages = exports.getMessages(); + exports.apply(msg, messages); + exports.write(messages); + msg.saved = true; +}; + +/** + * Apply incoming event to array of messages + * + * @param {object} event Event to apply + * @param {array} messages Array of messages, *will be modified in-place* + * @return {array} Modified messages array + */ +exports.apply = function(event, messages) { + if (!event || !event.id) return messages; + const mIdx = messages.findIndex(m => m.id===event.id); + if (event.t==="remove") { + if (mIdx<0) return messages; // already gone -> nothing to do + messages.splice(mIdx, 1); + } else if (event.t==="add") { + if (mIdx>=0) messages.splice(mIdx, 1); // duplicate ID! erase previous version + messages.unshift(event); + } else if (event.t==="modify") { + if (mIdx>=0) messages[mIdx] = Object.assign(messages[mIdx], event); + else messages.unshift(event); + } + return messages; +}; + +/** + * Accept a call (or other acceptable event) + * @param {object} msg + */ +exports.accept = function(msg) { + if (msg.positive) Bangle.messageResponse(msg, true); +}; + +/** + * Dismiss a message (if applicable), and erase it from flash + * Emits a "message" event with t="remove", only if message existed + * + * @param {object} msg + */ +exports.dismiss = function(msg) { + if (msg.negative) Bangle.messageResponse(msg, false); + let messages = exports.getMessages(); + const mIdx = messages.findIndex(m=>m.id===msg.id); + if (mIdx<0) return; + messages.splice(mIdx, 1); + exports.write(messages); + if (msg.t==="remove") return; // already removed, don't re-emit + msg.t = "remove"; + emit(msg); // emit t="remove", so e.g. widgets know to update +}; + +/** + * Emit a "type=openGUI" event, to open GUI app + * + * @param {object} [msg={}] Message the app should show + */ +exports.openGUI = function(msg) { + if (!require("Storage").read("messagegui")) return; // "messagegui" module is missing! + // Mark the event as unhandled for GUI, but leave passed arguments intact + let copy = Object.assign({}, msg); + delete copy.handled; + require("messagegui").open(copy); +}; + +/** + * Show/hide the messages widget + * + * @param {boolean} show + */ +exports.toggleWidget = function(show) { + if (!require("Storage").read("messagewidget")) return; // "messagewidget" module is missing! + if (show) require("messagewidget").show(); + else require("messagewidget").hide(); +}; + +/** + * Replace all stored messages + * @param {array} messages Messages to save + */ +exports.write = function(messages) { + require("Storage").writeJSON("messages.json", messages.map(m => { + // we never want to save saved/handled status to file; + delete m.saved; + delete m.handled; + return m; + })); +}; +/** + * Erase all messages + */ exports.clearAll = function() { - if ("undefined"!= typeof MESSAGES) { // we're in a messages app, clear that as well - MESSAGES = []; - } - // Clear all messages - require("Storage").writeJSON("messages.json", []); - // if we have a widget, update it - if (global.WIDGETS && WIDGETS.messages) - WIDGETS.messages.update([]); - // let message listeners know - Bangle.emit("message", "clearAll", {}); // guarantee listeners an object as `message` - // clearAll cannot be marked as "handled" - // update app if in app - if ("function"== typeof onMessagesModified) onMessagesModified(); + exports.write([]); + Bangle.emit("message", "clearAll", {}); } /** + * Get saved messages + * + * Optionally pass in a message to apply to the list, this is for event handlers: + * By passing the message from the event, you can make sure the list is up-to-date, + * even if the message has not been saved (yet) + * + * Example: + * Bangle.on("message", (type, msg) => { + * console.log("All messages:", require("messages").getMessages(msg)); + * }); + * + * @param {object} [withMessage] Apply this event to messages * @returns {array} All messages */ -exports.getMessages = function() { - if ("undefined"!=typeof MESSAGES) return MESSAGES; // loaded/managed by app - return require("Storage").readJSON("messages.json",1)||[]; -} +exports.getMessages = function(withMessage) { + let messages = require("Storage").readJSON("messages.json", true); + messages = Array.isArray(messages) ? messages : []; // make sure we always return an array + if (withMessage && withMessage.id) exports.apply(withMessage, messages); + return messages; +}; /** * Check if there are any messages + * + * @param {object} [withMessage] Apply this event to messages, see getMessages * @returns {string} "new"/"old"/"none" */ - exports.status = function() { +exports.status = function(withMessage) { try { - let status= "none"; - for(const m of exports.getMessages()) { + let status = "none"; + for(const m of exports.getMessages(withMessage)) { if (["music", "map"].includes(m.id)) continue; if (m.new) return "new"; status = "old"; } return status; } catch(e) { - return "none"; // don't bother e.g. the widget with errors + return "none"; // don't bother callers with errors } }; @@ -141,24 +200,24 @@ exports.getMessages = function() { */ exports.buzz = function(msgSrc) { exports.stopBuzz(); // cancel any previous buzz timeouts - if ((require('Storage').readJSON('setting.json',1)||{}).quiet) return Promise.resolve(); // never buzz during Quiet Mode - var msgSettings = require('Storage').readJSON("messages.settings.json", true) || {}; - var pattern; - if (msgSrc && msgSrc.toLowerCase() === "phone") { + if ((require("Storage").readJSON("setting.json", 1) || {}).quiet) return Promise.resolve(); // never buzz during Quiet Mode + const msgSettings = require("Storage").readJSON("messages.settings.json", true) || {}; + let pattern; + if (msgSrc && msgSrc.toLowerCase()==="phone") { // special vibration pattern for incoming calls pattern = msgSettings.vibrateCalls; } else { pattern = msgSettings.vibrate; } - if (pattern === undefined) { pattern = ":"; } // pattern may be "", so we can't use || ":" here + if (pattern===undefined) { pattern = ":"; } // pattern may be "", so we can't use || ":" here if (!pattern) return Promise.resolve(); - var repeat = msgSettings.repeat; - if (repeat===undefined) repeat=4; // repeat may be zero + let repeat = msgSettings.repeat; + if (repeat===undefined) repeat = 4; // repeat may be zero if (repeat) { - exports.buzzTimeout = setTimeout(()=>require("buzz").pattern(pattern), repeat*1000); - var vibrateTimeout = msgSettings.vibrateTimeout; - if (vibrateTimeout===undefined) vibrateTimeout=60; + exports.buzzTimeout = setTimeout(() => require("buzz").pattern(pattern), repeat*1000); + let vibrateTimeout = msgSettings.vibrateTimeout; + if (vibrateTimeout===undefined) vibrateTimeout = 60; if (vibrateTimeout && !exports.stopTimeout) exports.stopTimeout = setTimeout(exports.stopBuzz, vibrateTimeout*1000); } return require("buzz").pattern(pattern); diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index f3051958e..f94f01c26 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,23 +1,18 @@ { "id": "messages", "name": "Messages", - "version": "0.54", - "description": "App to display notifications from iOS and Gadgetbridge/Android", + "version": "0.01", + "description": "Library to handle message events", "icon": "app.png", - "type": "app", + "type": "module", "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], - "dependencies" : { "messageicons":"module" }, + "provides_modules" : ["messages"], + "dependencies" : { "messagegui":"module","messagewidget":"module" }, "readme": "README.md", "storage": [ - {"name":"messages.app.js","url":"app.js"}, - {"name":"messages.new.js","url":"app-newmessage.js"}, - {"name":"messages.settings.js","url":"settings.js"}, - {"name":"messages.img","url":"app-icon.js","evaluate":true}, - {"name":"messages.wid.js","url":"widget.js"}, - {"name":"messages","url":"lib.js"} + {"name":"messages","url":"lib.js"}, + {"name":"messages.settings.js","url":"settings.js"} ], - "data": [{"name":"messages.json"},{"name":"messages.settings.json"}], - "screenshots": [{"url":"screenshot.png"},{"url":"screenshot-notify.gif"}], - "sortorder": -9 + "data": [{"name":"messages.json"},{"name":"messages.settings.json"}] } diff --git a/apps/messages/widget.js b/apps/messages/widget.js deleted file mode 100644 index c0dcd132f..000000000 --- a/apps/messages/widget.js +++ /dev/null @@ -1,56 +0,0 @@ -(() => { -if ((require('Storage').readJSON("messages.settings.json", true) || {}).maxMessages===0) return; - -function filterMessages(msgs) { - return msgs.filter(msg => msg.new && msg.id != "music") - .map(m => m.src) // we only need this for icon/color - .filter((msg, i, arr) => arr.findIndex(nmsg => msg.src == nmsg.src) == i); -} - -WIDGETS["messages"]={area:"tl", width:0, draw:function(recall) { - // If we had a setTimeout queued from the last time we were called, remove it - if (WIDGETS["messages"].i) { - clearTimeout(WIDGETS["messages"].i); - delete WIDGETS["messages"].i; - } - Bangle.removeListener('touch', this.touch); - if (!this.width) return; - let settings = Object.assign({flash:true, maxMessages:3},require('Storage').readJSON("messages.settings.json", true) || {}); - if (recall !== true || settings.flash) { - var msgsShown = E.clip(this.msgs.length, 0, settings.maxMessages); - g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+23); - for(let i = 0;i < msgsShown;i++) { - const msg = this.msgs[i]; - const colors = [g.theme.bg, - require("messageicons").getColor(msg, {settings:settings})]; - if (settings.flash && ((Date.now()/1000)&1)) { - if (colors[1] == g.theme.fg) { - colors.reverse(); - } else { - colors[1] = g.theme.fg; - } - } - g.setColor(colors[1]).setBgColor(colors[0]); - // draw the icon, or '...' if too many messages - g.drawImage(i == (settings.maxMessages - 1) && this.msgs.length > settings.maxMessages ? atob("EASBAGGG88/zz2GG") : require("messageicons").getImage(msg), - this.x + 12 + i * 24, this.y + 12, {rotate:0/*force centering*/}); - } - } - WIDGETS["messages"].i=setTimeout(()=>WIDGETS["messages"].draw(true), 1000); - if (process.env.HWVERSION>1) Bangle.on('touch', this.touch); -},update:function(rawMsgs) { - const settings = Object.assign({maxMessages:3},require('Storage').readJSON("messages.settings.json", true) || {}); - this.msgs = filterMessages(rawMsgs); - this.width = 24 * E.clip(this.msgs.length, 0, settings.maxMessages); - Bangle.drawWidgets(); -},touch:function(b,c) { - var w=WIDGETS["messages"]; - if (!w||!w.width||c.xw.x+w.width||c.yw.y+24) return; - load("messages.app.js"); -}}; - -/* We might have returned here if we were in the Messages app for a -message but then the watch was never viewed. */ -if (global.MESSAGES===undefined) - WIDGETS["messages"].update(require("messages").getMessages()); -})(); diff --git a/apps/messagesmusic/ChangeLog b/apps/messagesmusic/ChangeLog index 9f4cafb0e..65fd09686 100644 --- a/apps/messagesmusic/ChangeLog +++ b/apps/messagesmusic/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Remove one line of code that didn't do anything other than in some instances hinder the function of the app. +0.03: Use the new messages library \ No newline at end of file diff --git a/apps/messagesmusic/README.md b/apps/messagesmusic/README.md index 85608118d..9a50de93e 100644 --- a/apps/messagesmusic/README.md +++ b/apps/messagesmusic/README.md @@ -1,15 +1,9 @@ Hacky app that uses Messages app and it's library to push a message that triggers the music controls. It's nearly not an app, and yet it moves. -This app require Messages setting 'Auto-open Music' to be 'Yes'. If it isn't, the app will change it to 'Yes' and let it stay that way. - Making the music controls accessible this way lets one start a music stream on the phone in some situations even though the message app didn't receive a music message from gadgetbridge to begin with. (I think.) It is suggested to use Messages Music along side the app Quick Launch. -Messages Music v0.02 has been verified to work with Messages v0.41 on Bangle.js 2 fw2v14. - -Messages Music should work with forks of the original Messages app. At least as long as functions pushMessage() in the library and showMusicMessage() in app.js hasn't been changed too much. - Messages app is created by Gordon Williams with contributions from [Jeroen Peters](https://github.com/jeroenpeters1986). The icon used for this app is from [https://icons8.com](https://icons8.com). diff --git a/apps/messagesmusic/app.js b/apps/messagesmusic/app.js index 27f3f6e4d..11e7e5a4e 100644 --- a/apps/messagesmusic/app.js +++ b/apps/messagesmusic/app.js @@ -1,14 +1 @@ -let showMusic = () => { - Bangle.CLOCK = 1; // To pass condition in messages library - require('messages').pushMessage({"t":"add","artist":" ","album":" ","track":" ","dur":0,"c":-1,"n":-1,"id":"music","title":"Music","state":"play","new":true}); -}; - -var settings = require('Storage').readJSON('messages.settings.json', true) || {}; //read settings if they exist else set to empty dict -if (!settings.openMusic) { - settings.openMusic = true; // This app/hack works as intended only if this setting is true - require('Storage').writeJSON('messages.settings.json', settings); - E.showMessage("First run:\n\nMessages setting\n\n 'Auto-Open Music'\n\n set to 'Yes'"); - setTimeout(()=>{showMusic();}, 5000); -} else { - showMusic(); -} +require('messages').openGUI({"t":"add","artist":" ","album":" ","track":" ","dur":0,"c":-1,"n":-1,"id":"music","title":"Music","state":"play","new":true}); diff --git a/apps/messagesmusic/metadata.json b/apps/messagesmusic/metadata.json index c29ffbc34..ce5281563 100644 --- a/apps/messagesmusic/metadata.json +++ b/apps/messagesmusic/metadata.json @@ -1,7 +1,7 @@ { "id": "messagesmusic", "name":"Messages Music", - "version":"0.02", + "version":"0.03", "description": "Uses Messages library to push a music message which in turn displays Messages app music controls", "icon":"app.png", "type": "app", @@ -13,6 +13,6 @@ {"name":"messagesmusic.app.js","url":"app.js"}, {"name":"messagesmusic.img","url":"app-icon.js","evaluate":true} ], - "dependencies": {"messages":"app"} + "dependencies" : { "messagelib":"module" } } diff --git a/apps/widmessages/ChangeLog b/apps/widmessages/ChangeLog new file mode 100644 index 000000000..3a41005e9 --- /dev/null +++ b/apps/widmessages/ChangeLog @@ -0,0 +1 @@ +0.01: Moved messages widget into standalone widget app \ No newline at end of file diff --git a/apps/widmessages/README.md b/apps/widmessages/README.md new file mode 100644 index 000000000..398cb4fa8 --- /dev/null +++ b/apps/widmessages/README.md @@ -0,0 +1,30 @@ +# Messages widget + +The default widget to show icons for new messages +It is installed automatically if you install `Android Integration` or `iOS Integration`. + +![screenshot](screenshot.gif) + +## Settings +You can change settings by going to the global `Settings` app, then `App Settings` +and `Messages`: + +* `Flash icon` Toggle flashing of the widget icons. + +* `Widget messages` Not used by this widget. + +## Requests + +Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=widmessages%widget + +## Creator + +Gordon Williams + +## Contributors + +[Jeroen Peters](https://github.com/jeroenpeters1986) + +## Attributions + +Icons used in this app are from https://icons8.com diff --git a/apps/widmessages/app.png b/apps/widmessages/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c9177692e282e1247ced30f6ec0e2d14dc6dfa25 GIT binary patch literal 917 zcmV;G18V$CmK~!jg?U~I_6G0fppJ|s5%ZG(_jU{sLoS)M|Tx5HNwbU93{dM|XETG(}U{r87GP zP5QgOGds^S`_B9Bv_O#}MT#6JB;SE&AFiJ#PVFW@+5j{Fs1U4W3&1i!=cz7@tv)#Y zDW6G)8t?@prO7h)FeSJHz+qQqp6HZfw0bu&7zz6JtOi;d@C75Ko8|7;0Ims@mp=#J3E*{IZSCaRo7jz0My7S0nqA z?9Rp%4b8HI>M{r3e%-^}7vKLHd-Y5ye(oBGDVaVJ^4o8QwhZKo5Ba?~SxzwZA%&Tb z+lVS@06>def}RU5^jtiFA3Jn^jtCRn26CIwMDK4Qfz}EHS`WVSdt3w|zjyyIcTdI< z_Iq%ulJDxlW!-Ky5!DO<4g;b}p(qo~D|bzZD}}iwxHqISKZAMo>{p|R3Ib$Ig#6z9 zuUuBR4)M~4hRY-CJX3}9-`~ir3~U~mio^M77O*m~S^yz@5V~R(vM@mB3ZaDu3db9> zn1uo77y$nJqBwM-ljmkZQv)kQbrDK2S{O|%(5EZ+>pq)BEvr!VZekF?f^bdwGcVVy z-?JKEX&@5x?N#k0IslB|Xwyjp=o7hSt>fM8D`~5NdH=;!|7gueKnEx>+CfPJ#Q*e| r1fk1>I_9WBo>`?$ks?Kk{5$*tT^fbQe@cvs00000NkvXXu0mjfYw(!I literal 0 HcmV?d00001 diff --git a/apps/widmessages/lib.js b/apps/widmessages/lib.js new file mode 100644 index 000000000..897611ad1 --- /dev/null +++ b/apps/widmessages/lib.js @@ -0,0 +1,8 @@ +exports.hide = function() { + if (!global.WIDGETS||!WIDGETS["messages"]) return; + WIDGETS["messages"].hide(); +} +exports.show = function() { + if (!global.WIDGETS||!WIDGETS["messages"]) return; + WIDGETS["messages"].show(); +} \ No newline at end of file diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json new file mode 100644 index 000000000..0c3ac7e05 --- /dev/null +++ b/apps/widmessages/metadata.json @@ -0,0 +1,18 @@ +{ + "id": "widmessages", + "name": "Message Widget", + "version": "0.01", + "description": "Widget showing new messages", + "icon": "app.png", + "type": "widget", + "tags": "tool,system", + "supports": ["BANGLEJS","BANGLEJS2"], + "screenshots": [{"url": "screenshot.gif"}], + "dependencies" : { "messageicons":"module" }, + "provides_modules" : ["messagewidget"], + "readme": "README.md", + "storage": [ + {"name":"messagewidget","url":"lib.js"}, + {"name":"widmessages.wid.js","url":"widget.js"} + ] +} diff --git a/apps/messages/screenshot-notify.gif b/apps/widmessages/screenshot.gif similarity index 100% rename from apps/messages/screenshot-notify.gif rename to apps/widmessages/screenshot.gif diff --git a/apps/widmessages/widget.js b/apps/widmessages/widget.js new file mode 100644 index 000000000..2ee11b690 --- /dev/null +++ b/apps/widmessages/widget.js @@ -0,0 +1,73 @@ +(() => { + if ((require("Storage").readJSON("messages.settings.json", true) || {}).maxMessages===0) return; + + function filterMessages(msgs) { + return msgs.filter(msg => msg.new && msg.id != "music") + .map(m => m.src) // we only need this for icon/color + .filter((msg, i, arr) => arr.findIndex(nmsg => msg.src == nmsg.src) == i); + } + + WIDGETS["messages"] = { + area: "tl", width: 0, srcs: [], draw: function(recall) { + // If we had a setTimeout queued from the last time we were called, remove it + if (WIDGETS["messages"].i) { + clearTimeout(WIDGETS["messages"].i); + delete WIDGETS["messages"].i; + } + Bangle.removeListener("touch", this.touch); + if (!this.width) return; + let settings = Object.assign({flash: true, maxMessages: 3}, require("Storage").readJSON("messages.settings.json", true) || {}); + if (recall!==true || settings.flash) { + const msgsShown = E.clip(this.srcs.length, 0, settings.maxMessages), + srcs = Object.keys(this.srcs); + g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+23); + for(let i = 0; isettings.maxMessages ? atob("EASBAGGG88/zz2GG") : require("messageicons").getImage(src), + this.x+12+i*24, this.y+12, {rotate: 0/*force centering*/}); + } + } + WIDGETS["messages"].i = setTimeout(() => WIDGETS["messages"].draw(true), 1000); + if (process.env.HWVERSION>1) Bangle.on("touch", this.touch); + }, onMsg: function(type, msg) { + if (this.hidden) return; + if (type==="music") return; + if (msg.id && !msg.new && msg.t!=="remove") return; + this.srcs = filterMessages(require("messages").getMessages(msg)); + const settings = Object.assign({maxMessages:3},require('Storage').readJSON("messages.settings.json", true) || {}); + this.width = 24 * E.clip(this.srcs.length, 0, settings.maxMessages); + if (type!=="init") Bangle.drawWidgets(); // "init" is not a real message type: see below + }, touch: function(b, c) { + var w = WIDGETS["messages"]; + if (!w || !w.width || c.xw.x+w.width || c.yw.y+24) return; + require("messages").openGUI(); + }, hide() { + this.hidden=true; + if (this.width) { + // hide widget + this.width = 0; + Bangle.drawWidgets(); + } + }, show() { + delete this.hidden + this.onMsg("show", {}); // reload messages+redraw + } + }; + + Bangle.on("message", WIDGETS["messages"].onMsg); + this.srcs = {}; + WIDGETS["messages"].onMsg("init", {}); // abuse type="init" to prevent Bangle.drawWidgets(); +})(); diff --git a/apps/widmsggrid/ChangeLog b/apps/widmsggrid/ChangeLog index 75259c4f0..9612da729 100644 --- a/apps/widmsggrid/ChangeLog +++ b/apps/widmsggrid/ChangeLog @@ -1,2 +1,3 @@ 0.01: New widget! 0.02: Adjust to message icons moving to messageicons lib +0.03: Use new message library \ No newline at end of file diff --git a/apps/widmsggrid/README.md b/apps/widmsggrid/README.md index 86a80c403..274858d66 100644 --- a/apps/widmsggrid/README.md +++ b/apps/widmsggrid/README.md @@ -20,9 +20,9 @@ You probably want to disable the default widget, to do so: 3. Scroll down to the `Widget messages` entry, and change it to `Hide` ## Settings -This widget uses the `Widget` settings from the `messages` app: +You can change settings by going to the global `Settings` app, then `App Settings` +and `Messages`: -### Widget * `Flash icon` Toggle flashing of the widget icons. -* `Widget messages` Not used by this widget, but you should select `Hide` to hide the default widget. \ No newline at end of file +* `Widget messages` Not used by this widget. \ No newline at end of file diff --git a/apps/widmsggrid/lib.js b/apps/widmsggrid/lib.js new file mode 100644 index 000000000..430577209 --- /dev/null +++ b/apps/widmsggrid/lib.js @@ -0,0 +1,8 @@ +exports.hide = function() { + if (!global.WIDGETS||!WIDGETS["msggrid"]) return; + WIDGETS["msggrid"].hide(); +} +exports.show = function() { + if (!global.WIDGETS||!WIDGETS["msggrid"]) return; + WIDGETS["msggrid"].show(); +} \ No newline at end of file diff --git a/apps/widmsggrid/metadata.json b/apps/widmsggrid/metadata.json index c9ed5bbe0..68c2c3771 100644 --- a/apps/widmsggrid/metadata.json +++ b/apps/widmsggrid/metadata.json @@ -1,16 +1,17 @@ { "id": "widmsggrid", "name": "Messages Grid Widget", - "version": "0.02", - "description": "Widget that display notification icons in a grid", + "version": "0.03", + "description": "Widget that displays notification icons in a grid", "icon": "widget.png", "type": "widget", - "dependencies": {"messages":"app"}, "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], - "dependencies" : { "messageicons":"module" }, + "dependencies" : { "messages":"module" }, + "provides_modules" : ["messagewidget"], "readme": "README.md", "storage": [ + {"name":"messagewidget","url":"lib.js"}, {"name":"widmsggrid.wid.js","url":"widget.js"} ], "screenshots": [{"url":"screenshot.png"}] diff --git a/apps/widmsggrid/widget.js b/apps/widmsggrid/widget.js index 431adf479..786f590b5 100644 --- a/apps/widmsggrid/widget.js +++ b/apps/widmsggrid/widget.js @@ -24,7 +24,7 @@ clearTimeout(w.t); delete w.t; } - if (!w.width) return; + if (!w.width || this.hidden) return; const b = w.flash && w.status === "new" && ((Date.now() / 1000) & 1), // Blink(= inverse colors) on this second? // show multiple icons in a grid, by scaling them down cols = Math.ceil(Math.sqrt(w.srcs.length - 0.1)); // cols===rows, -0.1 to work around rounding error @@ -57,9 +57,10 @@ .drawString(w.total, w.x + w.width - 1, w.y + 24, w.total > 9); } if (w.flash && w.status === "new") w.t = setTimeout(w.draw, 1000); // schedule redraw while blinking - }, show: function () { + }, show: function (m) { + delete w.hidden; w.width = 24; - w.srcs = require("messages").getMessages() + w.srcs = require("messages").getMessages(m) .filter(m => !['call', 'map', 'music'].includes(m.id)) .filter(m => m.new || w.showRead) .map(m => m.src); @@ -68,6 +69,7 @@ Bangle.drawWidgets(); Bangle.setLCDPower(1); // turns screen on }, hide: function () { + w.hidden = true; w.width = 0; w.srcs = []; w.total = 0; @@ -82,13 +84,16 @@ } // Bangle.js 2: open app when touching the widget else if (c.x < w.x || c.x > w.x + w.width || c.y < w.y || c.y > w.y + 24) return; - load("messages.app.js"); - }, listener: function () { - w.status = require("messages").status(); - if (w.status === "new" || (w.status === "old" && w.showRead)) w.show(); + require("messages").openGUI(); + }, listener: function (t,m) { + if (this.hidden) return; + w.status = require("messages").status(m); + if (w.status === "new" || (w.status === "old" && w.showRead)) w.show(m); else w.hide(); + delete w.hidden; // always set by w.hide(), but we checked it wasn't there before } }; delete s; const w = WIDGETS["msggrid"]; + Bangle.on("message", w.listener); })(); diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 7ee07bebc..0a4765d9c 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -92,7 +92,8 @@ const INTERNAL_FILES_IN_APP_TYPE = { // list of app types and files they SHOULD }; /* These are warnings we know about but don't want in our output */ var KNOWN_WARNINGS = [ -"App gpsrec data file wildcard .gpsrc? does not include app ID" +"App gpsrec data file wildcard .gpsrc? does not include app ID", +"App widmessages storage file messagewidget is also listed as storage file for app widmsggrid", ]; function globToRegex(pattern) { From 8da09e3ea19a5d6617e134c1e11ba3a46925a91e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Sun, 27 Nov 2022 09:34:27 +0000 Subject: [PATCH 079/342] quick fix for last update - recorder now plots tracks ok --- apps/recorder/widget.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 9d61cfee5..87d4fb012 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -276,8 +276,8 @@ if (l===undefined) return; // empty file? var mp, c = l.split(","); var la=c.indexOf("Latitude"),lo=c.indexOf("Longitude"); - if (la<0 || lb<0) return; // no GPS! - l = f.readLine(); + if (la<0 || lo<0) return; // no GPS! + l = f.readLine();c=[]; while (l && !c[la]) { c = l.split(","); l = f.readLine(f); From dc219416ebd3a06cba5671c9a4015c37ff43dcc2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Sun, 27 Nov 2022 09:41:58 +0000 Subject: [PATCH 080/342] bump version --- apps/recorder/ChangeLog | 1 + apps/recorder/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 2f6ec84f6..3cf5d8372 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -22,3 +22,4 @@ 0.16: Ability to append to existing track (fix #1712) 0.17: Use default Bangle formatter for booleans 0.18: Improve widget load speed, allow currently recording track to be plotted in openstmap +0.19: Fix track plotting code diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index 9f8110cee..bbc08e0ef 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.18", + "version": "0.19", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", From 77e270d356542e341ea4a69d16486735e62298c3 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 27 Nov 2022 19:05:40 +0100 Subject: [PATCH 081/342] hrmmar: Add fft elimination algorithm to remove MA The fft with size=256 is calculated over a window of 8 seconds with step size 2 seconds. Sample rate of acceleration (12.5Hz) and PPG sensor (25Hz) is unchanged, so the algorithm runs with 12.5Hz. Generally the maximum peak in fft spectrum in an interval of -5..+10BPM of last one is used. The low fft resolution limits the accuracy to ~3BPM, but mean error is ~5-10BPM. If firmware reports confidence >= 90% its value is used. --- apps/hrmmar/README.md | 11 +++ apps/hrmmar/app.png | Bin 0 -> 1192 bytes apps/hrmmar/boot.js | 40 ++++++++ apps/hrmmar/fftelim.js | 190 ++++++++++++++++++++++++++++++++++++++ apps/hrmmar/metadata.json | 18 ++++ apps/hrmmar/settings.js | 26 ++++++ 6 files changed, 285 insertions(+) create mode 100644 apps/hrmmar/README.md create mode 100644 apps/hrmmar/app.png create mode 100644 apps/hrmmar/boot.js create mode 100644 apps/hrmmar/fftelim.js create mode 100644 apps/hrmmar/metadata.json create mode 100644 apps/hrmmar/settings.js diff --git a/apps/hrmmar/README.md b/apps/hrmmar/README.md new file mode 100644 index 000000000..ff90d9156 --- /dev/null +++ b/apps/hrmmar/README.md @@ -0,0 +1,11 @@ +# HRM Motion Artifacts removal + +Measurements from the build in PPG-Sensor (Photoplethysmograph) is sensitive to motion and can be corrupted with Motion Artifacts (MA). This module allows to remove these. + +## Settings + +* **MA removal** + +Select the algorithm to Remove Motion artifacts: + - None: (default) No Motion Artifact removal. + - fft elim: (*experimental*) Remove Motion Artifacts by cutting out the frequencies from the HRM frequency spectrum that are noisy in acceleration spectrum. Under motion this can report a heart rate that is closer to the real one but will fail if motion frequency and heart rate overlap. diff --git a/apps/hrmmar/app.png b/apps/hrmmar/app.png new file mode 100644 index 0000000000000000000000000000000000000000..9db19be376fcfbd57a41ed0a04eee292b34c828e GIT binary patch literal 1192 zcmV;Z1XufsP)7N8&wpCzj16QO=3?ye$>y9#7#&f2&F`l*fYj2&35nxJ-PlfTCr)jTJuJo^JBi0_eQgSo zztx>NbI-ZInRD)AV8n69>sIT^kJmm)b~9ScdZ`Vr^6Uo>pp4bk56z6G0yK#WB2lO0 z1Cj1W(agtUDnKOXC!J+xU)=7udpBe=gQ)-!LW?Opf&4IBpTIf{r=e&XS72`#u1_!& z0l|edlg=_o8fZOdYGDSRLQ`@X*;B-3SCQSNLAyV}zy*XBQbyYy9DW@PTtM(_+Gs2P z2LZCDc;vcMfG5;lz^Um&CLM>Op#ebw-bj|{xxbC;Y1aX=r%0o&yH!l4((v;sB1;L8 z&;~*RqAzdapUW86p|g7aZ`__k)4=I2VxOp;=oem0{x<~7uWac8Bn@b%&-R@eN_!3@ zsry$5Eu@)QN+4M@k???k0Pjo|*;8bEvV!YO0nq1vfK<#+E~)PW-Nyu+_7!j_CB~;J z_#(UghBxS2K=j+yW+^Qcp90m#P59c`4c#=&h`+cFUL_@V;u{N4@ zpx;Yx_yNeJnqMH0N0LC(z%te#6iuTwQ{Oj}W%;$g9y|D6mdY_qGp{lPV4 zZ-Md2D$xD{g`9(0#fE*NhQn2&n0MfdWU-&Bl1nKx>K43_EU&-$GXOWge1r8{(H_yd zXN1r!RI6Ia-*+KN`r=f`Iyrbar5iPgT-pVIyIBXV^x3%=B7P?VfYqk5ci+YOuk(G4 zL3kz3Z2OFMs`>U?wCcbR&@ABOT8Q}Fi1FMn-=FV$*D5UF!Isx(pAe8}*MZHha%ScM z4b?(=!%rseo>bpjNR_$T^TbMHXL)0g$*CGVIxe*x+G6=Yh!+@5fC>QkWaP$jU{6NW2-$V26CuRt_4tQ-Cbonay+>f>iUcb19=^0g9nUF9l%aU z0S}6y{8s6twCA9DXs1@S@i23G;Qog$K-2W~ppbPA#ea_!l8WZGrz4+INQk9R!OYM@ zfObpyCn%|B-;7bpAep0|u?SIms20)F`Vv$eX_ z`Vtb~h^Et{{fRz$NkufiwOF)QZ+!JdOeFq@5hF$nkADCxICO5y(}2|g0000 { + bpm_corrected = bpm; + }; + + Bangle.on('HRM', (hrm) => { + if (bpm_corrected > 0) { + // replace bpm data in event + hrm.bpm_orig = hrm.bpm; + hrm.confidence_orig = hrm.confidence; + hrm.bpm = bpm_corrected; + hrm.confidence = 0; + } + }); + + let run = () => { + const settings = Object.assign({ + mAremoval: 0 + }, require("Storage").readJSON("hrmmar.json", true) || {}); + + // select motion artifact removal algorithm + switch(settings.mAremoval) { + case 1: + require("hrmfftelim").run(settings, updateHrm); + break; + } + } + + // override setHRMPower so we can run our code on HRM enable + const oldSetHRMPower = Bangle.setHRMPower; + Bangle.setHRMPower = function(on, id) { + if (on && run !== undefined) { + run(); + run = undefined; // Make sure we run only once + } + return oldSetHRMPower(on, id); + }; +} diff --git a/apps/hrmmar/fftelim.js b/apps/hrmmar/fftelim.js new file mode 100644 index 000000000..98b7f33ad --- /dev/null +++ b/apps/hrmmar/fftelim.js @@ -0,0 +1,190 @@ +exports.run = (settings, updateHrm) => { + const SAMPLE_RATE = 12.5; + const NUM_POINTS = 256; // fft size + const ACC_PEAKS = 2; // remove this number of ACC peaks + + // ringbuffers + const hrmvalues = new Int16Array(8*SAMPLE_RATE); + const accvalues = new Int16Array(8*SAMPLE_RATE); + // fft buffers + const hrmfftbuf = new Int16Array(NUM_POINTS); + const accfftbuf = new Int16Array(NUM_POINTS); + let BPM_est_1 = 0; + let BPM_est_2 = 0; + + let hrmdata; + let idx=0, wraps=0; + + // init settings + Bangle.setOptions({hrmPollInterval: 40, powerSave: false}); // hrm=25Hz + Bangle.setPollInterval(80); // 12.5Hz + + calcfft = (values, idx, normalize, fftbuf) => { + fftbuf.fill(0); + let i_out=0; + let avg = 0; + if (normalize) { + const sum = values.reduce((a, b) => a + b, 0); + avg = sum/values.length; + } + // sort ringbuffer to fft buffer + for(let i_in=idx; i_in { + let maxVal = -Number.MAX_VALUE; + let maxIdx = 0; + + values.forEach((value,i) => { + if (value > maxVal) { + maxVal = value; + maxIdx = i; + } + }); + return {idx: maxIdx, val: maxVal}; + }; + + getSign = (value) => { + return value < 0 ? -1 : 1; + }; + + // idx in fft buffer to frequency + getFftFreq = (idx, rate, size) => { + return idx*rate/(size-1); + }; + + // frequency to idx in fft buffer + getFftIdx = (freq, rate, size) => { + return Math.round(freq*(size-1)/rate); + }; + + calc2ndDeriative = (values) => { + const result = new Int16Array(values.length-2); + for(let i=1; i { + // fft + const ppg_fft = calcfft(hrmvalues, idx, true, hrmfftbuf).subarray(minFreqIdx, maxFreqIdx+1); + const acc_fft = calcfft(accvalues, idx, false, accfftbuf).subarray(minFreqIdx, maxFreqIdx+1); + + // remove spectrum that have peaks in acc fft from ppg fft + const accGlobalMax = getMax(acc_fft); + const acc2nddiff = calc2ndDeriative(acc_fft); // calculate second derivative + for(let iClean=0; iClean < ACC_PEAKS; iClean++) { + // get max peak in ACC + const accMax = getMax(acc_fft); + + if (accMax.val >= 10 && accMax.val/accGlobalMax.val > 0.75) { + // set all values in PPG FFT to zero until second derivative of ACC has zero crossing + for (let k = accMax.idx-1; k>=0; k--) { + ppg_fft[k] = 0; + acc_fft[k] = -Math.abs(acc_fft[k]); // max(acc_fft) should no longer find this + if (k-2 > 0 && getSign(acc2nddiff[k-1-2]) != getSign(acc2nddiff[k-2]) && Math.abs(acc_fft[k]) < accMax.val*0.75) { + break; + } + } + // set all values in PPG FFT to zero until second derivative of ACC has zero crossing + for (let k = accMax.idx; k < acc_fft.length-1; k++) { + ppg_fft[k] = 0; + acc_fft[k] = -Math.abs(acc_fft[k]); // max(acc_fft) should no longer find this + if (k-2 >= 0 && getSign(acc2nddiff[k+1-2]) != getSign(acc2nddiff[k-2]) && Math.abs(acc_fft[k]) < accMax.val*0.75) { + break; + } + } + } + } + + // bpm result is maximum peak in PPG fft + const hrRangeMax = getMax(ppg_fft.subarray(rangeIdx[0], rangeIdx[1])); + const hrTotalMax = getMax(ppg_fft); + const maxDiff = hrTotalMax.val/hrRangeMax.val; + let idxMaxPPG = hrRangeMax.idx+rangeIdx[0]; // offset range limit + + if ((maxDiff > 3 && idxMaxPPG != hrTotalMax.idx) || hrRangeMax.val === 0) { // prevent tracking from loosing the real heart rate by checking the full spectrum + if (hrTotalMax.idx > idxMaxPPG) { + idxMaxPPG = idxMaxPPG+Math.ceil(6/freqStep); // step 6 BPM up into the direction of max peak + } else { + idxMaxPPG = idxMaxPPG-Math.ceil(2/freqStep); // step 2 BPM down into the direction of max peak + } + } + + idxMaxPPG = idxMaxPPG + minFreqIdx; + const BPM_est_0 = getFftFreq(idxMaxPPG, SAMPLE_RATE, NUM_POINTS)*60; + + // smooth with moving average + let BPM_est_res; + if (BPM_est_2 > 0) { + BPM_est_res = 0.9*BPM_est_0 + 0.05*BPM_est_1 + 0.05*BPM_est_2; + } else { + BPM_est_res = BPM_est_0; + } + + return BPM_est_res.toFixed(1); + }; + + Bangle.on('HRM-raw', (hrm) => { + hrmdata = hrm; + }); + + Bangle.on('accel', (acc) => { + if (hrmdata !== undefined) { + hrmvalues[idx] = hrmdata.filt; + accvalues[idx] = acc.x*1000 + acc.y*1000 + acc.z*1000; + idx++; + if (idx >= 8*SAMPLE_RATE) { + idx = 0; + wraps++; + } + + if (idx % (SAMPLE_RATE*2) == 0) { // every two seconds + if (wraps === 0) { // use rate of firmware until hrmvalues buffer is filled + updateHrm(undefined); + BPM_est_2 = BPM_est_1; + BPM_est_1 = hrmdata.bpm; + } else { + let bpm_result; + if (hrmdata.confidence >= 90) { // display firmware value if good + bpm_result = hrmdata.bpm; + updateHrm(undefined); + } else { + bpm_result = calculate(idx); + bpm_corrected = bpm_result; + updateHrm(bpm_result); + } + BPM_est_2 = BPM_est_1; + BPM_est_1 = bpm_result; + + // set search range of next BPM + const est_res_idx = getFftIdx(bpm_result/60, SAMPLE_RATE, NUM_POINTS)-minFreqIdx; + rangeIdx = [est_res_idx-maxBpmDiffIdxDown, est_res_idx+maxBpmDiffIdxUp]; + if (rangeIdx[0] < 0) { + rangeIdx[0] = 0; + } + if (rangeIdx[1] > maxFreqIdx-minFreqIdx) { + rangeIdx[1] = maxFreqIdx-minFreqIdx; + } + } + } + } + }); +}; diff --git a/apps/hrmmar/metadata.json b/apps/hrmmar/metadata.json new file mode 100644 index 000000000..232ff64a7 --- /dev/null +++ b/apps/hrmmar/metadata.json @@ -0,0 +1,18 @@ +{ + "id": "hrmmar", + "name": "HRM Motion Artifacts removal", + "shortName":"HRM MA removal", + "icon": "app.png", + "version":"0.01", + "description": "Removes Motion Artifacts in Bangle.js's heart rate sensor data.", + "type": "bootloader", + "tags": "health", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"hrmmar.boot.js","url":"boot.js"}, + {"name":"hrmfftelim","url":"fftelim.js"}, + {"name":"hrmmar.settings.js","url":"settings.js"} + ], + "data": [{"name":"hrmmar.json"}] +} diff --git a/apps/hrmmar/settings.js b/apps/hrmmar/settings.js new file mode 100644 index 000000000..3c6e62c91 --- /dev/null +++ b/apps/hrmmar/settings.js @@ -0,0 +1,26 @@ +(function(back) { + var FILE = "hrmmar.json"; + // Load settings + var settings = Object.assign({ + mAremoval: 0, + }, require('Storage').readJSON(FILE, true) || {}); + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + // Show the menu + E.showMenu({ + "" : { "title" : "HRM MA removal" }, + "< Back" : () => back(), + 'MA removal': { + value: settings.mAremoval, + min: 0, max: 1, + format: v => ["None", "fft elim."][v], + onchange: v => { + settings.mAremoval = v; + writeSettings(); + } + }, + }); +}) From 3a45f155744e1a1887791073831ec3dbe33c88ba Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 27 Nov 2022 19:03:15 +0000 Subject: [PATCH 082/342] primtime lato, added debug feature --- apps/primetimelato/ChangeLog | 1 + apps/primetimelato/app.js | 28 ++++++++++++++++++++++++++-- apps/primetimelato/metadata.json | 4 ++-- apps/primetimelato/settings.js | 13 ++++++++++++- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/apps/primetimelato/ChangeLog b/apps/primetimelato/ChangeLog index 46690e360..1be18255b 100644 --- a/apps/primetimelato/ChangeLog +++ b/apps/primetimelato/ChangeLog @@ -1,2 +1,3 @@ 0.01: first release 0.02: added option to buzz on prime, with settings +0.03: added option to debug settings and test fw 2.15.93 load speed ups diff --git a/apps/primetimelato/app.js b/apps/primetimelato/app.js index 817da7cda..b4b9d5bb9 100644 --- a/apps/primetimelato/app.js +++ b/apps/primetimelato/app.js @@ -2,7 +2,8 @@ const h = g.getHeight(); const w = g.getWidth(); const SETTINGS_FILE = "primetimelato.json"; let settings; - +let setStr = 'U'; + Graphics.prototype.setFontLato = function(scale) { // Actual height 41 (43 - 3) this.setFontCustom( @@ -28,6 +29,22 @@ Graphics.prototype.setFontLatoSmall = function(scale) { function loadSettings() { settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; settings.buzz_on_prime = (settings.buzz_on_prime === undefined ? false : settings.buzz_on_prime); + settings.debug = (settings.debug === undefined ? false : settings.debug); + + switch(settings.buzz_on_prime) { + case true: + setStr = 'T'; + break; + + case false: + setStr = 'F'; + break; + + case undefined: + default: + setStr = 'U'; + break; + } } // creates a list of prime factors of n and outputs them as a string, if n is prime outputs "Prime Time!" @@ -69,9 +86,16 @@ function draw() { g.setColor(0,0,0); g.fillRect(Bangle.appRect); + g.setColor(100,100,100); + + if (settings.debug) { + g.setFontLatoSmall(); + g.setFontAlign(0, 0); + g.drawString(setStr, w/2, h/4); + } + g.setFontLato(); g.setFontAlign(0, 0); - g.setColor(100,100,100); g.drawString(timeStr, w/2, h/2); g.setFontLatoSmall(); diff --git a/apps/primetimelato/metadata.json b/apps/primetimelato/metadata.json index 6b292c380..dd200e5d3 100644 --- a/apps/primetimelato/metadata.json +++ b/apps/primetimelato/metadata.json @@ -1,6 +1,6 @@ { "id": "primetimelato", - "name": "Prime Time Lato Clock", - "version": "0.02", + "name": "Prime Time Lato", + "version": "0.03", "type": "clock", "description": "A clock that tells you the primes of the time in the Lato font", "icon": "app.png", diff --git a/apps/primetimelato/settings.js b/apps/primetimelato/settings.js index 5550055eb..069c976c8 100644 --- a/apps/primetimelato/settings.js +++ b/apps/primetimelato/settings.js @@ -3,7 +3,8 @@ // initialize with default settings... let s = { - 'buzz_on_prime': true + 'buzz_on_prime': true, + 'debug': false } // ...and overwrite them with any saved values @@ -29,6 +30,16 @@ s.buzz_on_prime = v; save(); }, + }, + + 'Debug': { + value: !!s.debug, + onchange: v => { + s.debug = v; + save(); + }, } + + }) }) From bc28900e60ee9cea407b1c21693064fa1c1210ab Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 14:58:39 +0100 Subject: [PATCH 083/342] launch - Use Bangle.showClock --- apps/launch/ChangeLog | 1 + apps/launch/app.js | 19 +++++++------------ apps/launch/metadata.json | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/apps/launch/ChangeLog b/apps/launch/ChangeLog index 5da1b2661..0aff8c49f 100644 --- a/apps/launch/ChangeLog +++ b/apps/launch/ChangeLog @@ -19,3 +19,4 @@ 0.17: Don't display 'Loading...' now the watch has its own loading screen 0.18: Add 'back' icon in top-left to go back to clock 0.19: Fix regression after back button added (returnToClock was called twice!) +0.20: Use Bangle.showClock for changing to clock diff --git a/apps/launch/app.js b/apps/launch/app.js index b8e598f73..36f3aaf4b 100644 --- a/apps/launch/app.js +++ b/apps/launch/app.js @@ -42,16 +42,6 @@ let apps = launchCache.apps; if (!settings.fullscreen) Bangle.loadWidgets(); -let returnToClock = function() { - // unload everything manually - // ... or we could just call `load();` but it will be slower - Bangle.setUI(); // remove scroller's handling - if (lockTimeout) clearTimeout(lockTimeout); - Bangle.removeListener("lock", lockHandler); - // now load the default clock - just call .bootcde as this has the code already - setTimeout(eval,0,s.read(".bootcde")); -} - E.showScroller({ h : 64*scaleval, c : apps.length, draw : (i, r) => { @@ -74,7 +64,12 @@ E.showScroller({ load(app.src); } }, - back : returnToClock // button press or tap in top left calls returnToClock now + back : Bangle.showClock, // button press or tap in top left shows clock now + remove : () => { + // cleanup the timeout to not leave anything behind after being removed from ram + if (lockTimeout) clearTimeout(lockTimeout); + Bangle.removeListener("lock", lockHandler); + } }); g.flip(); // force a render before widgets have finished drawing @@ -85,7 +80,7 @@ let lockHandler = function(locked) { if (lockTimeout) clearTimeout(lockTimeout); lockTimeout = undefined; if (locked) - lockTimeout = setTimeout(returnToClock, 10000); + lockTimeout = setTimeout(Bangle.showClock, 10000); } Bangle.on("lock", lockHandler); if (!settings.fullscreen) // finally draw widgets diff --git a/apps/launch/metadata.json b/apps/launch/metadata.json index ce9b1f801..4d0270e37 100644 --- a/apps/launch/metadata.json +++ b/apps/launch/metadata.json @@ -2,7 +2,7 @@ "id": "launch", "name": "Launcher", "shortName": "Launcher", - "version": "0.19", + "version": "0.20", "description": "This is needed to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", "readme": "README.md", "icon": "app.png", From beab5405c73af3d8bfb91b7b8293f34ff7d6d19e Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 28 Nov 2022 00:08:21 +0100 Subject: [PATCH 084/342] [sleeplogalarm] Correct filtering improve settings --- apps/sleeplogalarm/ChangeLog | 3 +- apps/sleeplogalarm/README.md | 3 +- apps/sleeplogalarm/lib.js | 64 +++++++++++++++----------------- apps/sleeplogalarm/metadata.json | 2 +- apps/sleeplogalarm/settings.js | 63 ++++++++++++++++--------------- apps/sleeplogalarm/widget.js | 4 +- 6 files changed, 69 insertions(+), 70 deletions(-) diff --git a/apps/sleeplogalarm/ChangeLog b/apps/sleeplogalarm/ChangeLog index 48d9a161d..80f8bd7e4 100644 --- a/apps/sleeplogalarm/ChangeLog +++ b/apps/sleeplogalarm/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Add "from Consec."-setting -0.03: Correct how to ignore last triggered alarm \ No newline at end of file +0.03: Correct how to ignore last triggered alarm +0.04: Make "disable alarm" possible on next day; correct alarm filtering; improve settings \ No newline at end of file diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 73847d6f1..29520dd09 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -17,8 +17,7 @@ This widget searches for active alarms and raises an own alarm event up to the d - __msg as prefix__ | use the customized message as prefix to the original message or replace it comlpetely if disabled __on__ / _off_ - __disable alarm__ | if enabled the original alarm will be disabled - _on_ / __off__ - This feature does not work for alarms on the next day! + _on_ / __off__ - __auto snooze__ | auto snooze option for the earlier alarm __on__ / _off_ - __Filter Alarm__ submenu diff --git a/apps/sleeplogalarm/lib.js b/apps/sleeplogalarm/lib.js index 3162c3f86..343e811af 100644 --- a/apps/sleeplogalarm/lib.js +++ b/apps/sleeplogalarm/lib.js @@ -9,18 +9,23 @@ function getNextAlarm(allAlarms, fo, withId) { }); // return next active alarms in range, filter for // active && not timer && not own alarm && - // after from && before to && includes msg && - // lastDate not today || after lastTime - return allAlarms.filter( + // after from && before to && includes msg + var ret = allAlarms.filter( a => a.on && !a.timer && a.id !== "sleeplog" && - a.t >= fo.from && a.t < fo.to && (!fo.msg || a.msg.includes(fo.msg)) && - fo.lastDate !== new Date().getDate() || a.t > fo.lastTime + a.t >= fo.from && a.t < fo.to && (!fo.msg || a.msg.includes(fo.msg)) ).map(a => { // add time to alarm a.tTo = sched.getTimeToAlarm(a); return a; }).filter(a => a.tTo // filter non active alarms // sort to get next alarm first - ).sort((a, b) => a.tTo - b.tTo)[0] || {}; + ).sort((a, b) => a.tTo - b.tTo); + // prevent triggering for an already triggered alarm again if available + if (fo.lastDate) { + var toLast = fo.lastDate - new Date().valueOf() + 1000; + if (toLast > 0) ret = ret.filter(a => a.tTo > toLast); + } + // return first entry + return ret[0] || {}; } exports = { @@ -35,12 +40,16 @@ exports = { msgAsPrefix: true, disableOnAlarm: false, // !!! not available if alarm is at the next day as: true, - filter_from: 3, - filter_to: 12, - filter_msg: "", - wid_hide: false, - wid_time: true, - wid_color: g.theme.dark ? 65504 : 31, // yellow or blue + filter: { + from: 3 * 36E5, + to: 12 * 36E5, + msg: "" + }, + wid: { + hide: false, + time: true, + color: g.theme.dark ? 65504 : 31 // yellow or blue + } }, require("Storage").readJSON("sleeplogalarm.settings.json", true) || {}); }, @@ -53,13 +62,7 @@ exports = { var settings = exports.getSettings(); // set the alarm time - this.time = getNextAlarm(sched.getAlarms(), { - from: settings.filter_from * 36E5, - to: settings.filter_to * 36E5, - msg: settings.filter_msg, - lastTime: settings.lastTime, - lastDate: settings.lastDate - }).t; + this.time = getNextAlarm(sched.getAlarms(), settings.filter).t; // abort if no alarm time could be found inside range if (!this.time) return; @@ -90,13 +93,7 @@ exports = { var allAlarms = sched.getAlarms(); // find first active alarm - var alarm = getNextAlarm(sched.getAlarms(), { - from: settings.filter_from * 36E5, - to: settings.filter_to * 36E5, - msg: settings.filter_msg, - lastTime: settings.lastTime, - lastDate: settings.lastDate - }, settings.disableOnAlarm); + var alarm = getNextAlarm(sched.getAlarms(), settings.filter, settings.disableOnAlarm); // return if no alarm is found if (!alarm) return; @@ -105,12 +102,12 @@ exports = { var now = new Date(); // get date of the alarm - var aDate = new Date(now + alarm.tTo).getDate(); + var aDate = new Date(now + alarm.tTo); - // disable earlier triggered alarm if set and on the same day - if (settings.disableOnAlarm && now.getDate() === aDate) { - // set alarms last to today - allAlarms[alarm.idx].last = aDate; + // disable earlier triggered alarm if set + if (settings.disableOnAlarm) { + // set alarms last to the day it would trigger + allAlarms[alarm.idx].last = aDate.getDate(); // remove added indexes allAlarms = allAlarms.map(a => { delete a.idx; @@ -131,9 +128,8 @@ exports = { del: true }); - // save time of alarm and this day to prevent triggering for the same alarm again - settings.lastTime = alarm.t; - settings.lastDate = now.getDate(); + // save date of the alarm to prevent triggering for the same alarm again + settings.filter.lastDate = aDate.valueOf(); require("Storage").writeJSON("sleeplogalarm.settings.json", settings); // write changes diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 813f0fe18..1930a0ee3 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -2,7 +2,7 @@ "id":"sleeplogalarm", "name":"Sleep Log Alarm", "shortName": "SleepLogAlarm", - "version": "0.03", + "version": "0.04", "description": "Enhance your morning and let your alarms wake you up when you are in light sleep.", "icon": "app.png", "type": "widget", diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index 3a37b7274..1f3a13272 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -8,19 +8,16 @@ } // read input from keyboard - function readInput(setting, retPos, cb) { - setTimeout((setting, retPos, cb) => { + function readInput(v, cb) { + // setTimeout required to load after menu refresh + setTimeout((v, cb) => { if (require("Storage").read("textinput")) { g.clear(); - require("textinput").input({text: settings[setting]}).then(result => { - settings[setting] = result; - writeSetting(); - cb(retPos); - }); + require("textinput").input({text: v}).then(v => cb(v)); } else { - E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb(retPos)); + E.showAlert(/*LANG*/"No keyboard app installed").then(() => cb()); } - }, 0, setting, retPos, cb); + }, 0, v, cb); } // show widget menu @@ -32,36 +29,39 @@ }, /*LANG*/"< Back": () => showMain(8), /*LANG*/"time from": { - value: settings.filter_from, - step: 0.25, + value: settings.filter.from / 6E4, + step: 10, min: 0, - max: 24, + max: 1440, wrap: true, noList: true, - format: v => (0|v) + ":" + ("" + (0|(v%1 * 60))).padStart(2, "0"), + format: v => (0|v/60) + ":" + ("" + (v%60)).padStart(2, "0"), onchange: v => { - settings.filter_from = v; + settings.filter.from = v * 6E4; writeSetting(); } }, /*LANG*/"time to": { - value: settings.filter_to, - step: 0.25, + value: settings.filter.to / 6E4, + step: 10, min: 0, - max: 24, + max: 1440, wrap: true, noList: true, - format: v => (0|v) + ":" + ("" + (0|(v%1 * 60))).padStart(2, "0"), + format: v => (0|v/60) + ":" + ("" + (v%60)).padStart(2, "0"), onchange: v => { - settings.filter_to = v; + settings.filter.to = v * 6E4; writeSetting(); } }, /*LANG*/"msg includes": { - value: settings.filter_msg, + value: settings.filter.msg, format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, - // setTimeout required to load after menu refresh - onchange: () => readInput("filter_msg", 3, showFilterMenu) + onchange: v => readInput(v, v => { + settings.filter.msg = v; + writeSetting(); + showFilterMenu(3); + }) } }; var menu = E.showMenu(filterMenu); @@ -80,27 +80,27 @@ }, /*LANG*/"< Back": () => showMain(9), /*LANG*/"hide": { - value: settings.wid_hide, + value: settings.wid.hide, onchange: v => { - settings.wid_hide = v; + settings.wid.hide = v; writeSetting(); } }, /*LANG*/"show time": { - value: settings.wid_time, + value: settings.wid.time, onchange: v => { - settings.wid_time = v; + settings.wid.time = v; writeSetting(); } }, /*LANG*/"color": { - value: colVal.indexOf(settings.wid_color), + value: colVal.indexOf(settings.wid.color), min: 0, max: colVal.length -1, wrap: true, format: v => colName[v], onchange: v => { - settings.wid_color = colVal[v]; + settings.wid.color = colVal[v]; writeSetting(); } } @@ -147,8 +147,11 @@ /*LANG*/"msg": { value: settings.msg, format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, - // setTimeout required to load after menu refresh - onchange: () => readInput("msg", 4, showMain) + onchange: v => readInput(v, v => { + settings.msg = v; + writeSetting(); + showMenu(4); + }) }, /*LANG*/"msg as prefix": { value: settings.msgAsPrefix, diff --git a/apps/sleeplogalarm/widget.js b/apps/sleeplogalarm/widget.js index 991238140..e3171751f 100644 --- a/apps/sleeplogalarm/widget.js +++ b/apps/sleeplogalarm/widget.js @@ -11,7 +11,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable earlier: settings.earlier, draw: function () { // draw zzz - g.reset().setColor(settings.wid_color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); + g.reset().setColor(settings.wid.color).drawImage(atob("BwoBD8SSSP4EEEDg"), this.x + 1, this.y); // call function to draw the time of alarm if a alarm is found if (this.time) this.drawTime(this.time + 1); }, @@ -20,7 +20,7 @@ if ((require("Storage").readJSON("sleeplogalarm.settings.json", true) || {enable }; // add function to draw the time of alarm if enabled - if (settings.wid_time) WIDGETS.sleeplogalarm.drawTime = function(time) { + if (settings.wid.time) WIDGETS.sleeplogalarm.drawTime = function(time) { // directly include Font4x5Numeric g.setFontCustom(atob("CAZMA/H4PgvXoK1+DhPg7W4P1uCEPg/X4O1+AA=="), 46, atob("AgQEAgQEBAQEBAQE"), 5).setFontAlign(1, 1); g.drawString(0|(time / 36E5), this.x + this.width + 1, this.y + 17); From a011f929fd7e29f67fe3b01e86bc41477f1c4ed0 Mon Sep 17 00:00:00 2001 From: glemco Date: Sat, 26 Nov 2022 20:12:08 +0100 Subject: [PATCH 085/342] Rolled back agenda clkinfo --- apps/agenda/ChangeLog | 1 - apps/agenda/agenda.clkinfo.js | 29 ++++++++++------------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index 6384fe887..7f749ff25 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -7,4 +7,3 @@ 0.07: Clkinfo improvements. 0.08: Fix error in clkinfo (didn't require Storage & locale) Fix clkinfo icon -0.09: Clkinfo new fields and filter past events. diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index 43b7cf57e..baa8b9516 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -1,34 +1,25 @@ (function() { var agendaItems = { - name: "Agenda", - img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), - dynamic: true, - items: [] - }; - var storage = require("Storage"); + name: "Agenda", + img: atob("GBiBAAAAAAAAAADGMA///w///wf//wAAAA///w///w///w///x///h///h///j///D///X//+f//8wAABwAADw///w///wf//gAAAA=="), + items: [] + }; var locale = require("locale"); var now = new Date(); - var agenda = (storage.readJSON("android.calendar.json",true)||[]) - .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) - .sort((a,b)=>a.timestamp - b.timestamp); - var settings = storage.readJSON("agenda.settings.json",true)||{}; + var agenda = require("Storage").readJSON("android.calendar.json") + .filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000) + .sort((a,b)=>a.timestamp - b.timestamp); agenda.forEach((entry, i) => { + var title = entry.title.slice(0,12); var date = new Date(entry.timestamp*1000); var dateStr = locale.date(date).replace(/\d\d\d\d/,""); - var dateStrToday = locale.date(new Date()).replace(/\d\d\d\d/,""); - var timeStr = locale.time(date); - //maybe not the most efficient.. - var shortTxt = (dateStrToday == dateStr) ? timeStr : dateStr; dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; - if(!settings.pastEvents && entry.timestamp + entry.durationInSeconds < (new Date())/1000) - return; - agendaItems.items.push({ - name: null, - get: () => ({ text: title + "\n" + dateStr, short: shortTxt, img: null}), + name: "Agenda "+i, + get: () => ({ text: title + "\n" + dateStr, img: null}), show: function() { agendaItems.items[i].emit("redraw"); }, hide: function () {} }); From 7d253a2d5ffc9eeb302ba3586fed432103f8d946 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 09:46:25 +0000 Subject: [PATCH 086/342] let users know about new firmware --- loader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader.js b/loader.js index 251f94ff1..c525fd963 100644 --- a/loader.js +++ b/loader.js @@ -16,7 +16,7 @@ if (window.location.host=="banglejs.com") { 'This is not the official Bangle.js App Loader - you can try the Official Version here.'; } -var RECOMMENDED_VERSION = "2v15"; +var RECOMMENDED_VERSION = "2v16"; // could check http://www.espruino.com/json/BANGLEJS.json for this // We're only interested in Bangles From e2da2a87a8dc7845c5c39fcac01ec59467fbce92 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 10:09:55 +0000 Subject: [PATCH 087/342] 0.03: Added support for locale based time ref #2311, fix #2317 --- apps/slopeclock/ChangeLog | 1 + apps/slopeclock/app.js | 5 +++-- apps/slopeclock/metadata.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/slopeclock/ChangeLog b/apps/slopeclock/ChangeLog index af766d95d..2eb04a4f0 100644 --- a/apps/slopeclock/ChangeLog +++ b/apps/slopeclock/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Reset font to save some memory during remove +0.03: Added support for locale based time diff --git a/apps/slopeclock/app.js b/apps/slopeclock/app.js index 178084fb0..cc3dce630 100644 --- a/apps/slopeclock/app.js +++ b/apps/slopeclock/app.js @@ -34,8 +34,9 @@ let draw = function() { x = R.w / 2; y = R.y + R.h / 2 - 12; // 12 = room for date var date = new Date(); - var hourStr = date.getHours(); - var minStr = date.getMinutes().toString().padStart(2,0); + var local_time = require("locale").time(date, 1); + var hourStr = local_time.split(":")[0].trim().padStart(2,'0'); + var minStr = local_time.split(":")[1].trim().padStart(2, '0'); dateStr = require("locale").dow(date, 1).toUpperCase()+ " "+ require("locale").date(date, 0).toUpperCase(); diff --git a/apps/slopeclock/metadata.json b/apps/slopeclock/metadata.json index 18820b2cc..6ee78350f 100644 --- a/apps/slopeclock/metadata.json +++ b/apps/slopeclock/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclock", "name": "Slope Clock", - "version":"0.02", + "version":"0.03", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 83279f4cf729da0e172f2d50e270ea4422a9cf07 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 10:54:05 +0000 Subject: [PATCH 088/342] Ensure you don't have to favourite bootloader/etc - they just get installed automatically --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index aba9b6a51..f3f54106b 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit aba9b6a51fe02dfbde307c303560b8382857916d +Subproject commit f3f54106b3d7f84927ff734b715023a49a87cc6f From eba77c8a9915180d1b822b04c292b7f68a4952fd Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 11:16:36 +0000 Subject: [PATCH 089/342] openstmap 0.15: Make track drawing an option (default off) --- apps/openstmap/ChangeLog | 1 + apps/openstmap/README.md | 9 +++++++-- apps/openstmap/app.js | 22 +++++++++++++++------- apps/openstmap/metadata.json | 3 ++- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/apps/openstmap/ChangeLog b/apps/openstmap/ChangeLog index 7f22014ae..7f788c139 100644 --- a/apps/openstmap/ChangeLog +++ b/apps/openstmap/ChangeLog @@ -15,3 +15,4 @@ 0.14: Added ability to upload multiple sets of map tiles Support for zooming in on map Satellite count moved to widget bar to leave more room for the map +0.15: Make track drawing an option (default off) diff --git a/apps/openstmap/README.md b/apps/openstmap/README.md index 707dbc7f8..f19b13bd1 100644 --- a/apps/openstmap/README.md +++ b/apps/openstmap/README.md @@ -26,11 +26,16 @@ can change settings, move the map around, and click `Get Map` again. ## Bangle.js App The Bangle.js app allows you to view a map - it also turns the GPS on and marks -the path that you've been travelling. +the path that you've been travelling (if enabled). * Drag on the screen to move the map * Press the button to bring up a menu, where you can zoom, go to GPS location -or put the map back in its default location +, put the map back in its default location, or choose whether to draw the currently +recording GPS track (from the `Recorder` app). + +**Note:** If enabled, drawing the currently recorded GPS track can take a second +or two (which happens after you've finished scrolling the screen with your finger). + ## Library diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 9df4fa83f..89e2d2ddb 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -4,19 +4,23 @@ var R; var fix = {}; var mapVisible = false; var hasScrolled = false; +var settings = require("Storage").readJSON("openstmap.json",1)||{}; // Redraw the whole page function redraw() { g.setClipRect(R.x,R.y,R.x2,R.y2); m.draw(); drawMarker(); - if (HASWIDGETS && WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { - g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later - WIDGETS["gpsrec"].plotTrack(m); - } - if (HASWIDGETS && WIDGETS["recorder"] && WIDGETS["recorder"].plotTrack) { - g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later - WIDGETS["recorder"].plotTrack(m); + // if track drawing is enabled... + if (settings.drawTrack) { + if (HASWIDGETS && WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { + g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later + WIDGETS["gpsrec"].plotTrack(m); + } + if (HASWIDGETS && WIDGETS["recorder"] && WIDGETS["recorder"].plotTrack) { + g.setColor("#f00").flip(); // force immediate draw on double-buffered screens - track will update later + WIDGETS["recorder"].plotTrack(m); + } } g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); } @@ -76,6 +80,10 @@ function showMap() { m.scale *= 2; showMap(); }, + /*LANG*/"Draw Track": { + value : !!settings.drawTrack, + onchange : v => { settings.drawTrack=v; require("Storage").writeJSON("openstmap.json",settings); } + }, /*LANG*/"Center Map": () =>{ m.lat = m.map.lat; m.lon = m.map.lon; diff --git a/apps/openstmap/metadata.json b/apps/openstmap/metadata.json index 09b4c68e3..819dc4122 100644 --- a/apps/openstmap/metadata.json +++ b/apps/openstmap/metadata.json @@ -2,7 +2,7 @@ "id": "openstmap", "name": "OpenStreetMap", "shortName": "OpenStMap", - "version": "0.14", + "version": "0.15", "description": "Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are. Once installed this also adds map functionality to `GPS Recorder` and `Recorder` apps", "readme": "README.md", "icon": "app.png", @@ -15,6 +15,7 @@ {"name":"openstmap.app.js","url":"app.js"}, {"name":"openstmap.img","url":"app-icon.js","evaluate":true} ], "data": [ + {"name":"openstmap.json"}, {"wildcard":"openstmap.*.json"}, {"wildcard":"openstmap.*.img"} ] From b097b93bbfde10cd2e76ebcb9911f337c4cbc0a5 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 13:55:02 +0000 Subject: [PATCH 090/342] active pedometer notes --- apps/activepedom/README.md | 8 +++++++- apps/activepedom/metadata.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/activepedom/README.md b/apps/activepedom/README.md index ac32a1dd6..06ad280ee 100644 --- a/apps/activepedom/README.md +++ b/apps/activepedom/README.md @@ -1,6 +1,11 @@ # Active Pedometer + Pedometer that filters out arm movement and displays a step goal progress. +**Note:** Since creation of this app, Bangle.js's step counting algorithm has +improved significantly - and as a result the algorithm in this app (which + runs *on top* of Bangle.js's algorithm) may no longer be accurate. + I changed the step counting algorithm completely. Now every step is counted when in status 'active', if the time difference between two steps is not too short or too long. To get in 'active' mode, you have to reach the step threshold before the active timer runs out. @@ -9,6 +14,7 @@ When you reach the step threshold, the steps needed to reach the threshold are c Steps are saved to a datafile every 5 minutes. You can watch a graph using the app. ## Screenshots + * 600 steps ![](600.png) @@ -70,4 +76,4 @@ Steps are saved to a datafile every 5 minutes. You can watch a graph using the a ## Requests -If you have any feature requests, please post in this forum thread: http://forum.espruino.com/conversations/345754/ \ No newline at end of file +If you have any feature requests, please post in this forum thread: http://forum.espruino.com/conversations/345754/ diff --git a/apps/activepedom/metadata.json b/apps/activepedom/metadata.json index 4deb7006d..81bafb573 100644 --- a/apps/activepedom/metadata.json +++ b/apps/activepedom/metadata.json @@ -3,7 +3,7 @@ "name": "Active Pedometer", "shortName": "Active Pedometer", "version": "0.09", - "description": "Pedometer that filters out arm movement and displays a step goal progress. Steps are saved to a daily file and can be viewed as graph.", + "description": "(NOT RECOMMENDED) Pedometer that filters out arm movement and displays a step goal progress. Steps are saved to a daily file and can be viewed as graph. The `Health` app now provides step logging and graphs.", "icon": "app.png", "tags": "outdoors,widget", "supports": ["BANGLEJS"], From 8678d0cc2137c0d2344f71f92912df46daa2302f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 14:22:35 +0000 Subject: [PATCH 091/342] slight tweaks to https://github.com/espruino/BangleApps/pull/2304/ --- apps/android/ChangeLog | 1 + apps/android/README.md | 2 ++ apps/android/boot.js | 48 ++++++++++++++++---------------------- apps/android/metadata.json | 2 +- apps/android/settings.js | 16 ++++++------- 5 files changed, 32 insertions(+), 37 deletions(-) diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index fcb139c94..f71e94cf7 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -15,3 +15,4 @@ 0.15: Allow method/body/headers to be specified for `http` (needs Gadgetbridge 0.68.0b or later) 0.16: Bangle.http now fails immediately if there is no Bluetooth connection (fix #2152) 0.17: Now kick off Calendar sync as soon as connected to Gadgetbridge +0.18: If connected to Gadgetbridge, allow GPS forwarding from phone (Gadgetbridge code still not merged) diff --git a/apps/android/README.md b/apps/android/README.md index f9ab73699..c76e6e528 100644 --- a/apps/android/README.md +++ b/apps/android/README.md @@ -20,6 +20,8 @@ It contains: of Gadgetbridge - making your phone make noise so you can find it. * `Keep Msgs` - default is `Off`. When Gadgetbridge disconnects, should Bangle.js keep any messages it has received, or should it delete them? +* `Overwrite GPS` - when GPS is requested by an app, this doesn't use Bangle.js's GPS +but instead asks Gadgetbridge on the phone to use the phone's GPS * `Messages` - launches the messages app, showing a list of messages ## How it works diff --git a/apps/android/boot.js b/apps/android/boot.js index 8d9270b2a..8e75241e7 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -137,8 +137,7 @@ Bangle.emit('gps', event); }, "is_gps_active": function() { - const gpsActive = originalIsGpsOn(); - sendGPSPowerStatus(gpsActive); + gbSend({ t: "gps_power", status: Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0 }); } }; var h = HANDLERS[event.t]; @@ -202,34 +201,27 @@ if (isFinite(msg.id)) return gbSend({ t: "notify", n:response?"OPEN":"DISMISS", id: msg.id }); // error/warn here? }; - // GPS overwrite logic - // Save current logic - const originalSetGpsPower = Bangle.setGPSPower; - const originalIsGpsOn = Bangle.isGPSOn; - - function sendGPSPowerStatus(status) { gbSend({ t: "gps_power", status: status }); } - - // Replace set GPS power logic to suppress activation of gps, if the overwrite option is active - Bangle.setGPSPower = (isOn, appID) => { - const currentSettings = require("Storage").readJSON("android.settings.json",1)||{}; - if (!currentSettings.overwriteGps) { - originalSetGpsPower(isOn, appID); - } else { - sendGPSPowerStatus(Bangle.isGPSOn()); - const logMessage = 'Ignore gps power change due to the gps overwrite from android integration app'; - console.log(logMessage); - Bluetooth.println(logMessage); + if (settings.overwriteGps) { // if the overwrite option is set../ + // Save current logic + const originalSetGpsPower = Bangle.setGPSPower; + // Replace set GPS power logic to suppress activation of gps (and instead request it from the phone) + Bangle.setGPSPower = (isOn, appID) => { + // if not connected, use old logic + if (!NRF.getSecurityStatus().connected) return originalSetGpsPower(isOn, appID); + // Emulate old GPS power logic + if (!Bangle._PWR) Bangle._PWR={}; + if (!Bangle._PWR.GPS) Bangle._PWR.GPS=[]; + if (!appID) appID="?"; + if (isOn && !Bangle._PWR.GPS.includes(appID)) Bangle._PWR.GPS.push(appID); + if (!isOn && Bangle._PWR.GPS.includes(appID)) Bangle._PWR.GPS.splice(Bangle._PWR.GPS.indexOf(appID),1); + let pwr = Bangle._PWR.GPS.length>0; + gbSend({ t: "gps_power", status: pwr }); + return pwr; } - } - - // Replace check if the GPS is on, to show it as always active, if the overwrite option is set - Bangle.isGPSOn = () => { - const currentSettings = require("Storage").readJSON("android.settings.json",1)||{}; - if (!currentSettings.overwriteGps) { - return originalIsGpsOn(); - } else { - return true; + // Replace check if the GPS is on to check the _PWR variable + Bangle.isGPSOn = () => { + return Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0; } } diff --git a/apps/android/metadata.json b/apps/android/metadata.json index ac47449d6..ad5f09243 100644 --- a/apps/android/metadata.json +++ b/apps/android/metadata.json @@ -2,7 +2,7 @@ "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.17", + "version": "0.18", "description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.", "icon": "app.png", "tags": "tool,system,messages,notifications,gadgetbridge", diff --git a/apps/android/settings.js b/apps/android/settings.js index 94a1eba0b..b3057e888 100644 --- a/apps/android/settings.js +++ b/apps/android/settings.js @@ -1,12 +1,6 @@ (function(back) { - function onGpsOverwriteChange(newValue) { - if (newValue) { - Bangle.setGPSPower(false, 'android'); - } - settings.overwriteGps = newValue; - updateSettings(); - } + function gb(j) { Bluetooth.println(JSON.stringify(j)); @@ -34,7 +28,13 @@ }, /*LANG*/"Overwrite GPS" : { value : !!settings.overwriteGps, - onchange: onGpsOverwriteChange + onchange: newValue => { + if (newValue) { + Bangle.setGPSPower(false, 'android'); + } + settings.overwriteGps = newValue; + updateSettings(); + } }, /*LANG*/"Messages" : ()=>load("messages.app.js"), }; From d0d35ecec7f101d38c3db02603e1a0a202d485ff Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 14:48:46 +0000 Subject: [PATCH 092/342] renaming --- apps/messagegui/metadata.json | 2 +- apps/messages/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 7444050fd..c92fa90f5 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,6 +1,6 @@ { "id": "messagegui", - "name": "Messages", + "name": "Message UI", "version": "0.55", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index f94f01c26..89140efab 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -2,7 +2,7 @@ "id": "messages", "name": "Messages", "version": "0.01", - "description": "Library to handle message events", + "description": "Library to handle, load and store message events received from Android/iOS", "icon": "app.png", "type": "module", "tags": "tool,system", From a7364f716b488f0294d92a71e6dcf5baa0120989 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 15:03:00 +0000 Subject: [PATCH 093/342] Keep messages version rising so it'll actually update to the new version automatically --- apps/messages/ChangeLog | 2 +- apps/messages/metadata.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index b0a84783b..c984e4a0f 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1 +1 @@ -0.01: Moved messages library into standalone library \ No newline at end of file +0.55: Moved messages library into standalone library diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 89140efab..74c89b1b4 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.01", + "version": "0.55", "description": "Library to handle, load and store message events received from Android/iOS", "icon": "app.png", "type": "module", From e8163a6f14986d4ee47e897d94bba6daf234fb81 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 28 Nov 2022 15:04:16 +0000 Subject: [PATCH 094/342] tweaks to stop errors if removing >1 app --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index f3f54106b..f15e99fbe 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit f3f54106b3d7f84927ff734b715023a49a87cc6f +Subproject commit f15e99fbe25b2991719011e6da9bc9c7be401a7e From 03f40ffca15b085287f2292cc6c1ff33a611c14d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 28 Nov 2022 19:33:50 +0100 Subject: [PATCH 095/342] taglaunch: Backport PR 2316 for launch --- apps/taglaunch/ChangeLog | 1 + apps/taglaunch/app.js | 19 +++++++------------ apps/taglaunch/metadata.json | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/apps/taglaunch/ChangeLog b/apps/taglaunch/ChangeLog index 5560f00bc..981f50386 100644 --- a/apps/taglaunch/ChangeLog +++ b/apps/taglaunch/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Use Bangle.showClock for changing to clock (Backport from launch) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 07a7021db..c940284c2 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -69,16 +69,6 @@ let tagKeys = Object.keys(tags).filter(tag => tag !== "clock" || settings.showCl if (!settings.fullscreen) Bangle.loadWidgets(); -let returnToClock = function() { - // unload everything manually - // ... or we could just call `load();` but it will be slower - Bangle.setUI(); // remove scroller's handling - if (lockTimeout) clearTimeout(lockTimeout); - Bangle.removeListener("lock", lockHandler); - // now load the default clock - just call .bootcde as this has the code already - setTimeout(eval,0,s.read(".bootcde")); -}; - let showTagMenu = (tag) => { E.showScroller({ h : 64*scaleval, c : appsByTag[tag].length, @@ -121,7 +111,12 @@ let showMainMenu = () => { let tag = tagKeys[i]; showTagMenu(tag); }, - back : returnToClock // button press or tap in top left calls returnToClock now + back : Bangle.showClock, // button press or tap in top left shows clock now + remove : () => { + // cleanup the timeout to not leave anything behind after being removed from ram + if (lockTimeout) clearTimeout(lockTimeout); + Bangle.removeListener("lock", lockHandler); + } }); }; showMainMenu(); @@ -134,7 +129,7 @@ let lockHandler = function(locked) { if (lockTimeout) clearTimeout(lockTimeout); lockTimeout = undefined; if (locked) { - lockTimeout = setTimeout(returnToClock, 10000); + lockTimeout = setTimeout(Bangle.showClock, 10000); } }; Bangle.on("lock", lockHandler); diff --git a/apps/taglaunch/metadata.json b/apps/taglaunch/metadata.json index aded51314..d7f1954b1 100644 --- a/apps/taglaunch/metadata.json +++ b/apps/taglaunch/metadata.json @@ -2,7 +2,7 @@ "id": "taglaunch", "name": "Tag Launcher", "shortName": "Taglauncher", - "version": "0.01", + "version": "0.02", "description": "Launcher that puts all applications into submenus based on their tag. With many applications installed this can result in a faster application selection than the linear access of the default launcher.", "readme": "README.md", "icon": "app.png", From 13bbf669b4a768b16b9ed629ee97d27a210f6e03 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 29 Oct 2022 14:17:40 +0200 Subject: [PATCH 096/342] fastload - Add fastload app --- apps/fastload/ChangeLog | 1 + apps/fastload/README.md | 1 + apps/fastload/boot.js | 22 ++++++++++++++++++++++ apps/fastload/icon.png | Bin 0 -> 1076 bytes apps/fastload/metadata.json | 14 ++++++++++++++ 5 files changed, 38 insertions(+) create mode 100644 apps/fastload/ChangeLog create mode 100644 apps/fastload/README.md create mode 100644 apps/fastload/boot.js create mode 100644 apps/fastload/icon.png create mode 100644 apps/fastload/metadata.json diff --git a/apps/fastload/ChangeLog b/apps/fastload/ChangeLog new file mode 100644 index 000000000..2286a7f70 --- /dev/null +++ b/apps/fastload/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/fastload/README.md b/apps/fastload/README.md new file mode 100644 index 000000000..95b87f0fe --- /dev/null +++ b/apps/fastload/README.md @@ -0,0 +1 @@ +# Fastload diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js new file mode 100644 index 000000000..7787aaa83 --- /dev/null +++ b/apps/fastload/boot.js @@ -0,0 +1,22 @@ +{ +let loadingScreen = function(){ + g.reset(); + + let x = g.getWidth()/2; + let y = g.getHeight()/2; + g.setColor(g.theme.bg); + g.fillRect(x-49, y-19, x+49, y+19); + g.setColor(g.theme.fg); + g.drawRect(x-50, y-20, x+50, y+20); + g.setFont("6x8"); + g.setFontAlign(0,0); + g.drawString("Fastloading...", x, y); + g.flip(true); +}; + +// only needed to show "Fastloading..." on starting the launcher +Bangle.load = (o => (name) => { + if (Bangle.uiRemove) loadingScreen(); + setTimeout(o,0,name); +})(Bangle.load); +} diff --git a/apps/fastload/icon.png b/apps/fastload/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe9afe6ec8c6f7fd0f639a99c578b2247b716f8 GIT binary patch literal 1076 zcmV-41k3x0P)~AYu0?%tog6?U;p9%sRT2TB)ukSp#dz$xi|w0qRoi)GcxY$nU2A7JdK}G zX<}oT)EmrtEyNS}Lv!d_+uak=2|5RF3U9Mr@Tz^%1KuM#5zpxkylOAQl#;>WYCMCJ zkFuZP99TM1f`>4!`?p?eE6RkQjAwHKui7bP!6(8elPCPwWx>N^Im1`5zAX5=n?Q_X zqcFf1@OK9TxTFmDTVy-zUM!u^{&alY0=$BqO4xx{V6+Lu4H@^%)p{l#EfO3Caj*%% z?}B4z>BT1ZjtVn%M0roeJiLKpo3z;-VY2jFle*WjqYJLKG#y`P{SEI!f0KSTW!!fd zXBWh7GTvzcUTcqJ^s`L1<3CjtJgjRIylP{DGgfC}5^j_oPVdAC-GD8`huAj3-ox>+ z&8iOJYi&Qi#GV#|y`mfVnfSIrhlg=_Y;!3_j$#1q*!|tWPr>^c9o`w+%$2SvMcMP3 zFS(g|GNZ$nV*NC1FBpDJeEzzR|UcE z!jin;8z~Wjs3PFE5Phy*U8emLa04Q7~m2iYHg&fpE zh!40aqkeg;|3wI^TWO_w_;tEG-?pQz@ga*E)Fo2KUfpJYv!$!nzrre3sCLAMojRdB z!Gp2xd*Ls7yV@c|uove6*hre#S+F(uES8Vpf)4xa(>z0+tNxL_YW#=`%L3^} uiLj<05`wk^_({lDZWdObv7XVjq5lAm2P;)U!_=Ap0000 Date: Tue, 22 Nov 2022 19:05:12 +0100 Subject: [PATCH 097/342] fastload - Allow redirecting to launcher for back function of setUI --- apps/fastload/boot.js | 55 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 7787aaa83..11ce0563b 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -1,4 +1,6 @@ { +const SETTINGS = require("Storage").readJSON("fastload.json") || {}; + let loadingScreen = function(){ g.reset(); @@ -14,9 +16,58 @@ let loadingScreen = function(){ g.flip(true); }; -// only needed to show "Fastloading..." on starting the launcher +let cache = require("Storage").readJSON("fastload.cache") || {}; + +function checkApp(n){ + print("checking", n); + // no widgets, no problem + if (!global.WIDGETS) return true; + let app = require("Storage").read(n); + if (cache[n] && E.CRC32(app) == cache[n].crc) + return cache[n].fast + cache[n] = {}; + cache[n].fast = app.includes("Bangle.loadWidgets"); + cache[n].crc = E.CRC32(app); + require("Storage").writeJSON("fastload.cache", cache); + print("updated cache", cache[n]); + return cache[n].fast; +} + +global._load = load; + +function slowload(n){ + print("slowload", n); + global._load(n); +} + +function fastload(n){ + print("fastload", n) + if (!n || checkApp(n)){ + print("actually try fastloading using Bangle.load"); + // Bangle.load can call load, to prevent recursion this must be the system load + global.load = slowload; + Bangle.load(n); + // if fastloading worked, we need to set load back to this method + global.load = fastload; + } + else + slowload(n); +}; +global.load = fastload; + Bangle.load = (o => (name) => { + print("Bangle.load", name); if (Bangle.uiRemove) loadingScreen(); - setTimeout(o,0,name); + if (SETTINGS.autoloadLauncher && !name){ + print("redirect to launcher"); + let orig = Bangle.load; + Bangle.load = (n)=>{ + Bangle.load = orig; + fastload(n); + } + Bangle.showLauncher(); + Bangle.load = orig; + } else + o(name); })(Bangle.load); } From 9a59935b218bc0d4274c13bba01a3f62cc3a87d6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 22 Nov 2022 20:52:09 +0100 Subject: [PATCH 098/342] fastload - Bump version --- apps/fastload/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 8bb37d138..01dab4a7c 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -1,7 +1,7 @@ { "id": "fastload", "name": "Fastload Utils", "shortName" : "Fastload Utils", - "version": "0.01", + "version": "0.02", "icon": "icon.png", "description": "Utilities for fastloading and switching between apps", "type":"bootloader", From 64567228a68892eeb58231c43f5892f3763f5eb3 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 14:50:22 +0100 Subject: [PATCH 099/342] fastload - Adds setting for always loading to launcher --- apps/fastload/metadata.json | 8 +++++--- apps/fastload/settings.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 apps/fastload/settings.js diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 01dab4a7c..5b46be322 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -1,7 +1,7 @@ { "id": "fastload", "name": "Fastload Utils", "shortName" : "Fastload Utils", - "version": "0.02", + "version": "0.03", "icon": "icon.png", "description": "Utilities for fastloading and switching between apps", "type":"bootloader", @@ -9,6 +9,8 @@ "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"fastload.5.boot.js","url":"boot.js"} - ] + {"name":"fastload.5.boot.js","url":"boot.js"}, + {"name":"fastload.settings.js","url":"settings.js"} + ], + "data": [{"name":"fastload.json"}] } diff --git a/apps/fastload/settings.js b/apps/fastload/settings.js new file mode 100644 index 000000000..69064c3d7 --- /dev/null +++ b/apps/fastload/settings.js @@ -0,0 +1,32 @@ +(function(back) { + var FILE="fastload.json"; + var settings; + + function writeSettings(key, value) { + var s = require('Storage').readJSON(FILE, true) || {}; + s[key] = value; + require('Storage').writeJSON(FILE, s); + readSettings(); + } + + function readSettings(){ + settings = require('Storage').readJSON(FILE, true) || {}; + } + + readSettings(); + + function buildMainMenu(){ + var mainmenu = { + '': { 'title': 'Fastload', back: back }, + 'Force load to launcher': { + value: !!settings.autoloadLauncher, + onchange: v => { + writeSettings("autoloadLauncher",v); + } + } + }; + return mainmenu; + } + + E.showMenu(buildMainMenu()); +}) From 65034377c69b56cadbbb60dd0206bc4a4a1a0924 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 19:19:33 +0100 Subject: [PATCH 100/342] fastload - Adds setting for hiding the loading screen --- apps/fastload/boot.js | 2 +- apps/fastload/settings.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 11ce0563b..c36c0921d 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -57,7 +57,7 @@ global.load = fastload; Bangle.load = (o => (name) => { print("Bangle.load", name); - if (Bangle.uiRemove) loadingScreen(); + if (Bangle.uiRemove && !SETTINGS.hideLoading) loadingScreen(); if (SETTINGS.autoloadLauncher && !name){ print("redirect to launcher"); let orig = Bangle.load; diff --git a/apps/fastload/settings.js b/apps/fastload/settings.js index 69064c3d7..4904e057e 100644 --- a/apps/fastload/settings.js +++ b/apps/fastload/settings.js @@ -23,6 +23,12 @@ onchange: v => { writeSettings("autoloadLauncher",v); } + }, + 'Hide "Fastloading..."': { + value: !!settings.hideLoading, + onchange: v => { + writeSettings("hideLoading",v); + } } }; return mainmenu; From 30b05f8d8eb70487d87d6f21be33cbaed4ffeeb2 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 27 Nov 2022 19:29:28 +0100 Subject: [PATCH 101/342] fastload - Adds a README --- apps/fastload/README.md | 22 +++++++++++++++++++++- apps/fastload/metadata.json | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/fastload/README.md b/apps/fastload/README.md index 95b87f0fe..a1feedcf8 100644 --- a/apps/fastload/README.md +++ b/apps/fastload/README.md @@ -1 +1,21 @@ -# Fastload +# Fastload Utils + +*EXPERIMENTAL* Use this with caution. When you find something misbehaving please check if the problem actually persists when removing this app. + +This allows fast loading of all apps with two conditions: +* Loaded app contains `Bangle.loadWidgets`. This is needed to prevent problems with apps not expecting widgets to be already loaded. +* Current app can be removed completely from RAM. + +## Settings + +* Allows to redirect all loads usually loading the clock to the launcher instead +* The "Fastloading..." screen can be switched off + +## Technical infos + +This is still experimental but it uses the same mechanism as `.bootcde` does. +It checks the app to be loaded for widget use and stores the result of that and a hash of the js in a cache. + +# Creator + +[halemmerich](https://github.com/halemmerich) diff --git a/apps/fastload/metadata.json b/apps/fastload/metadata.json index 5b46be322..15adcb7e3 100644 --- a/apps/fastload/metadata.json +++ b/apps/fastload/metadata.json @@ -3,7 +3,7 @@ "shortName" : "Fastload Utils", "version": "0.03", "icon": "icon.png", - "description": "Utilities for fastloading and switching between apps", + "description": "Enable experimental fastloading for more apps", "type":"bootloader", "tags": "system", "supports": ["BANGLEJS2"], From e86b716093deae94321a05a39650dd5620c7080c Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:02:58 +0100 Subject: [PATCH 102/342] fastload - Remove debug prints --- apps/fastload/boot.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index c36c0921d..0d8a888ac 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -19,7 +19,6 @@ let loadingScreen = function(){ let cache = require("Storage").readJSON("fastload.cache") || {}; function checkApp(n){ - print("checking", n); // no widgets, no problem if (!global.WIDGETS) return true; let app = require("Storage").read(n); @@ -29,21 +28,17 @@ function checkApp(n){ cache[n].fast = app.includes("Bangle.loadWidgets"); cache[n].crc = E.CRC32(app); require("Storage").writeJSON("fastload.cache", cache); - print("updated cache", cache[n]); return cache[n].fast; } global._load = load; function slowload(n){ - print("slowload", n); global._load(n); } function fastload(n){ - print("fastload", n) if (!n || checkApp(n)){ - print("actually try fastloading using Bangle.load"); // Bangle.load can call load, to prevent recursion this must be the system load global.load = slowload; Bangle.load(n); @@ -56,10 +51,8 @@ function fastload(n){ global.load = fastload; Bangle.load = (o => (name) => { - print("Bangle.load", name); if (Bangle.uiRemove && !SETTINGS.hideLoading) loadingScreen(); if (SETTINGS.autoloadLauncher && !name){ - print("redirect to launcher"); let orig = Bangle.load; Bangle.load = (n)=>{ Bangle.load = orig; From 88b9f7eac8bd7bd20bf863888b3fe3810c415cfb Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:17:10 +0100 Subject: [PATCH 103/342] fastload - Add versions to changelog --- apps/fastload/ChangeLog | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/fastload/ChangeLog b/apps/fastload/ChangeLog index 2286a7f70..53e3c2591 100644 --- a/apps/fastload/ChangeLog +++ b/apps/fastload/ChangeLog @@ -1 +1,3 @@ -0.01: New App! \ No newline at end of file +0.01: New App! +0.02: Allow redirection of loads to the launcher +0.03: Allow hiding the fastloading info screen From a8ba0658d9d3b2c287bbd96a5e9b44450b9be365 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 28 Nov 2022 20:26:46 +0100 Subject: [PATCH 104/342] fastload - Fix build warnings --- apps/fastload/boot.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/fastload/boot.js b/apps/fastload/boot.js index 0d8a888ac..c9271abbf 100644 --- a/apps/fastload/boot.js +++ b/apps/fastload/boot.js @@ -18,7 +18,7 @@ let loadingScreen = function(){ let cache = require("Storage").readJSON("fastload.cache") || {}; -function checkApp(n){ +let checkApp = function(n){ // no widgets, no problem if (!global.WIDGETS) return true; let app = require("Storage").read(n); @@ -33,11 +33,11 @@ function checkApp(n){ global._load = load; -function slowload(n){ +let slowload = function(n){ global._load(n); } -function fastload(n){ +let fastload = function(n){ if (!n || checkApp(n)){ // Bangle.load can call load, to prevent recursion this must be the system load global.load = slowload; From 7d8f813e2c46e5d5f912d352e3f1f466ec886a2f Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 28 Nov 2022 21:04:47 +0100 Subject: [PATCH 105/342] tetris: fix tag --- apps/tetris/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tetris/metadata.json b/apps/tetris/metadata.json index 5669d8953..f683a5be7 100644 --- a/apps/tetris/metadata.json +++ b/apps/tetris/metadata.json @@ -5,7 +5,7 @@ "description": "Tetris", "icon": "tetris.png", "readme": "README.md", - "tags": "games", + "tags": "game", "supports" : ["BANGLEJS2"], "storage": [ {"name":"tetris.app.js","url":"tetris.app.js"}, From 4f78515a716b7edb9933e5e44e960a4197f42469 Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 28 Nov 2022 21:21:36 +0100 Subject: [PATCH 106/342] [sleeplog] Reorder in README.md --- apps/sleeplog/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index 1970d8dde..ceb3418d9 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -27,16 +27,6 @@ Logfiles are not removed on un-/reinstall to prevent data loss. ### Main App Usage --- -#### View: -| Status | Color | Height | -|-------------|:------:|----------:| -| unknown | black | 0% | -| not worn | red | 40% | -| awake | green | 60% | -| light sleep | cyan | 80% | -| deep sleep | blue | 100% | -| consecutive | violet | as status | - #### Controls: - __swipe left & right__ to change the displayed day @@ -50,6 +40,16 @@ Logfiles are not removed on un-/reinstall to prevent data loss. - __use back button widget__ (upper left corner) exit the app +#### View: +| Status | Color | Height | +|-------------|:------:|----------:| +| unknown | black | 0% | +| not worn | red | 40% | +| awake | green | 60% | +| light sleep | cyan | 80% | +| deep sleep | blue | 100% | +| consecutive | violet | as status | + --- ### Settings Usage From 4283fa2d9d16b3d59625517431d29ea3de72b8b5 Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 28 Nov 2022 21:54:21 +0100 Subject: [PATCH 107/342] [sleeplogalarm] Add dependency in README --- apps/sleeplogalarm/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 29520dd09..09a30b7eb 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -1,6 +1,8 @@ # Sleep Log Alarm -This widget searches for active alarms and raises an own alarm event up to the defined time earlier, if in light sleep or awake phase. Optional the earlier alarm will only be triggered if comming from or in consecutive sleep. The settings of the earlier alarm can be adjusted and it is possible to filter the targeting alarms by time and message. By default the time of the targeting alarm is displayed inside the widget which can be adjusted, too. +This widget searches for active alarms and raises an own alarm event up to the defined time earlier, if in light sleep or awake phase. Optional the earlier alarm will only be triggered if comming from or in consecutive sleep. The settings of the earlier alarm can be adjusted and it is possible to filter the targeting alarms by time and message. By default the time of the targeting alarm is displayed inside the widget which can be adjusted, too. + +_This widget does not detect sleep by its own and requires the [sleeplog](/apps/?id=sleeplog) app to be installed._ --- ### Settings From 4d48b8c05bf1f5c27252ff0770ef47d6086e6263 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Mon, 28 Nov 2022 22:07:50 +0100 Subject: [PATCH 108/342] messagesmusic: Fix dependency on messages library (whoops) --- apps/messagesmusic/ChangeLog | 3 ++- apps/messagesmusic/metadata.json | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/messagesmusic/ChangeLog b/apps/messagesmusic/ChangeLog index 65fd09686..1b9622f24 100644 --- a/apps/messagesmusic/ChangeLog +++ b/apps/messagesmusic/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Remove one line of code that didn't do anything other than in some instances hinder the function of the app. -0.03: Use the new messages library \ No newline at end of file +0.03: Use the new messages library +0.04: Fix dependency on messages library \ No newline at end of file diff --git a/apps/messagesmusic/metadata.json b/apps/messagesmusic/metadata.json index ce5281563..22e0eff52 100644 --- a/apps/messagesmusic/metadata.json +++ b/apps/messagesmusic/metadata.json @@ -1,7 +1,7 @@ { "id": "messagesmusic", "name":"Messages Music", - "version":"0.03", + "version":"0.04", "description": "Uses Messages library to push a music message which in turn displays Messages app music controls", "icon":"app.png", "type": "app", @@ -13,6 +13,5 @@ {"name":"messagesmusic.app.js","url":"app.js"}, {"name":"messagesmusic.img","url":"app-icon.js","evaluate":true} ], - "dependencies" : { "messagelib":"module" } - + "dependencies":{"messages":"module"} } From 9c42820dd12c4d6afce3d46df41fdc0e2a3fea49 Mon Sep 17 00:00:00 2001 From: storm64 Date: Mon, 28 Nov 2022 22:08:11 +0100 Subject: [PATCH 109/342] [sleeplog] Correct typos found by @thyttan --- apps/sleeplog/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/sleeplog/README.md b/apps/sleeplog/README.md index ceb3418d9..71a7ddde2 100644 --- a/apps/sleeplog/README.md +++ b/apps/sleeplog/README.md @@ -8,9 +8,9 @@ It is using the built in movement calculation to decide your sleeping state. Whi #### Explanations * __Detection of Sleep__ - The movement value of bangle's build in health event that is triggered every 10 minutes is checked against the thresholds for light and deep sleep. If the measured movement is lower or eaqual to the __Deep Sleep__-threshold a deep sleep phase is detected for the last 10 minutes. If the threshold is exceeded but not the __Light Sleep__-threshold than the last timeperiod is detected as light sleep phase. On exceeding even this threshold it is assumed that you were awake. + The movement value of bangle's build in health event that is triggered every 10 minutes is checked against the thresholds for light and deep sleep. If the measured movement is lower or equal to the __Deep Sleep__-threshold a deep sleep phase is detected for the last 10 minutes. If the threshold is exceeded but not the __Light Sleep__-threshold than the last timeperiod is detected as light sleep phase. On exceeding even this threshold it is assumed that you were awake. * __True Sleep__ - The true sleep value is a simple addition of all registert sleeping periods. + The true sleep value is a simple addition of all registered sleeping periods. * __Consecutive Sleep__ In addition the consecutive sleep value tries to predict the complete time you were asleep, even the very light sleeping periods when an awake period is detected based on the registered movements. All periods after a sleeping period will be summarized until the first following non sleeping period that is longer then the maximal awake duration (__Max Awake__). If this sum is lower than the minimal consecutive sleep duration (__Min Consecutive__) it is not considered, otherwise it will be added to the consecutive sleep value. @@ -205,7 +205,7 @@ The passed data object has the following properties: #### To do list - Check translations. - Add more functionallities to interface.html. -- Enable recieving data on the Gadgetbridge side + testing. +- Enable receiving data on the Gadgetbridge side + testing. __Help appreciated!__ #### Requests, Bugs and Feedback From f75cfa573ea7d56ce14938cdfd0d23f9fd26c435 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Mon, 28 Nov 2022 22:38:16 +0100 Subject: [PATCH 110/342] messagesmusic: Fix loading message UI --- apps/messagesmusic/ChangeLog | 3 ++- apps/messagesmusic/app.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/messagesmusic/ChangeLog b/apps/messagesmusic/ChangeLog index 1b9622f24..8cc3079a3 100644 --- a/apps/messagesmusic/ChangeLog +++ b/apps/messagesmusic/ChangeLog @@ -1,4 +1,5 @@ 0.01: New App! 0.02: Remove one line of code that didn't do anything other than in some instances hinder the function of the app. 0.03: Use the new messages library -0.04: Fix dependency on messages library \ No newline at end of file +0.04: Fix dependency on messages library + Fix loading message UI \ No newline at end of file diff --git a/apps/messagesmusic/app.js b/apps/messagesmusic/app.js index 11e7e5a4e..26fedecc1 100644 --- a/apps/messagesmusic/app.js +++ b/apps/messagesmusic/app.js @@ -1 +1 @@ -require('messages').openGUI({"t":"add","artist":" ","album":" ","track":" ","dur":0,"c":-1,"n":-1,"id":"music","title":"Music","state":"play","new":true}); +setTimeout(()=>require('messages').openGUI({"t":"add","artist":" ","album":" ","track":" ","dur":0,"c":-1,"n":-1,"id":"music","title":"Music","state":"play","new":true})); From 6b9e6eb4284142c6e3c60d111894dbb3b58ecaee Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Mon, 28 Nov 2022 22:59:52 +0100 Subject: [PATCH 111/342] messages: Fix/improve README It wasn't up-to-date anymore with how the library/gui now work, and still mentioned `messagelib`. --- apps/messages/README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/messages/README.md b/apps/messages/README.md index 1a6758311..83524d7c8 100644 --- a/apps/messages/README.md +++ b/apps/messages/README.md @@ -9,13 +9,14 @@ Assuming you are using GadgetBridge and "overlay notifications": 1. Gadgetbridge sends an event to your watch for an incoming message 2. The `android` app parses the message, and calls `require("messages").pushMessage({/** the message */})` -3. `require("messages")` (provided by `messagelib`) calls `Bangle.emit("message", "text", {/** the message */})` +3. `require("messages")` calls `Bangle.emit("message", "text", {/** the message */})` 4. Overlay Notifications shows the message in an overlay, and marks it as `handled` -5. The default GUI app (`messages`) sees the event is marked as `handled`, so does nothing. +5. The default UI app (Message UI, `messagegui`) sees the event is marked as `handled`, so does nothing. 6. The default widget (`widmessages`) does nothing with `handled`, and shows a notification icon. -7. You tap the notification, in order to open the full GUI Overlay Notifications +7. You tap the notification, in order to open the full GUI: Overlay Notifications calls `require("messages").openGUI({/** the message */})` -8. The default GUI app (`messages`) sees the "messageGUI" event, and launches itself +8. `openGUI` calls `require("messagegui").open(/** copy of the message */)`. +9. The `messagegui` library loads the Message UI app. @@ -28,7 +29,7 @@ it like this: myMessageListener = Bangle.on("message", (type, message)=>{ if (message.handled) return; // another app already handled this message // is one of "text", "call", "alarm", "map", or "music" - // see `messagelib/lib.js` for possible formats + // see `messages/lib.js` for possible formats // message.t could be "add", "modify" or "remove" E.showMessage(`${message.title}\n${message.body}`, `${message.t} ${type} message`); // You can prevent the default `message` app from loading by setting `message.handled = true`: @@ -52,7 +53,7 @@ Bangle.on("messageGUI", message=>{ ## Requests -Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=messagelib%library +Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=[messages]%20library ## Creator From 52c807aea5dcd888bbc90a8997038446b23da334 Mon Sep 17 00:00:00 2001 From: glemco Date: Sun, 27 Nov 2022 15:03:28 +0100 Subject: [PATCH 112/342] weather: added weather condition to clkinfo picture is dynamically generated with the weather lib --- apps/weather/ChangeLog | 1 + apps/weather/clkinfo.js | 24 +++++++++++-- apps/weather/lib.js | 72 +++++++++++++++++++++++++------------- apps/weather/metadata.json | 2 +- 4 files changed, 70 insertions(+), 29 deletions(-) diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index b11ed24ff..d8a7440c5 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -15,3 +15,4 @@ 0.16: Don't mark app as clock 0.17: Added clkinfo for clocks. 0.18: Added hasRange to clkinfo. +0.19: Added weather condition to clkinfo. diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 6191c6dbe..8cdc37be0 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -3,6 +3,7 @@ temp: "?", hum: "?", wind: "?", + txt: "?", }; var weatherJson = require("Storage").readJSON('weather.json'); @@ -14,17 +15,34 @@ weather.wind = Math.round(weather.wind[1]) + "kph"; } + function weatherIcon(code) { + var ovr = Graphics.createArrayBuffer(24,24,1,{msb:true}); + require("weather").drawIcon({code:code},12,12,12,ovr); + var img = ovr.asImage(); + img.transparent = 0; + //for (var i=0;i ({ text: weather.txt, img: weatherIcon(weather.code), + v: weather.code}), + show: function() { weatherItems.items[0].emit("redraw"); }, + hide: function () {} + }, { name: "temperature", hasRange : true, get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), v: parseInt(weather.temp), min: -30, max: 55}), - show: function() { weatherItems.items[0].emit("redraw"); }, + show: function() { weatherItems.items[1].emit("redraw"); }, hide: function () {} }, { @@ -32,7 +50,7 @@ hasRange : true, get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), v: parseInt(weather.hum), min: 0, max: 100}), - show: function() { weatherItems.items[1].emit("redraw"); }, + show: function() { weatherItems.items[2].emit("redraw"); }, hide: function () {} }, { @@ -40,7 +58,7 @@ hasRange : true, get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), v: parseInt(weather.wind), min: 0, max: 118}), - show: function() { weatherItems.items[2].emit("redraw"); }, + show: function() { weatherItems.items[3].emit("redraw"); }, hide: function () {} }, ] diff --git a/apps/weather/lib.js b/apps/weather/lib.js index 1d48116e1..8c59fd3e3 100644 --- a/apps/weather/lib.js +++ b/apps/weather/lib.js @@ -62,12 +62,29 @@ scheduleExpiry(storage.readJSON('weather.json')||{}); * @param x Left * @param y Top * @param r Icon Size + * @param ovr Graphics instance (or undefined for g) */ -exports.drawIcon = function(cond, x, y, r) { +exports.drawIcon = function(cond, x, y, r, ovr) { var palette; - + var monochrome=1; + if(!ovr) { + ovr = g; + monochrome=0; + } + if(monochrome) { + palette = { + sun: '#FFF', + cloud: '#FFF', + bgCloud: '#FFF', + rain: '#FFF', + lightning: '#FFF', + snow: '#FFF', + mist: '#FFF', + background: '#000' + }; + } else if (B2) { - if (g.theme.dark) { + if (ovr.theme.dark) { palette = { sun: '#FF0', cloud: '#FFF', @@ -89,7 +106,7 @@ exports.drawIcon = function(cond, x, y, r) { }; } } else { - if (g.theme.dark) { + if (ovr.theme.dark) { palette = { sun: '#FE0', cloud: '#BBB', @@ -113,19 +130,19 @@ exports.drawIcon = function(cond, x, y, r) { } function drawSun(x, y, r) { - g.setColor(palette.sun); - g.fillCircle(x, y, r); + ovr.setColor(palette.sun); + ovr.fillCircle(x, y, r); } function drawCloud(x, y, r, c) { const u = r/12; if (c==null) c = palette.cloud; - g.setColor(c); - g.fillCircle(x-8*u, y+3*u, 4*u); - g.fillCircle(x-4*u, y-2*u, 5*u); - g.fillCircle(x+4*u, y+0*u, 4*u); - g.fillCircle(x+9*u, y+4*u, 3*u); - g.fillPoly([ + ovr.setColor(c); + ovr.fillCircle(x-8*u, y+3*u, 4*u); + ovr.fillCircle(x-4*u, y-2*u, 5*u); + ovr.fillCircle(x+4*u, y+0*u, 4*u); + ovr.fillCircle(x+9*u, y+4*u, 3*u); + ovr.fillPoly([ x-8*u, y+7*u, x-8*u, y+3*u, x-4*u, y-2*u, @@ -137,19 +154,23 @@ exports.drawIcon = function(cond, x, y, r) { function drawBrokenClouds(x, y, r) { drawCloud(x+1/8*r, y-1/8*r, 7/8*r, palette.bgCloud); + if(monochrome) + drawCloud(x-1/8*r, y+2/16*r, r, palette.background); drawCloud(x-1/8*r, y+1/8*r, 7/8*r); } function drawFewClouds(x, y, r) { drawSun(x+3/8*r, y-1/8*r, 5/8*r); + if(monochrome) + drawCloud(x-1/8*r, y+2/16*r, r, palette.background); drawCloud(x-1/8*r, y+1/8*r, 7/8*r); } function drawRainLines(x, y, r) { - g.setColor(palette.rain); + ovr.setColor(palette.rain); const y1 = y+1/2*r; const y2 = y+1*r; - const poly = g.fillPolyAA ? p => g.fillPolyAA(p) : p => g.fillPoly(p); + const poly = ovr.fillPolyAA ? p => ovr.fillPolyAA(p) : p => ovr.fillPoly(p); poly([ x-6/12*r, y1, x-8/12*r, y2, @@ -182,8 +203,8 @@ exports.drawIcon = function(cond, x, y, r) { function drawThunderstorm(x, y, r) { function drawLightning(x, y, r) { - g.setColor(palette.lightning); - g.fillPoly([ + ovr.setColor(palette.lightning); + ovr.fillPoly([ x-2/6*r, y-r, x-4/6*r, y+1/6*r, x-1/6*r, y+1/6*r, @@ -194,8 +215,9 @@ exports.drawIcon = function(cond, x, y, r) { ]); } - drawBrokenClouds(x, y-1/3*r, r); + if(monochrome) drawBrokenClouds(x, y-1/3*r, r); drawLightning(x-1/12*r, y+1/2*r, 1/2*r); + drawBrokenClouds(x, y-1/3*r, r); } function drawSnow(x, y, r) { @@ -210,7 +232,7 @@ exports.drawIcon = function(cond, x, y, r) { } } - g.setColor(palette.snow); + ovr.setColor(palette.snow); const w = 1/12*r; for(let i = 0; i<=6; ++i) { const points = [ @@ -220,7 +242,7 @@ exports.drawIcon = function(cond, x, y, r) { x+w, y+r, ]; rotatePoints(points, x, y, i/3*Math.PI); - g.fillPoly(points); + ovr.fillPoly(points); for(let j = -1; j<=1; j += 2) { const points = [ @@ -231,7 +253,7 @@ exports.drawIcon = function(cond, x, y, r) { ]; rotatePoints(points, x, y+7/12*r, j/3*Math.PI); rotatePoints(points, x, y, i/3*Math.PI); - g.fillPoly(points); + ovr.fillPoly(points); } } } @@ -245,18 +267,18 @@ exports.drawIcon = function(cond, x, y, r) { [-0.2, 0.3], ]; - g.setColor(palette.mist); + ovr.setColor(palette.mist); for(let i = 0; i<5; ++i) { - g.fillRect(x+layers[i][0]*r, y+(0.4*i-0.9)*r, x+layers[i][1]*r, + ovr.fillRect(x+layers[i][0]*r, y+(0.4*i-0.9)*r, x+layers[i][1]*r, y+(0.4*i-0.7)*r-1); - g.fillCircle(x+layers[i][0]*r, y+(0.4*i-0.8)*r-0.5, 0.1*r-0.5); - g.fillCircle(x+layers[i][1]*r, y+(0.4*i-0.8)*r-0.5, 0.1*r-0.5); + ovr.fillCircle(x+layers[i][0]*r, y+(0.4*i-0.8)*r-0.5, 0.1*r-0.5); + ovr.fillCircle(x+layers[i][1]*r, y+(0.4*i-0.8)*r-0.5, 0.1*r-0.5); } } function drawUnknown(x, y, r) { drawCloud(x, y, r, palette.bgCloud); - g.setColor(g.theme.fg).setFontAlign(0, 0).setFont('Vector', r*2).drawString("?", x+r/10, y+r/6); + ovr.setColor(ovr.theme.fg).setFontAlign(0, 0).setFont('Vector', r*2).drawString("?", x+r/10, y+r/6); } /* diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index 4a8751302..c679bdc2e 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.18", + "version": "0.19", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], From 5eda7ae889ef54b88508efe86c5606082940cd58 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 29 Nov 2022 18:07:12 +0100 Subject: [PATCH 113/342] noteify interface Use write callback to wait for reload --- apps/noteify/interface.html | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/noteify/interface.html b/apps/noteify/interface.html index 027c98860..4d7974ad9 100644 --- a/apps/noteify/interface.html +++ b/apps/noteify/interface.html @@ -18,6 +18,11 @@ var notesElement = document.getElementById("notes"); var notes = {}; +function disableFormInput() { + document.querySelectorAll(".form-input").forEach(el => el.disabled = true); + document.querySelectorAll(".btn").forEach(el => el.disabled = true); +} + function getData() { // show loading window Util.showModal("Loading..."); @@ -53,8 +58,10 @@ function getData() { buttonSave.classList.add('btn-default'); buttonSave.onclick = function() { notes[i].note = textarea.value; - Util.writeStorage("noteify.json", JSON.stringify(notes)); - location.reload(); + disableFormInput(); + Util.writeStorage("noteify.json", JSON.stringify(notes), () => { + location.reload(); // reload so we see current data + }); } divColumn2.appendChild(buttonSave); @@ -64,8 +71,10 @@ function getData() { buttonDelete.onclick = function() { notes[i].note = textarea.value; notes.splice(i, 1); - Util.writeStorage("noteify.json", JSON.stringify(notes)); - location.reload(); // reload so we see current data + disableFormInput(); + Util.writeStorage("noteify.json", JSON.stringify(notes), () => { + location.reload(); // reload so we see current data + }); } divColumn2.appendChild(buttonDelete); divColumn.appendChild(divColumn2); @@ -77,8 +86,10 @@ function getData() { document.getElementById("btnAdd").addEventListener("click", function() { const note = document.getElementById("note-new").value; notes.push({"note": note}); - Util.writeStorage("noteify.json", JSON.stringify(notes)); - location.reload(); // reload so we see current data + disableFormInput(); + Util.writeStorage("noteify.json", JSON.stringify(notes), () => { + location.reload(); // reload so we see current data + }); }); }); } From 52d71ab0cac3d04a3d4a329cd5ebbe1b291c99f0 Mon Sep 17 00:00:00 2001 From: Leon Matthes Date: Tue, 29 Nov 2022 23:14:51 +0100 Subject: [PATCH 114/342] CalClock: Version 0.5 - Use event colors - Improved all day event support --- apps/calclock/ChangeLog | 1 + apps/calclock/calclock.js | 51 +++++++++++++++++++++------------ apps/calclock/metadata.json | 2 +- apps/calclock/screenshot.patch | 32 +++++++++++++++++++++ apps/calclock/screenshot.png | Bin 2922 -> 3212 bytes 5 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 apps/calclock/screenshot.patch diff --git a/apps/calclock/ChangeLog b/apps/calclock/ChangeLog index f4a0c96f5..5c1b7c4bc 100644 --- a/apps/calclock/ChangeLog +++ b/apps/calclock/ChangeLog @@ -2,3 +2,4 @@ 0.02: More compact rendering & app icon 0.03: Tell clock widgets to hide. 0.04: Improve current time readability in light theme. +0.05: Show calendar colors & improved all day events. diff --git a/apps/calclock/calclock.js b/apps/calclock/calclock.js index a55dc05f9..5a13a202f 100644 --- a/apps/calclock/calclock.js +++ b/apps/calclock/calclock.js @@ -20,41 +20,55 @@ function zp(str) { } function drawEventHeader(event, y) { - g.setFont("Vector", 24); - + var x = 0; var time = isActive(event) ? new Date() : new Date(event.timestamp * 1000); - var timeStr = zp(time.getHours()) + ":" + zp(time.getMinutes()); - g.drawString(timeStr, 5, y); - y += 24; + + //Don't need to know what time the event is at if its all day + if (isActive(event) || !event.allDay) { + g.setFont("Vector", 24); + var timeStr = zp(time.getHours()) + ":" + zp(time.getMinutes()); + g.drawString(timeStr, 0, y); + y += 3; + x = 13*timeStr.length+5; + } g.setFont("12x20", 1); + if (isActive(event)) { - g.drawString(zp(time.getDate())+". " + require("locale").month(time,1),15*timeStr.length,y-21); + g.drawString(zp(time.getDate())+". " + require("locale").month(time,1),x,y); } else { var offset = 0-time.getTimezoneOffset()/1440; var days = Math.floor((time.getTime()/1000)/86400+offset)-Math.floor(getTime()/86400+offset); - if(days > 0) { + if(days > 0 || event.allDay) { var daysStr = days===1?/*LANG*/"tomorrow":/*LANG*/"in "+days+/*LANG*/" days"; - g.drawString(daysStr,15*timeStr.length,y-21); + g.drawString(daysStr,x,y); } } + y += 21; return y; } function drawEventBody(event, y) { g.setFont("12x20", 1); - var lines = g.wrapString(event.title, g.getWidth()-10); + var lines = g.wrapString(event.title, g.getWidth()-15); + var yStart = y; if (lines.length > 2) { lines = lines.slice(0,2); lines[1] = lines[1].slice(0,-3)+"..."; } - g.drawString(lines.join('\n'), 5, y); + g.drawString(lines.join('\n'),10,y); y+=20 * lines.length; if(event.location) { - g.drawImage(atob("DBSBAA8D/H/nDuB+B+B+B3Dn/j/B+A8A8AYAYAYAAAAAAA=="),5,y); - g.drawString(event.location, 20, y); + g.drawImage(atob("DBSBAA8D/H/nDuB+B+B+B3Dn/j/B+A8A8AYAYAYAAAAAAA=="),10,y); + g.drawString(event.location,25,y); y+=20; } + if (event.color) { + var oldColor = g.getColor(); + g.setColor("#"+(0x1000000+Number(event.color)).toString(16).padStart(6,"0")); + g.fillRect(0,yStart,5,y-3); + g.setColor(oldColor); + } y+=5; return y; } @@ -68,19 +82,19 @@ function drawEvent(event, y) { var curEventHeight = 0; function drawCurrentEvents(y) { - g.setColor(g.theme.dark ? "#0ff" : "#0000ff"); - g.clearRect(5, y, g.getWidth() - 5, y + curEventHeight); + g.setColor(g.theme.dark ? "#0ff" : "#00f"); + g.clearRect(0,y,g.getWidth()-5,y+curEventHeight); curEventHeight = y; if(current.length === 0) { y = drawEvent({timestamp: getTime(), durationInSeconds: 100}, y); } else { - y = drawEventHeader(current[0], y); + y = drawEventHeader(current[0],y); for (var e of current) { - y = drawEventBody(e, y); + y = drawEventBody(e,y); } } - curEventHeight = y - curEventHeight; + curEventHeight = y-curEventHeight; return y; } @@ -94,7 +108,7 @@ function drawFutureEvents(y) { } function fullRedraw() { - g.clearRect(5,24,g.getWidth()-5,g.getHeight()); + g.clearRect(0,24,g.getWidth()-5,g.getHeight()); updateCalendar(); var y = 30; y = drawCurrentEvents(y); @@ -117,3 +131,4 @@ var minuteInterval = setInterval(redraw, 60 * 1000); Bangle.setUI("clock"); Bangle.loadWidgets(); Bangle.drawWidgets(); + diff --git a/apps/calclock/metadata.json b/apps/calclock/metadata.json index 3aab55186..be0a1bdd8 100644 --- a/apps/calclock/metadata.json +++ b/apps/calclock/metadata.json @@ -2,7 +2,7 @@ "id": "calclock", "name": "Calendar Clock", "shortName": "CalClock", - "version": "0.04", + "version": "0.05", "description": "Show the current and upcoming events synchronized from Gadgetbridge", "icon": "calclock.png", "type": "clock", diff --git a/apps/calclock/screenshot.patch b/apps/calclock/screenshot.patch new file mode 100644 index 000000000..3fdbf79d1 --- /dev/null +++ b/apps/calclock/screenshot.patch @@ -0,0 +1,32 @@ +diff --git a/apps/calclock/calclock.js b/apps/calclock/calclock.js +index cb8c6100e..2092c1a4e 100644 +--- a/apps/calclock/calclock.js ++++ b/apps/calclock/calclock.js +@@ -3,9 +3,24 @@ var current = []; + var next = []; + + function updateCalendar() { +- calendar = require("Storage").readJSON("android.calendar.json",true)||[]; +- calendar = calendar.filter(e => isActive(e) || getTime() <= e.timestamp); +- calendar.sort((a,b) => a.timestamp - b.timestamp); ++ calendar = [ ++ { ++ t: "calendar", ++ id: 2, type: 0, timestamp: getTime(), durationInSeconds: 200, ++ title: "Capture Screenshot", ++ description: "Capture Screenshot", ++ location: "", ++ calName: "", ++ color: -7151168, allDay: true }, ++ { ++ t: "calendar", ++ id: 7186, type: 0, timestamp: getTime() + 2000, durationInSeconds: 100, ++ title: "Upload to BangleApps", ++ description: "", ++ location: "", ++ calName: "", ++ color: -509406, allDay: false } ++ ]; + + current = calendar.filter(isActive); + next = calendar.filter(e=>!isActive(e)); diff --git a/apps/calclock/screenshot.png b/apps/calclock/screenshot.png index 4ab503f2bc209f3e5993d2d54cc98a8ffc8b6a32..8b2e39784c75f9c6301234454871dc29cd29a755 100644 GIT binary patch literal 3212 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 From 938f881653fed9c3e81a6a1b6785bdde81e11f9b Mon Sep 17 00:00:00 2001 From: m-p-3 Date: Tue, 29 Nov 2022 21:17:24 -0500 Subject: [PATCH 115/342] Added several icons to MessageIcons' lib.js Also added some "colors" from the official branding guidelines with a reference to the source info. Related to #2189 --- apps/messageicons/lib.js | 112 +++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 39 deletions(-) diff --git a/apps/messageicons/lib.js b/apps/messageicons/lib.js index ff9f4b680..d10982b63 100644 --- a/apps/messageicons/lib.js +++ b/apps/messageicons/lib.js @@ -5,44 +5,73 @@ exports.getImage = function(msg) { */ if (msg.img) return atob(msg.img); const s = (("string"=== typeof msg) ? msg : (msg.src || "")).toLowerCase(); - if (s=="airbnb") return atob("GBgBAAAAAAAAAAAAADwAAH4AAGYAAMMAAIEAAYGAAYGAAzzAA2bABmZgBmZgDGYwDDwwCDwQCBgQDDwwB+fgA8PAAAAAAAAAAAAA"); - if (s=="alarm" || s =="alarmclockreceiver") return atob("GBjBAP////8AAAAAAAACAEAHAOAefng5/5wTgcgHAOAOGHAMGDAYGBgYGBgYGBgYGBgYDhgYBxgMATAOAHAHAOADgcAB/4AAfgAAAAAAAAA="); + if (s=="airbnb") return atob("GBgBAAAAADwAAH4AAMMAAIMAAYGAAQGAAwDAAwDABjxgBn5gDMMwDMMwGMMYGMMYMGYMMGYMIDwEIBgEIDwEMH4MHee4D4HwAAAA"); // icons/airbnb.png + if (s=="alarm" || s =="alarmclockreceiver") return atob("GBgBAAAAAAAAAgBABwDgHn54Of+cE8PIBwDgDhhwDBgwHBg4GBgYGBgYGBgYGA4YHAc4DAEwDgBwBwDgA8PAAf+AAH4AAAAAAAAA"); // icons/alarm.png + if (s=="amazon shopping") return atob("GBgBAAAAAP8AAf+AA//AA+fAA8PAAIPAAD/AAP/AA//AA+PAB8PAB8fAB8fgB//gA//gA/3AAPCecAAeOAAeDwH0B//kAf+AAAAA"); // icons/amazon.png if (s=="bibel") return atob("GBgBAAAAA//wD//4D//4H//4H/f4H/f4H+P4H4D4H4D4H/f4H/f4H/f4H/f4H/f4H//4H//4H//4GAAAEAAAEAAACAAAB//4AAAA"); + if (s=="bitwarden" || s=="1password" || s=="lastpass" || s=="dashlane") return atob("GBgBAAAAABgAAP8AA//AD4/wHg/4GA/4GA/4GA/4GA/4GA/4GA/4H/AYH/AYH/A4D/AwD/BwB/BgB/DgA/HAAfeAAP8AADwAAAAA"); // icons/security.png if (s=="bring") return atob("GBgBAAAAAAAAAAAAAAAAAHwAAFoAAf+AA/+AA/+AA/+AA/eAA+eAA0+AAx+AA7+AA/+AA//AA/+AAf8AAAIAAAAAAAAAAAAAAAAA"); if (s=="calendar" || s=="etar") return atob("GBiBAAAAAAAAAAAAAA//8B//+BgAGBgAGBgAGB//+B//+B//+B9m2B//+B//+Btm2B//+B//+Btm+B//+B//+A//8AAAAAAAAAAAAA=="); - if (s=="corona-warn") return atob("GBgBAAAAABwAAP+AAf/gA//wB/PwD/PgDzvAHzuAP8EAP8AAPAAAPMAAP8AAH8AAHzsADzuAB/PAB/PgA//wAP/gAH+AAAwAAAAA"); - if (s=="discord") return atob("GBgBAAAAAAAAAAAAAIEABwDgDP8wH//4H//4P//8P//8P//8Pjx8fhh+fzz+f//+f//+e//ePH48HwD4AgBAAAAAAAAAAAAAAAAA"); - if (s=="facebook" || s=="messenger") return atob("GBiBAAAAAAAAAAAYAAD/AAP/wAf/4A/48A/g8B/g+B/j+B/n+D/n/D8A/B8A+B+B+B/n+A/n8A/n8Afn4APnwADnAAAAAAAAAAAAAA=="); + if (s=="chat") return atob("GBgBAAAAAf/8A//+A//+A//+OAB+e/8+e/++e/++e/++e/++e/++e/++ef+8fAAAf//Af//Af//Af//Af/+AcAAAYAAAQAAAAAAA"); // icons/google chat.png + if (s=="chrome") return atob("GBgBAAAAAAAAAP8AA//AB+fgDwDwHgB4HAA4Pj/8OmYcO8McMYEMMYEMOMMcOGccOD4cHAw4Hgx4DxjwB//gA//AAP8AAAAAAAAA"); // icons/chrome.png + if (s=="corona-warn") return atob("GBgBAAAAAAAAABgAABgABhhgDn5wD//wA8PAA+fAB2bgBgBgPpl8Ppl8BgBgB2bgA+fAA8PAD//wDn5wBhhgABgAABgAAAAAAAAA"); // icons/coronavirus.png + if (s=="bmo" || s=="desjardins" || s=="rbc mobile" || s=="nbc" || s=="rabobank" || s=="scotiabank" || s=="td (canada)") return atob("GBgBAAAAADgAAP4AAe8AB4PAHgDwP//4P//4AAAAAAAADjjgDjjgDjjgDjjgDjjgDjjgDjjgAAAAAAAAP//4P//4AAAAAAAAAAAA"); // icons/bank.png + if (s=="discord") return atob("GBgBAAAAAAAAAAAAAAAAA4HAD//wH//4H//4P//8P//8P//8fn5+fDw+fDw+fn5+f//+f//+ff++PgB8DgBwAAAAAAAAAAAAAAAA"); // icons/discord.png + if (s=="drive") return atob("GBgBAAAAAAAAAH8AAH8AAT+AA7/AA9/AB8/gB+/gD+fwD+fwH8P4P8P8P4H8fwAAf3/+Pn/8Pv/8HP/4Df/wC//wAAAAAAAAAAAA"); // icons/google drive.png + if (s=="element") return atob("GBgBAAAAAHwAAH4AAH8AAAeAAePAB+HAD+DgHgDgPADuOADucAAOcAAOdwAcdwA8BwB4BwfwA4fgA8eAAeAAAP4AAH4AAD4AAAAA"); // icons/matrix element.png + if (s=="facebook") return atob("GBgBAAAAAAAAAH4AAf+AB//gD//wD/DwH+D4H+P4P+f8P+f8P+f8PwD8PwD8PwD8H+f4H+f4D+fwD+fwB+fgAeeAAOcAAAAAAAAA"); // icons/facebook.png + if (s=="messenger") return atob("GBgBAAAAAAAAAP8AA//AB//gD//wH//4H//4P//8P9+8P458PwB8PgD8PnH8Pfv8H//4H//4D//wB//gB//AB/8AAwAAAAAAAAAA"); // icons/facebook messenger.png + if (s=="firefox" || s=="firefox beta" || s=="firefox nightly") return atob("GBgBAAAAAAAAAAMAAAcAAAeABA/ADY/gH4P4H4H4H8H8P/H8P+D8PwD8PwD8PwD8H4H4H8P4H//4D//wB//gA//AAP8AAAAAAAAA"); // icons/firefox.png + if (s=="f-droid" || s=="neo store" || s=="aurora droid") return atob("GBgBAAAAQAACYAAGP//8H//4H//4HH44HH44H//4AAAAH//4H8P4H734H374HsN4Hvl4Hv14Hvl4HsN4H374H734H8P4D//wAAAA"); // icons/security.png + if (s=="github") return atob("GBgBAAAAAAAAAH4AAf+AB//gD//wDv9wHgB4HgB4PAA8PAA8PAA8PAA8PAA8PgB8HwD4G8P4DcPwDgPwB4PgAcOAAAAAAAAAAAAA"); // icons/github.png + if (s=="gitlab") return atob("GBgBAAAABAAgDAAwDAAwHgB4HgB4PgB8PwD8P//8f//+f//+f//+f//+f//+f//+P//8H//4D//wA//AAf+AAP8AADwAABgAAAAA"); // icons/gitlab.png if (s=="gmx") return atob("GBgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEJmfmd8Zuc85v847/88Z9s8fttmHIHiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); - if (s=="google") return atob("GBiBAAAAAAD/AAP/wAf/4A/D4B8AwDwAADwAAHgAAHgAAHAAAHAH/nAH/nAH/ngH/ngAHjwAPDwAfB8A+A/D8Af/4AP/wAD/AAAAAA=="); - if (s=="google home") return atob("GBiCAAAAAAAAAAAAAAAAAAAAAoAAAAAACqAAAAAAKqwAAAAAqroAAAACquqAAAAKq+qgAAAqr/qoAACqv/6qAAKq//+qgA6r///qsAqr///6sAqv///6sAqv///6sAqv///6sA6v///6sA6v///qsA6qqqqqsA6qqqqqsA6qqqqqsAP7///vwAAAAAAAAAAAAAAAAA=="); // 2 bit unpaletted + if (s=="google") return atob("GBgBAAAAAP8AA//AB//gD//gH+fAP4CAPwAAPgAAfAAAfA/+fA/+fA/+fA/+fAA+PgA+PwB8P4D8H+f4D//4B//wA//AAP8AAAAA"); // icons/google.png + if (s=="google home") return atob("GBgBAAAAABgAADwAAH4AAf4AA/zAB/vgD/fwH+f4P4H8fwD+fgB+fAA+eAA+cAA+bAA+HAA+PAA+ff++ff++ff++ff++Pf+8AAAA"); // icons/google home.png + if (s=="google play store") return atob("GBgBAAAAAAAAAH4AAP8AAMMAAMMAP//8P//8MAAMMAAMMGAMMHgMMH4MMH8MMH4MMHgMMGAMMAAMMAAMP//8H//4AAAAAAAAAAAA"); // icons/google play store.png if (s=="home assistant") return atob("FhaBAAAAAADAAAeAAD8AAf4AD/3AfP8D7fwft/D/P8ec572zbzbNsOEhw+AfD8D8P4fw/z/D/P8P8/w/z/AAAAA="); - if (s=="instagram") return atob("GBiBAAAAAAAAAAAAAAAAAAP/wAYAYAwAMAgAkAh+EAjDEAiBEAiBEAiBEAiBEAjDEAh+EAgAEAwAMAYAYAP/wAAAAAAAAAAAAAAAAA=="); + if (s=="instagram") return atob("GBgBAAAAD//wH//4OAAccAAOYABmYDxmYP8GYeeGYYGGY4HGYwDGYwDGY4HGYYGGYeeGYP8GYDwGYAAGcAAOOAAcH//4D//wAAAA"); // icons/instagram.png if (s=="kalender") return atob("GBgBBgBgBQCgff++RQCiRgBiQAACf//+QAACQAACR//iRJkiRIEiR//iRNsiRIEiRJkiR//iRIEiRIEiR//iQAACQAACf//+AAAA"); - if (s=="lieferando") return atob("GBgBABgAAH5wAP9wAf/4A//4B//4D//4H//4P/88fV8+fV4//V4//Vw/HVw4HVw4HBg4HBg4HBg4HDg4Hjw4Hj84Hj44Hj44Hj44"); - if (s=="mattermost") return atob("GBgBAAAAAPAAA+EAB4MADgcYHAcYOA8MOB8OeD8GcD8GcH8GcD8HcD8HeBwHeAAOfAAOfgAePwA8P8D8H//4D//wB//gAf/AAH4A"); + if (s=="keep notes") return atob("GBgBAAAAAAAAH//4P//8P8P8Pzz8P378Pv98Pv98Pv98Pv98P378Pzz8P738P4H8P738P738P4GMP8OYP/+wP//gH//AAAAAAAAA"); // icons/google keep.png + if (s=="lieferando") return atob("GBgBAAAAADwAAH4AAP/gAf/wA//wB//wD//wH//4H/98Pt58ft5+Ptx8DtxwDtxwDhxwDhhwDhhwDzhwD75wD75wD75wB77gAAAA"); // icons/lieferando.png + if (s=="linkedin") return atob("GBgBAAAAf//+f//+f//+ef/+cf/+cf/+f//+f//+ccw+ccAeccAecccOcceOcceOcceOcceOcceOcceOec+ef//+f//+f//+AAAA"); // icons/linkedin.png + if (s=="maps" || s=="organic maps" || s=="osmand") return atob("GBgBAAAAAAAAAAAAAeAYD/z4H//4GMeYGMMYGMMYGMMYGMMYGMMYGMMYGMMYGMMYGMMYGMMYGeMYH//4Hz/wGAeAAAAAAAAAAAAA"); // icons/map.png + if (s=="mastodon" || s=="fedilab" || s=="tooot" || s=="tusky") return atob("GBgBAAAAB//gD//4H//4P//8PBg8PAA8fOMeeOeeeOeeOOeeOOecOP+cOP+cP//8P//4P//4P//gHwAAH4AAD+cAB/8AAf4AAAAA"); // icons/mastodon.png + if (s=="mattermost") return atob("GBgBAAAAAPAAA+EAB4GADgOQHAeYOA+cOB+MeB+OcD+GcD+GcD+GeD8OeB4OeAAOfAAePgA8P4B8H/f4D//wB//gA//AAP8AAAAA"); // icons/mattermost.png if (s=="n26") return atob("GBgBAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAOIAAOIAAPIAANoAANoAAM4AAMYAAMYAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAA"); + if (s=="netflix") return atob("GBgBAAAAA8PAA+PAAePAAePAAfPAAvPAA/PAAvvAAn/AA/nAA3/AA/7AA5/AA/5AA99AA8/AA89AA8+AA8eAA8eAA8fAA8PAAAAA"); // icons/netflix.png + if (s=="news" || s=="cbc news" || s=="rc info" || s=="reuters" || s=="ap news" || s=="la presse" || s=="nbc news") return atob("GBgBAAAAAAAAAAAALaW0P//8P//8P//8P//8MAAMMAAMMAAMP//8P//8MBwcMBwcMB/8MB/8MBwcMBwcP//8P//8AAAAAAAAAAAA"); // icons/news.png if (s=="nextbike") return atob("GBgBAAAAAAAAAAAAAAAAAAAAAACAfgDAPwDAP4HAH4N4H8f8D82GMd8CMDsDMGMDMGGGGMHOD4D8AAAAAAAAAAAAAAAAAAAAAAAA"); if (s=="nina") return atob("GBgBAAAABAAQCAAICAAIEAAEEgAkJAgSJBwSKRxKSj4pUn8lVP+VVP+VUgAlSgApKQBKJAASJAASEgAkEAAECAAICAAIBAAQAAAA"); - if (s=="outlook mail") return atob("HBwBAAAAAAAAAAAIAAAfwAAP/gAB/+AAP/5/A//v/D/+/8P/7/g+Pv8Dye/gPd74w5znHDnOB8Oc4Pw8nv/Dwe/8Pj7/w//v/D/+/8P/7/gf/gAA/+AAAfwAAACAAAAAAAAAAAA="); - if (s=="paypal") return atob("GBgBAAAAAAAAAAAAAf+AAf/AAf/gA//gA//gA//wA//wA//wA//wB//wB//wB//gB/+AB/gAB/gAB/gAAPgAAPgAAAAAAAAAAAAA"); - if (s=="phone") return atob("FxeBABgAAPgAAfAAB/AAD+AAH+AAP8AAP4AAfgAA/AAA+AAA+AAA+AAB+AAB+AAB+OAB//AB//gB//gA//AA/8AAf4AAPAA="); - if (s=="post & dhl") return atob("GBgBAPgAE/5wMwZ8NgN8NgP4NgP4HgP4HgPwDwfgD//AB/+AAf8AAAAABs7AHcdgG4MwAAAAGESAFESAEkSAEnyAEkSAFESAGETw"); - if (s=="signal") return atob("GBgBAAAAAGwAAQGAAhggCP8QE//AB//oJ//kL//wD//0D//wT//wD//wL//0J//kB//oA//ICf8ABfxgBYBAADoABMAABAAAAAAA"); - if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA=="); - if (s=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA=="); - if (s=="snapchat") return atob("GBgBAAAAAAAAAH4AAf+AAf+AA//AA//AA//AA//AA//AH//4D//wB//gA//AB//gD//wH//4f//+P//8D//wAf+AAH4AAAAAAAAA"); - if (s=="steam") return atob("GBgBAAAAAAAAAAAAAAAAAAAAAAfgAAwwAAvQABvQABvQADvQgDww4H/g+f8A/zwAf9gAH9AAB8AAACAAAcAAAAAAAAAAAAAAAAAA"); - if (s=="teams") return atob("GBgBAAAAAAAAAAQAAB4AAD8IAA8cP/M+f/scf/gIeDgAfvvefvvffvvffvvffvvff/vff/veP/PeAA/cAH/AAD+AAD8AAAQAAAAA"); - if (s=="telegram" || s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); - if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); - if (s=="to do" || s=="opentasks") return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); - if (s=="twitch") return atob("GBgBH//+P//+P//+eAAGeAAGeAAGeDGGeDOGeDOGeDOGeDOGeDOGeDOGeAAOeAAOeAAcf4/4f5/wf7/gf//Af/+AA/AAA+AAAcAA"); - if (s=="twitter") return atob("GhYBAABgAAB+JgA/8cAf/ngH/5+B/8P8f+D///h///4f//+D///g///wD//8B//+AP//gD//wAP/8AB/+AB/+AH//AAf/AAAYAAA"); + if (s=="outlook mail") return atob("GBgBAAAAAAAAAP/8AP/8AP/8AJjMf/jMf//8f//8cHjMd3jMZz/+Zz/+d3jecHj+f//mf/eGf/PGAwDmAwA+A//+Af/+AAAAAAAA"); // icons/outlook.png + if (s=="paypal") return atob("GBgBAAAAA/+AA//gA//wB//wB//wB//wB//wB//wB//gD//gD//ID/+ID/wwD4BwD5/gD74AH7gAHzAAHzAAHzAAAHAAAHAAAAAA"); // icons/paypal.png + if (s=="phone") return atob("GBgBAAAAAAAAH4AAP8AAP8AAP8AAH8AAH8AAH8AAH4AADwAADwAABwAAA4AAA8HwAeP8AP/8AH/8AD/8AA/8AAP8AAB4AAAAAAAA"); // icons/phone.png + if (s=="plex") return atob("GBgBAAAAB/gAB/gAA/wAAf4AAf4AAP8AAH+AAH+AAD/AAB/gAB/gAB/gAB/gAD/AAH+AAH+AAP8AAf4AAf4AA/wAB/gAB/gAAAAA"); // icons/plex.png + if (s=="pocket") return atob("GBgBAAAAAAAAP//8f//+f//+f//+f//+f//+fP8+eH4efDw+fhh+fwD+f4H+P8P8P+f8H//4H//4D//wB//gAf+AAH4AAAAAAAAA"); // icons/pocket.png + if (s=="post & dhl") return atob("GBgBAAAAAAAAAAAAAAAAP/+Af/+AYAGAYAGAYAHwYAH4YAGMYAGGYAH+YAH+bwH+f//+ef+eGYGYH4H4DwDwAAAAAAAAAAAAAAAA"); // icons/delivery.png + if (s=="proton mail") return atob("GBgBAAAAAAAAAAAAQAACYAAGcAAOeAAePABeXgDebwHed4Pee/fefe/efh/ef//ef//ef//ef//ef//ef//eP//cAAAAAAAAAAAA"); // icons/protonmail.png + if (s=="reddit" || s=="sync pro" || s=="sync dev" || s=="boost" || s=="infinity" || s=="slide") return atob("GBgBAAAAAAAAAAYwAAX4AAh4AAgwAAgAAAgAAH4AAf+AN//sf//+fn5+PDw8HDw4Hn54H//4H//4DzzwB4HgAf+AAH4AAAAAAAAA"); // icons/reddit.png + if (s=="signal") return atob("GBgBAAAAAL0AAYGABH4gCf+QE//IB//gL//0b//2H//4X//6X//6X//6X//6H//4b//2L//0D//gL//ID/+QYH4gVYGAcL0AAAAA"); // icons/signal.png + if (s=="skype") return atob("GBgBAAAAB8AAH/8AP//AP//gf8fwfwD4fgB4fjx8fj/8Pg/8PwH8P4B8P/h8Pnx+Pjx+Hhh+HwD+D8P+B//8A//8AP/4AAPgAAAA"); // icons/skype.png + if (s=="slack") return atob("GBgBAAAAAOcAAeeAAeeAAeeAAGeAAAeAP+ecf+eef+e+f+e+AAAAAAAAfef+fef+eef+Oef8AeAAAeYAAeeAAeeAAeeAAOcAAAAA"); // icons/slack.png + if (s=="snapchat") return atob("GBgBAAAAAAAAAAAAAH4AAf+AAYGAAwDAAwDAAwDADwDwDwDwDgBwBwDgBwDgDgBwHAA4OAAcHAA4D4HwB//gAH4AAAAAAAAAAAAA"); // icons/snapchat.png + if (ss="starbucks") return atob("GBgBAAAAAAAAAAAAD//4D//8DADMDADMDADMDAD8DAD4DADADADADADADADADgHAB/+AA/8AAAAAAAAAP//wP//wAAAAAAAAAAAA"); // icons/cafe.png + if (s=="steam") return atob("GBgBAAAAAAAAAf+AA//AD//wD//wH/g4P/OcP/RcP+RcP+ReH8OeB4A+AAH+AMP8IC/8OS/8HN/4Dj/wD//wA//AAf+AAAAAAAAA"); // icons/steam.png + if (s=="teams") return atob("GBgBAAAAAAgAAD4AADcYAGM8AGNmP/dmP/48MDAYMD/+PP/+PPBmPPBmPPBmPPBmP/BmP/BmH+B+AYD4AMDAAOOAAH8AABwAAAAA"); // icons/teams.png + if (s=="telegram" || s=="telegram foss") return atob("GBgBAAAAAAAAAAAAAAAeAAB+AAP+AA/+AD/+Af9+B/z+H/n8f+P8f8f8Dw/8AB/8AB/8AB/4AAf4AAP4AAD4AABwAAAAAAAAAAAA"); // icons/telegram.png + if (s=="threema") return atob("GBgBAAAAAP8AA//AB//gD//wH8P4H9v4H734P5n8P4H8P4H8H4H4H4H4D//wD//gD//AH/8AHDwAAAAAAAAABhhgDzzwBhhgAAAA"); // icons/threema.png + if (s=="tiktok") return atob("GBgBAAAAAAAAAAcAAAcAAAeAAAfAAAfwAAf4AAf4AMd4A8cAB8cAD8cADwcAHgcAHgcAHg8ADw8AD/4AB/4AA/wAAfAAAAAAAAAA"); // icons/tiktok.png + if (s=="to do" || s=="opentasks" || s=="tasks") return atob("GBgBAAAAAHwAAf+AA//ID4GcHwA8HAB4PADwOAHgcAPGcAeOcY8Oc94OcfwOcPgOOHAcOCAcHAA4DgB4D4HwB//gAf+AAH4AAAAA"); // icons/task.png + if (s=="transit") return atob("GBgBAAAAD//wP//8P//8f//+f/j+ffA+eOA+eOMef+cefef+eOe+fecef+e+eOf+eOcefAcefA++fx/+f//+P//8P//8D//wAAAA"); // icons/transit.png + if (s=="twitch") return atob("GBgBAAAAA//8B//8DgAMHgAMPhjMPhjMPhjMPhjMPhjMPgAMPgAMPgAYPgAwP+fgP+/AP/+AP/8AP/4AAeAAAcAAAYAAAQAAAAAA"); // icons/twitch.png + if (s=="twitter") return atob("GBgBAAAAAAAAAAAAAAPAIAf8MA/4PA/8Pg/4H//4H//4P//4P//wH//wD//wD//gD//AA//AAf+AB/8AP/wAD/AAAAAAAAAAAAAA"); // icons/twitter.png + if (s=="uber" || s=="lyft") return atob("GBgBAAAAAAAAAAAAAH4AAH4AB//gB//gDgBwDAAwDAAwH//4H//4GAAYG4HYG4HYG4HYGAAYH//4H//4HAA4HAA4AAAAAAAAAAAA"); // icons/taxi.png + if (s=="vlc") return atob("GBgBAAAAABgAABgAADwAADwAAAAAAAAAAAAAAAAAAIEAAP8AAP8AAf+AAP8AAAAADAAwDAAwHAA4HwD4H//4P//8P//8P//8AAAA"); // icons/vlc.png if (s=="warnapp") return atob("GBgBAAAAAAAAAAAAAH4AAP8AA//AA//AD//gP//gf//4f//+/+P+/8H//8n//4n/fxh/fzg+Pj88Dn44AA4AAAwAAAwAAAgAAAAA"); - if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA=="); + if (s=="whatsapp") return atob("GBgBAAAAAP8AA//AB4HwDgB4HAA4OAAcMYAMc8AOc8AGY8AGYcAGYeAGYPOGcH/OcD/OMA+MOAAcMAA4MgBwf8Pgf//AcP8AAAAA"); // icons/whatsapp.png if (s=="wordfeud") return atob("GBgCWqqqqqqlf//////9v//////+v/////++v/////++v8///Lu+v8///L++v8///P/+v8v//P/+v9v//P/+v+fx/P/+v+Pk+P/+v/PN+f/+v/POuv/+v/Ofdv/+v/NvM//+v/I/Y//+v/k/k//+v/i/w//+v/7/6//+v//////+v//////+f//////9Wqqqqqql"); - if (s=="youtube" || s=="newpipe") return atob("GBgBAAAAAAAAAAAAAAAAAf8AH//4P//4P//8P//8P5/8P4/8f4P8f4P8P4/8P5/8P//8P//8P//4H//4Af8AAAAAAAAAAAAAAAAA"); + if (s=="youtube" || s=="newpipe") return atob("GBgBAAAAAAAAAAAAAAAAAAAAH//4P//8P//8f//+f8/+f8P+f8D+f8D+f8P+f8/+f//+P//8P//8H//4AAAAAAAAAAAAAAAAAAAA"); // icons/youtube.png + if (s=="zoom" || s=="meet") return atob("GBgBAAAAAAAAAAAAP/+Af//Af//AcADicADmcADucAD+cAD+cAD+cAD+cAD+cAD+cADucADmcADif//Af//AP/+AAAAAAAAAAAAA"); // icons/videoconf.png if (msg.id=="music") return atob("FhaBAH//+/////////////h/+AH/4Af/gB/+H3/7/f/v9/+/3/7+f/vB/w8H+Dwf4PD/x/////////////3//+A="); // if (s=="sms message" || s=="mail" || s=="gmail") // .. default icon (below) return atob("FhKBAH//+P//yf/+c//z5/+fz/z/n+f/Pz/+ef/8D///////////////////////f//4///A"); @@ -57,7 +86,7 @@ exports.getColor = function(msg,options) { return { // generic colors, using B2-safe colors // DO NOT USE BLACK OR WHITE HERE, just leave the declaration out and then the theme's fg color will be used - "airbnb": "#f00", + "airbnb": "#ff385c", // https://news.airbnb.com/media-assets/category/brand/ "mail": "#ff0", "music": "#f0f", "phone": "#0f0", @@ -66,39 +95,44 @@ exports.getColor = function(msg,options) { // all dithered on B2, but we only use the color for the icons. (Could maybe pick the closest 3-bit color for B2?) "bibel": "#54342c", "bring": "#455a64", - "discord": "#738adb", + "discord": "#5865f2", // https://discord.com/branding "etar": "#36a18b", - "facebook": "#4267b2", + "facebook": "#1877f2", // https://www.facebook.com/brand/resources/facebookapp/logo "gmail": "#ea4335", "gmx": "#1c449b", "google": "#4285F4", "google home": "#fbbc05", // "home assistant": "#41bdf5", // ha-blue is #41bdf5, but that's the background - "instagram": "#dd2a7b", - "lieferando": "#ee5c00", + "instagram": "#ff0069", // https://about.instagram.com/brand/gradient + "lieferando": "#ff8000", + "linkedin": "#0a66c2", // https://brand.linkedin.com/ "messenger": "#0078ff", + "mastodon": "#563acc", // https://www.joinmastodon.org/branding "mattermost": "#00f", "n26": "#36a18b", "nextbike": "#00f", "newpipe": "#f00", "nina": "#e57004", "opentasks": "#409f8f", - "outlook mail": "#0072c6", + "outlook mail": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products "paypal": "#003087", + "pocket": "#ef4154f", // https://blog.getpocket.com/press/ "post & dhl": "#f2c101", - "signal": "#00f", - "skype": "#00aff0", + "reddit": "#ff4500", // https://www.redditinc.com/brand + "signal": "#3a76f0", // https://github.com/signalapp/Signal-Desktop/blob/main/images/signal-logo.svg + "skype": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products "slack": "#e51670", "snapchat": "#ff0", "steam": "#171a21", - "teams": "#464eb8", + "teams": "#6264a7", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products "telegram": "#0088cc", "telegram foss": "#0088cc", "to do": "#3999e5", - "twitch": "#6441A4", - "twitter": "#1da1f2", + "twitch": "#9146ff", // https://brand.twitch.tv/ + "twitter": "#1d9bf0, // https://about.twitter.com/en/who-we-are/brand-toolkit + "vlc": "#ff8800", "whatsapp": "#4fce5d", "wordfeud": "#e7d3c7", - "youtube": "#f00", + "youtube": "#f00", // https://www.youtube.com/howyoutubeworks/resources/brand-resources/#logos-icons-and-colors }[s]||options.default; }; From 70307b32675a6f374e8f6677c6137069f0417dd1 Mon Sep 17 00:00:00 2001 From: m-p-3 Date: Tue, 29 Nov 2022 21:20:47 -0500 Subject: [PATCH 116/342] Fixed typo At 132:16 --- apps/messageicons/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messageicons/lib.js b/apps/messageicons/lib.js index d10982b63..e24a07a62 100644 --- a/apps/messageicons/lib.js +++ b/apps/messageicons/lib.js @@ -129,7 +129,7 @@ exports.getColor = function(msg,options) { "telegram foss": "#0088cc", "to do": "#3999e5", "twitch": "#9146ff", // https://brand.twitch.tv/ - "twitter": "#1d9bf0, // https://about.twitter.com/en/who-we-are/brand-toolkit + "twitter": "#1d9bf0", // https://about.twitter.com/en/who-we-are/brand-toolkit "vlc": "#ff8800", "whatsapp": "#4fce5d", "wordfeud": "#e7d3c7", From bfbd86bc331d3a8c6b4ad33cd798128b1e26eafe Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 30 Nov 2022 09:34:17 +0100 Subject: [PATCH 117/342] sleepphasealarm: Minor tweaks --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 15 +++++++++------ apps/sleepphasealarm/metadata.json | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 9f2b07d49..80b2e554b 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -11,3 +11,4 @@ Add setting to defer start of algorithm Add setting to disable scheduler alarm 0.10: Fix: Do not wake when falling asleep +0.11: Minor tweaks diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index b3aacc80d..a5193b244 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -21,8 +21,8 @@ let logs = []; // // Function needs to be called for every measurement but returns a value at maximum once a second (see winwidth) // start of sleep marker is delayed by sleepthresh due to continous data reading -const winwidth=13; -const nomothresh=0.03; // 0.006 was working on Bangle1, but Bangle2 has higher noise. +const winwidth=13; // Actually 12.5 Hz, rounded +const nomothresh=0.023; // Original implementation: 6, resolution 11 bit, scale +-4G = 6/(2^(11-1))*4 = 0.023438 in G const sleepthresh=600; var ess_values = []; var slsnds = 0; @@ -69,6 +69,9 @@ active.forEach(alarm => { } }); +const LABEL_ETA = /*LANG*/"ETA"; +const LABEL_WAKEUP_TIME = /*LANG*/"Alarm at"; + var layout = new Layout({ type:"v", c: [ {type:"txt", font:"10%", label:"Sleep Phase Alarm", bgCol:g.theme.bgH, fillx: true, height:Bangle.appRect.h/6}, @@ -84,7 +87,7 @@ function drawApp() { var alarmMinute = nextAlarmDate.getMinutes(); if (alarmHour < 10) alarmHour = "0" + alarmHour; if (alarmMinute < 10) alarmMinute = "0" + alarmMinute; - layout.alarm_date.label = "Alarm at " + alarmHour + ":" + alarmMinute; + layout.alarm_date.label = `${LABEL_WAKEUP_TIME}: ${alarmHour}:${alarmMinute}`; layout.render(); function drawTime() { @@ -94,7 +97,7 @@ function drawApp() { const diff = nextAlarmDate - now; const diffHour = Math.floor((diff % 86400000) / 3600000).toString(); const diffMinutes = Math.floor(((diff % 86400000) % 3600000) / 60000).toString(); - layout.eta.label = "ETA: -"+ diffHour + ":" + diffMinutes.padStart(2, '0'); + layout.eta.label = `${LABEL_ETA}: ${diffHour}:${diffMinutes.padStart(2, '0')}`; layout.render(); } @@ -139,7 +142,7 @@ if (nextAlarmDate !== undefined) { // minimum alert 30 minutes early minAlarm.setTime(nextAlarmDate.getTime() - (30*60*1000)); run = () => { - layout.state.label = "Start"; + layout.state.label = /*LANG*/"Start"; layout.render(); Bangle.setOptions({powerSave: false}); // do not dynamically change accelerometer poll interval Bangle.setPollInterval(80); // 12.5Hz @@ -150,7 +153,7 @@ if (nextAlarmDate !== undefined) { if (swest !== undefined) { if (Bangle.isLCDOn()) { - layout.state.label = swest ? "Sleep" : "Awake"; + layout.state.label = swest ? /*LANG*/"Sleep" : /*LANG*/"Awake"; layout.render(); } // log diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index 35eea7466..fd3366812 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.10", + "version": "0.11", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", From 1777799ae677cb55f3b0c2466529439a7472c79f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 30 Nov 2022 09:37:39 +0000 Subject: [PATCH 118/342] 0.04: Fix 'Uncaught ReferenceError: "__FILE__" is not defined' error (fix #2326) --- apps/swp2clk/ChangeLog | 1 + apps/swp2clk/boot.js | 11 ++++++----- apps/swp2clk/metadata.json | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/swp2clk/ChangeLog b/apps/swp2clk/ChangeLog index 083b20858..d6f9f6e8c 100644 --- a/apps/swp2clk/ChangeLog +++ b/apps/swp2clk/ChangeLog @@ -1,3 +1,4 @@ 0.01: Initial creation of "Swipe back to the Clock" App. Let's you swipe from left to right on any app to return back to the clock face. 0.02: Fix deleting from white and black lists. 0.03: Adapt to availability of Bangle.showClock and Bangle.load +0.04: Fix 'Uncaught ReferenceError: "__FILE__" is not defined' error (fix #2326) diff --git a/apps/swp2clk/boot.js b/apps/swp2clk/boot.js index 389c3dddf..f2c642adf 100644 --- a/apps/swp2clk/boot.js +++ b/apps/swp2clk/boot.js @@ -29,12 +29,13 @@ })(Bangle.load); let swipeHandler = (dir) => { - log("swipe:" + dir + " on app: " + __FILE__); + let currentFile = global.__FILE__||"default"; + log("swipe:" + dir + " on app: " + currentFile); - if (!inhibit && dir === 1 && !Bangle.CLOCK && __FILE__ != ".bootcde") { - log("on a not clock app " + __FILE__); - if ((settings.mode === 1 && settings.whiteList.includes(__FILE__)) || // "White List" - (settings.mode === 2 && !settings.blackList.includes(__FILE__)) || // "Black List" + if (!inhibit && dir === 1 && !Bangle.CLOCK) { + log("on a not clock app " + currentFile); + if ((settings.mode === 1 && settings.whiteList.includes(currentFile)) || // "White List" + (settings.mode === 2 && !settings.blackList.includes(currentFile)) || // "Black List" settings.mode === 3) { // "Always" log("load clock"); Bangle.showClock(); diff --git a/apps/swp2clk/metadata.json b/apps/swp2clk/metadata.json index 7552de26c..b4436bd39 100644 --- a/apps/swp2clk/metadata.json +++ b/apps/swp2clk/metadata.json @@ -2,7 +2,7 @@ "id": "swp2clk", "name": "Swipe back to the Clock", "shortName": "Swipe to Clock", - "version": "0.03", + "version": "0.04", "description": "Let's you swipe from left to right on any app to return back to the clock face. Please configure in the settings app after installing to activate, since its disabled by default.", "icon": "app.png", "type": "bootloader", From 45c5e15f20b2e1765af3813a1bf81bdb9ba949e2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 30 Nov 2022 09:55:02 +0000 Subject: [PATCH 119/342] fix https://github.com/espruino/BangleApps/issues/953 - new lock widget --- apps/widlock/ChangeLog | 1 + apps/widlock/metadata.json | 2 +- apps/widlock/widget.js | 19 ++++++++----------- apps/widlockunlock/ChangeLog | 1 + apps/widlockunlock/metadata.json | 13 +++++++++++++ apps/widlockunlock/widget.js | 6 ++++++ apps/widlockunlock/widget.png | Bin 0 -> 726 bytes 7 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 apps/widlockunlock/ChangeLog create mode 100644 apps/widlockunlock/metadata.json create mode 100644 apps/widlockunlock/widget.js create mode 100644 apps/widlockunlock/widget.png diff --git a/apps/widlock/ChangeLog b/apps/widlock/ChangeLog index bb84c2d44..665750150 100644 --- a/apps/widlock/ChangeLog +++ b/apps/widlock/ChangeLog @@ -4,3 +4,4 @@ 0.04: Set sortorder to -1 so that widget always takes up the furthest left position 0.05: Set sortorder to -10 so that others can take -1 etc 0.06: Set sortorder to -10 in widget code +0.07: Remove check for .isLocked (extremely old firmwares), speed up widget loading diff --git a/apps/widlock/metadata.json b/apps/widlock/metadata.json index 8635a5434..db532851a 100644 --- a/apps/widlock/metadata.json +++ b/apps/widlock/metadata.json @@ -1,7 +1,7 @@ { "id": "widlock", "name": "Lock Widget", - "version": "0.06", + "version": "0.07", "description": "On devices with always-on display (Bangle.js 2) this displays lock icon whenever the display is locked", "icon": "widget.png", "type": "widget", diff --git a/apps/widlock/widget.js b/apps/widlock/widget.js index 592361cd9..abcedde20 100644 --- a/apps/widlock/widget.js +++ b/apps/widlock/widget.js @@ -1,11 +1,8 @@ -(function(){ - if (!Bangle.isLocked) return; // bail out on old firmware - Bangle.on("lock", function(on) { - WIDGETS["lock"].width = Bangle.isLocked()?16:0; - Bangle.drawWidgets(); - }); - WIDGETS["lock"]={area:"tl",sortorder:10,width:Bangle.isLocked()?16:0,draw:function(w) { - if (Bangle.isLocked()) - g.reset().drawImage(atob("DhABH+D/wwMMDDAwwMf/v//4f+H/h/8//P/z///f/g=="), w.x+1, w.y+4); - }}; -})() +Bangle.on("lock", function() { + WIDGETS["lock"].width = Bangle.isLocked()?16:0; + Bangle.drawWidgets(); +}); +WIDGETS["lock"]={area:"tl",sortorder:10,width:Bangle.isLocked()?16:0,draw:function(w) { + if (Bangle.isLocked()) + g.reset().drawImage(atob("DhABH+D/wwMMDDAwwMf/v//4f+H/h/8//P/z///f/g=="), w.x+1, w.y+4); +}}; diff --git a/apps/widlockunlock/ChangeLog b/apps/widlockunlock/ChangeLog new file mode 100644 index 000000000..b4d1ae593 --- /dev/null +++ b/apps/widlockunlock/ChangeLog @@ -0,0 +1 @@ +0.01: First commit diff --git a/apps/widlockunlock/metadata.json b/apps/widlockunlock/metadata.json new file mode 100644 index 000000000..d701279b9 --- /dev/null +++ b/apps/widlockunlock/metadata.json @@ -0,0 +1,13 @@ +{ + "id": "widlockunlock", + "name": "Lock/Unlock Widget", + "version": "0.01", + "description": "On devices with always-on display (Bangle.js 2) this displays lock icon whenever the display is locked, or an unlock icon otherwise", + "icon": "widget.png", + "type": "widget", + "tags": "widget,lock", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"widlockunlock.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widlockunlock/widget.js b/apps/widlockunlock/widget.js new file mode 100644 index 000000000..0716a9edf --- /dev/null +++ b/apps/widlockunlock/widget.js @@ -0,0 +1,6 @@ +Bangle.on("lockunlock", function() { + Bangle.drawWidgets(); +}); +WIDGETS["lockunlock"]={area:"tl",sortorder:10,width:14,draw:function(w) { + g.reset().drawImage(atob(Bangle.isLocked() ? "DBGBAAAA8DnDDCBCBP////////n/n/n//////z/A" : "DBGBAAAA8BnDDCBABP///8A8A8Y8Y8Y8A8A//z/A"), w.x+1, w.y+3); +}}; diff --git a/apps/widlockunlock/widget.png b/apps/widlockunlock/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6b9816163709af76a5d9d7f748094e600df5c7 GIT binary patch literal 726 zcmV;{0xA88P)$wOZ|csQO_x+qRtr@Mt7_1mHO{-!Keg*)WV{DdkN7I{0Ast*nyvbX_{FK zi$5AC9sr8P;zs~?F#IIe+_M4^*npIBV{lDGFUE=QQ!14{F!Rg77&A}b01;gs5%JpZ zUS@tZ61o;tN0=c_4lbmWUnbc5Y1~GaV1yHqMEz195^>NWZ=5E+;?zWSCQ zWA*m}o&i_~a89oz`~IbR5b68f~C?cyd!FmVl(G z_)jPoEe0BG;79lGy8n6AR9{O=3pEe@#Z;ihz-g_b>(`DJ1BoSnF%@W;fu!5(Ew^p@ zL#zWW1_&nut7B+KnfrSnGB9f*1GC1Dfv$IoHacDjehd^92nou*SAwU39$^bWQ;D3( zX!QiPyplW(#O~v(A#j<2T}-E)x&Yqv1g^(6@oftAA|mFRKe3Rs5C*t-J^%m!07*qo IM6N<$f_of9R{#J2 literal 0 HcmV?d00001 From 1c475097e0c0dbf556f56f15a26504a5c7748848 Mon Sep 17 00:00:00 2001 From: m-p-3 Date: Wed, 30 Nov 2022 06:57:30 -0500 Subject: [PATCH 120/342] Fixed another typo Line 58 --- apps/messageicons/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messageicons/lib.js b/apps/messageicons/lib.js index e24a07a62..5a24ac098 100644 --- a/apps/messageicons/lib.js +++ b/apps/messageicons/lib.js @@ -55,7 +55,7 @@ exports.getImage = function(msg) { if (s=="skype") return atob("GBgBAAAAB8AAH/8AP//AP//gf8fwfwD4fgB4fjx8fj/8Pg/8PwH8P4B8P/h8Pnx+Pjx+Hhh+HwD+D8P+B//8A//8AP/4AAPgAAAA"); // icons/skype.png if (s=="slack") return atob("GBgBAAAAAOcAAeeAAeeAAeeAAGeAAAeAP+ecf+eef+e+f+e+AAAAAAAAfef+fef+eef+Oef8AeAAAeYAAeeAAeeAAeeAAOcAAAAA"); // icons/slack.png if (s=="snapchat") return atob("GBgBAAAAAAAAAAAAAH4AAf+AAYGAAwDAAwDAAwDADwDwDwDwDgBwBwDgBwDgDgBwHAA4OAAcHAA4D4HwB//gAH4AAAAAAAAAAAAA"); // icons/snapchat.png - if (ss="starbucks") return atob("GBgBAAAAAAAAAAAAD//4D//8DADMDADMDADMDAD8DAD4DADADADADADADADADgHAB/+AA/8AAAAAAAAAP//wP//wAAAAAAAAAAAA"); // icons/cafe.png + if (s=="starbucks") return atob("GBgBAAAAAAAAAAAAD//4D//8DADMDADMDADMDAD8DAD4DADADADADADADADADgHAB/+AA/8AAAAAAAAAP//wP//wAAAAAAAAAAAA"); // icons/cafe.png if (s=="steam") return atob("GBgBAAAAAAAAAf+AA//AD//wD//wH/g4P/OcP/RcP+RcP+ReH8OeB4A+AAH+AMP8IC/8OS/8HN/4Dj/wD//wA//AAf+AAAAAAAAA"); // icons/steam.png if (s=="teams") return atob("GBgBAAAAAAgAAD4AADcYAGM8AGNmP/dmP/48MDAYMD/+PP/+PPBmPPBmPPBmPPBmP/BmP/BmH+B+AYD4AMDAAOOAAH8AABwAAAAA"); // icons/teams.png if (s=="telegram" || s=="telegram foss") return atob("GBgBAAAAAAAAAAAAAAAeAAB+AAP+AA/+AD/+Af9+B/z+H/n8f+P8f8f8Dw/8AB/8AB/8AB/4AAf4AAP4AAD4AABwAAAAAAAAAAAA"); // icons/telegram.png From dda81fe199ba8c7f3d8d768b0fe9bb91bba4f434 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 30 Nov 2022 16:54:27 +0000 Subject: [PATCH 121/342] fix alignment of non-7x7 maps, non-flickery uploads, and allow huge (1MB) map uploads --- apps/openstmap/interface.html | 36 ++++++++++++++++++++++------------- core | 2 +- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/apps/openstmap/interface.html b/apps/openstmap/interface.html index e44474d63..4a4bd5336 100644 --- a/apps/openstmap/interface.html +++ b/apps/openstmap/interface.html @@ -48,16 +48,18 @@

3 bit

+ +
@@ -312,11 +314,13 @@ TODO: var zoom = map.getZoom(); var centerlatlon = map.getBounds().getCenter(); - var center = map.project(centerlatlon, zoom).divideBy(OSMTILESIZE); - // Reason for 16px adjustment below not 100% known, but it seems to - // align everything perfectly: https://github.com/espruino/BangleApps/issues/984 - var ox = Math.round((center.x - Math.floor(center.x)) * OSMTILESIZE) + 16; - var oy = Math.round((center.y - Math.floor(center.y)) * OSMTILESIZE) + 16; + var center = map.project(centerlatlon, zoom).divideBy(OSMTILESIZE); // the center of our map + // ox/oy = offset in pixels + var ox = Math.round((center.x - Math.floor(center.x)) * OSMTILESIZE); + var oy = Math.round((center.y - Math.floor(center.y)) * OSMTILESIZE); + // adjust offset because we want to center our map + ox -= MAPTILES * TILESIZE / 2; + oy -= MAPTILES * TILESIZE / 2; center = center.floor(); // make sure we're in the middle of a tile // JS version of Bangle.js's projection function bproject(lat, lon) { @@ -353,10 +357,12 @@ TODO: var ctx = canvas.getContext('2d'); canvas.width = MAPSIZE; canvas.height = MAPSIZE; - for (var i = 0; i < OSMTILECOUNT; i++) { - for (var j = 0; j < OSMTILECOUNT; j++) { + var tileMin = Math.round(-OSMTILECOUNT/2); + var tileMax = Math.round(OSMTILECOUNT/2); + for (var i = tileMin; i <= tileMax; i++) { + for (var j = tileMin; j <= tileMax; j++) { (function(i,j){ - var coords = new L.Point(center.x+i-1, center.y+j-1); + var coords = new L.Point(center.x+i, center.y+j); coords.z = zoom; var img = new Image(); img.crossOrigin = "Anonymous"; @@ -368,6 +374,8 @@ TODO: ctx.fillRect(testPt.x-1, testPt.y-5, 3,10); ctx.fillRect(testPt.x-5, testPt.y-1, 10,3); }*/ + /*ctx.fillStyle="black"; + ctx.fillRect(i*OSMTILESIZE - ox, j*OSMTILESIZE - oy, 6,6);*/ resolve(); }; })); @@ -395,6 +403,8 @@ TODO: h : Math.round(canvas.height / TILESIZE), // height in tiles fn : mapImageFile })}); + var mapSizeInK = Math.round(mapFiles.reduce((r,m)=>m.content.length+r,0)/1000); + document.getElementById("mapstats").innerText = "Size : "+ (mapSizeInK+"kb"); console.log(mapFiles); }); }); diff --git a/core b/core index f15e99fbe..3a953179b 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit f15e99fbe25b2991719011e6da9bc9c7be401a7e +Subproject commit 3a953179b7bb9f574d4e77d5f34b6b7deee1e884 From 97ce93a907531b20c77b1891e1467131cd3683ac Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Wed, 30 Nov 2022 18:11:29 +0100 Subject: [PATCH 122/342] qcenter - Fix fast loading to clock and prevent fast loading all apps --- apps/qcenter/app.js | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js index 1530cc5fb..ef495ea17 100644 --- a/apps/qcenter/app.js +++ b/apps/qcenter/app.js @@ -1,9 +1,10 @@ +{ require("Font8x12").add(Graphics); // load pinned apps from config -var settings = require("Storage").readJSON("qcenter.json", 1) || {}; -var pinnedApps = settings.pinnedApps || []; -var exitGesture = settings.exitGesture || "swipeup"; +let settings = require("Storage").readJSON("qcenter.json", 1) || {}; +let pinnedApps = settings.pinnedApps || []; +let exitGesture = settings.exitGesture || "swipeup"; // if empty load a default set of apps as an example if (pinnedApps.length == 0) { @@ -14,12 +15,12 @@ if (pinnedApps.length == 0) { } // button drawing from Layout.js, edited to have completely custom button size with icon -function drawButton(l) { - var x = l.x + (0 | l.pad), +let drawButton = function(l) { + let x = l.x + (0 | l.pad), y = l.y + (0 | l.pad), w = l.w - (l.pad << 1), h = l.h - (l.pad << 1); - var poly = [ + let poly = [ x, y + 4, x + 4, @@ -54,14 +55,14 @@ function drawButton(l) { } // function to split array into group of 3, for button placement -function groupBy3(data) { - var result = []; - for (var i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3)); +let groupBy3 = function(data) { + let result = []; + for (let i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3)); return result; } // generate object with buttons for apps by group of 3 -var appButtons = groupBy3(pinnedApps).map((appGroup, i) => { +let appButtons = groupBy3(pinnedApps).map((appGroup, i) => { return appGroup.map((app, j) => { return { type: "custom", @@ -71,13 +72,13 @@ var appButtons = groupBy3(pinnedApps).map((appGroup, i) => { pad: 5, src: require("Storage").read(app.icon), scale: 0.75, - cb: (l) => Bangle.load(app.src), + cb: (l) => load(app.src), }; }); }); // create basic layout content with status info and sensor status on top -var layoutContent = [ +let layoutContent = [ { type: "h", pad: 5, @@ -102,19 +103,27 @@ appButtons.forEach((appGroup) => { Bangle.loadWidgets(); -var Layout = require("Layout"); -var layout = new Layout({ +let Layout = require("Layout"); +let layout = new Layout({ type: "v", - c: layoutContent, + c: layoutContent +}, { + remove: ()=>{ + Bangle.removeListener("swipe", onSwipe); + delete Graphics.prototype.setFont8x12; + } }); g.clear(); layout.render(); Bangle.drawWidgets(); // swipe event listener for exit gesture -Bangle.on("swipe", function (lr, ud) { +let onSwipe = function (lr, ud) { if(exitGesture == "swipeup" && ud == -1) Bangle.showClock(); if(exitGesture == "swipedown" && ud == 1) Bangle.showClock(); if(exitGesture == "swipeleft" && lr == -1) Bangle.showClock(); if(exitGesture == "swiperight" && lr == 1) Bangle.showClock(); -}); \ No newline at end of file +} + +Bangle.on("swipe", onSwipe); +} From dec95eb281e47d375f1c73f914c96061229f9f8d Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 23 Oct 2022 16:12:09 +0200 Subject: [PATCH 123/342] layout - Allow providing a remove handler in options --- modules/Layout.js | 4 ++-- modules/Layout.md | 1 + modules/Layout.min.js | 28 ++++++++++++++-------------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/modules/Layout.js b/modules/Layout.js index cfc9ee79f..f8e27b66b 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -83,7 +83,7 @@ Layout.prototype.setUI = function() { let uiSet; if (this.buttons) { // multiple buttons so we'll jus use back/next/select - Bangle.setUI({mode:"updown", back:this.options.back}, dir=>{ + Bangle.setUI({mode:"updown", back:this.options.back, remove:this.options.remove}, dir=>{ var s = this.selectedButton, l=this.buttons.length; if (dir===undefined && this.buttons[s]) return this.buttons[s].cb(); @@ -100,7 +100,7 @@ Layout.prototype.setUI = function() { }); uiSet = true; } - if (this.options.back && !uiSet) Bangle.setUI({mode: "custom", back: this.options.back}); + if ((this.options.back || this.options.remove) && !uiSet) Bangle.setUI({mode: "custom", back: this.options.back, remove: this.options.remove}); // physical buttons -> actual applications if (this.b) { // Handler for button watch events diff --git a/modules/Layout.md b/modules/Layout.md index 7a4177957..67db21858 100644 --- a/modules/Layout.md +++ b/modules/Layout.md @@ -59,6 +59,7 @@ layout.render(); - `cb` - a callback function - `cbl` - a callback function for long presses - `back` - a callback function, passed as `back` into Bangle.setUI (which usually adds an icon in the top left) +- `remove` - a cleanup function, passed as `remove` into Bangle.setUI (allows to cleanly remove the app from memory) If automatic lazy rendering is enabled, calls to `layout.render()` will attempt to automatically determine what objects have changed or moved, clear their previous locations, and re-render just those objects. diff --git a/modules/Layout.min.js b/modules/Layout.min.js index f801177aa..19e60f7a0 100644 --- a/modules/Layout.min.js +++ b/modules/Layout.min.js @@ -1,14 +1,14 @@ -function p(d,h){function b(e){"ram";e.id&&(a[e.id]=e);e.type||(e.type="");e.c&&e.c.forEach(b)}this._l=this.l=d;this.options=h||{};this.lazy=this.options.lazy||!1;this.physBtns=1;let f;if(2!=process.env.HWVERSION){this.physBtns=3;f=[];function e(l){"ram";"btn"==l.type&&f.push(l);l.c&&l.c.forEach(e)}e(d);f.length&&(this.physBtns=0,this.buttons=f,this.selectedButton=-1)}if(this.options.btns)if(d=this.options.btns,this.physBtns>=d.length){this.b=d;let e=Math.floor(Bangle.appRect.h/ -this.physBtns);for(2d.length;)d.push({label:""});this._l.width=g.getWidth()-8;this._l={type:"h",filly:1,c:[this._l,{type:"v",pad:1,filly:1,c:d.map(l=>(l.type="txt",l.font="6x8",l.height=e,l.r=1,l))}]}}else this._l.width=g.getWidth()-32,this._l={type:"h",c:[this._l,{type:"v",c:d.map(e=>(e.type="btn",e.filly=1,e.width=32,e.r=1,e))}]},f&&f.push.apply(f,this._l.c[1].c);this.setUI();var a=this;b(this._l);this.updateNeeded=!0}function t(d, -h,b,f,a){var e=null==d.bgCol?a:g.toColor(d.bgCol);if(e!=a||"txt"==d.type||"btn"==d.type||"img"==d.type||"custom"==d.type){var l=d.c;delete d.c;var k="H"+E.CRC32(E.toJS(d));l&&(d.c=l);delete h[k]||((f[k]=[d.x,d.y,d.x+d.w-1,d.y+d.h-1]).bg=null==a?g.theme.bg:a,b&&(b.push(d),b=null))}if(d.c)for(var c of d.c)t(c,h,b,f,e)}p.prototype.setUI=function(){Bangle.setUI();let d;this.buttons&&(Bangle.setUI({mode:"updown",back:this.options.back},h=>{var b=this.selectedButton,f=this.buttons.length;if(void 0===h&& -this.buttons[b])return this.buttons[b].cb();this.buttons[b]&&(delete this.buttons[b].selected,this.render(this.buttons[b]));b=(b+f+h)%f;this.buttons[b]&&(this.buttons[b].selected=1,this.render(this.buttons[b]));this.selectedButton=b}),d=!0);this.options.back&&!d&&Bangle.setUI({mode:"custom",back:this.options.back});if(this.b){function h(b,f){.75=b.x&&f.y>=b.y&&f.x<=b.x+b.w&&f.y<=b.y+b.h&&(2==f.type&&b.cbl?b.cbl(f):b.cb&&b.cb(f));b.c&&b.c.forEach(a=>h(a,f))}Bangle.touchHandler=(b,f)=>h(this._l,f);Bangle.on("touch",Bangle.touchHandler)}}; -p.prototype.render=function(d){function h(c){"ram";b.reset();void 0!==c.col&&b.setColor(c.col);void 0!==c.bgCol&&b.setBgColor(c.bgCol).clearRect(c.x,c.y,c.x+c.w-1,c.y+c.h-1);f[c.type](c)}d||(d=this._l);this.updateNeeded&&this.update();var b=g,f={"":function(){},txt:function(c){"ram";if(c.wrap){var m=b.setFont(c.font).setFontAlign(0,-1).wrapString(c.label,c.w),n=c.y+(c.h-b.getFontHeight()*m.length>>1);b.drawString(m.join("\n"),c.x+(c.w>>1),n)}else b.setFont(c.font).setFontAlign(0,0,c.r).drawString(c.label, -c.x+(c.w>>1),c.y+(c.h>>1))},btn:function(c){"ram";var m=c.x+(0|c.pad),n=c.y+(0|c.pad),q=c.w-(c.pad<<1),r=c.h-(c.pad<<1);m=[m,n+4,m+4,n,m+q-5,n,m+q-1,n+4,m+q-1,n+r-5,m+q-5,n+r-1,m+4,n+r-1,m,n+r-5,m,n+4];n=c.selected?b.theme.bgH:b.theme.bg2;b.setColor(n).fillPoly(m).setColor(c.selected?b.theme.fgH:b.theme.fg2).drawPoly(m);void 0!==c.col&&b.setColor(c.col);c.src?b.setBgColor(n).drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)}):b.setFont(c.font|| -"6x8:2").setFontAlign(0,0,c.r).drawString(c.label,c.x+c.w/2,c.y+c.h/2)},img:function(c){"ram";b.drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)})},custom:function(c){"ram";c.render(c)},h:function(c){"ram";c.c.forEach(h)},v:function(c){"ram";c.c.forEach(h)}};if(this.lazy){this.rects||(this.rects={});var a=this.rects.clone(),e=[];t(d,a,e,this.rects,null);for(var l in a)delete this.rects[l];d=Object.keys(a).map(c=>a[c]).reverse(); -for(var k of d)b.setBgColor(k.bg).clearRect.apply(g,k);e.forEach(h)}else h(d)};p.prototype.forgetLazyState=function(){this.rects={}};p.prototype.layout=function(d){var h={h:function(b){"ram";var f=b.x+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.fillx),0);e||(f+=b.w-b._w>>1,e=1);var l=f;b.c.forEach(k=>{k.x=0|l;f+=k._w;a+=0|k.fillx;l=f+Math.floor(a*(b.w-b._w)/e);k.w=0|l-k.x;k.h=0|(k.filly?b.h-(b.pad<<1):k._h);k.y=0|b.y+(0|b.pad)+((1+(0|k.valign))*(b.h-(b.pad<<1)-k.h)>>1);if(k.c)h[k.type](k)})},v:function(b){"ram"; -var f=b.y+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.filly),0);e||(f+=b.h-b._h>>1,e=1);var l=f;b.c.forEach(k=>{k.y=0|l;f+=k._h;a+=0|k.filly;l=f+Math.floor(a*(b.h-b._h)/e);k.h=0|l-k.y;k.w=0|(k.fillx?b.w-(b.pad<<1):k._w);k.x=0|b.x+(0|b.pad)+((1+(0|k.halign))*(b.w-(b.pad<<1)-k.w)>>1);if(k.c)h[k.type](k)})}};h[d.type](d)};p.prototype.debug=function(d,h){d||(d=this._l);h=h||1;g.setColor(h&1,h&2,h&4).drawRect(d.x+h-1,d.y+h-1,d.x+d.w-h,d.y+d.h-h);d.pad&&g.drawRect(d.x+d.pad-1,d.y+d.pad-1,d.x+d.w-d.pad, -d.y+d.h-d.pad);h++;d.c&&d.c.forEach(b=>this.debug(b,h))};p.prototype.update=function(){function d(a){"ram";b[a.type](a);if(a.r&1){var e=a._w;a._w=a._h;a._h=e}a._w=Math.max(a._w+(a.pad<<1),0|a.width);a._h=Math.max(a._h+(a.pad<<1),0|a.height)}delete this.updateNeeded;var h=g,b={txt:function(a){"ram";a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));if(a.wrap)a._h=a._w=0;else{var e=g.setFont(a.font).stringMetrics(a.label);a._w=e.width;a._h=e.height}},btn:function(a){"ram"; -a.font&&a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));var e=a.src?h.imageMetrics("function"==typeof a.src?a.src():a.src):h.setFont(a.font||"6x8:2").stringMetrics(a.label);a._h=16+e.height;a._w=20+e.width},img:function(a){"ram";var e=h.imageMetrics("function"==typeof a.src?a.src():a.src),l=a.scale||1;a._w=e.width*l;a._h=e.height*l},"":function(a){"ram";a._w=0;a._h=0},custom:function(a){"ram";a._w=0;a._h=0},h:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e, -l)=>Math.max(e,l._h),0);a._w=a.c.reduce((e,l)=>e+l._w,0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)},v:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e,l)=>e+l._h,0);a._w=a.c.reduce((e,l)=>Math.max(e,l._w),0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)}},f=this._l;d(f);delete b;f.fillx||f.filly?(f.w=Bangle.appRect.w,f.h=Bangle.appRect.h,f.x=Bangle.appRect.x,f.y=Bangle.appRect.y):(f.w=f._w, -f.h=f._h,f.x=Bangle.appRect.w-f.w>>1,f.y=Bangle.appRect.y+(Bangle.appRect.h-f.h>>1));this.layout(f)};p.prototype.clear=function(d){d||(d=this._l);g.reset();void 0!==d.bgCol&&g.setBgColor(d.bgCol);g.clearRect(d.x,d.y,d.x+d.w-1,d.y+d.h-1)};exports=p \ No newline at end of file +function p(d,h){function b(e){"ram";e.id&&(a[e.id]=e);e.type||(e.type="");e.c&&e.c.forEach(b)}this._l=this.l=d;this.options=h||{};this.lazy=this.options.lazy||!1;this.physBtns=1;let f;if(2!=process.env.HWVERSION){this.physBtns=3;f=[];function e(l){"ram";"btn"==l.type&&f.push(l);l.c&&l.c.forEach(e)}e(d);f.length&&(this.physBtns=0,this.buttons=f,this.selectedButton=-1)}if(this.options.btns)if(d=this.options.btns,this.physBtns>=d.length){this.b=d;let e=Math.floor(Bangle.appRect.h/this.physBtns); +for(2d.length;)d.push({label:""});this._l.width=g.getWidth()-8;this._l={type:"h",filly:1,c:[this._l,{type:"v",pad:1,filly:1,c:d.map(l=>(l.type="txt",l.font="6x8",l.height=e,l.r=1,l))}]}}else this._l.width=g.getWidth()-32,this._l={type:"h",c:[this._l,{type:"v",c:d.map(e=>(e.type="btn",e.filly=1,e.width=32,e.r=1,e))}]},f&&f.push.apply(f,this._l.c[1].c);this.setUI();var a=this;b(this._l);this.updateNeeded=!0}function t(d,h,b,f,a){var e= +null==d.bgCol?a:g.toColor(d.bgCol);if(e!=a||"txt"==d.type||"btn"==d.type||"img"==d.type||"custom"==d.type){var l=d.c;delete d.c;var k="H"+E.CRC32(E.toJS(d));l&&(d.c=l);delete h[k]||((f[k]=[d.x,d.y,d.x+d.w-1,d.y+d.h-1]).bg=null==a?g.theme.bg:a,b&&(b.push(d),b=null))}if(d.c)for(var c of d.c)t(c,h,b,f,e)}p.prototype.setUI=function(){Bangle.setUI();let d;this.buttons&&(Bangle.setUI({mode:"updown",back:this.options.back,remove:this.options.remove},h=>{var b=this.selectedButton,f=this.buttons.length;if(void 0=== +h&&this.buttons[b])return this.buttons[b].cb();this.buttons[b]&&(delete this.buttons[b].selected,this.render(this.buttons[b]));b=(b+f+h)%f;this.buttons[b]&&(this.buttons[b].selected=1,this.render(this.buttons[b]));this.selectedButton=b}),d=!0);!this.options.back&&!this.options.remove||d||Bangle.setUI({mode:"custom",back:this.options.back,remove:this.options.remove});if(this.b){function h(b,f){.75=b.x&&f.y>=b.y&&f.x<=b.x+b.w&&f.y<=b.y+b.h&&(2==f.type&&b.cbl?b.cbl(f):b.cb&&b.cb(f));b.c&&b.c.forEach(a=>h(a,f))}Bangle.touchHandler=(b,f)=>h(this._l,f);Bangle.on("touch", +Bangle.touchHandler)}};p.prototype.render=function(d){function h(c){"ram";b.reset();void 0!==c.col&&b.setColor(c.col);void 0!==c.bgCol&&b.setBgColor(c.bgCol).clearRect(c.x,c.y,c.x+c.w-1,c.y+c.h-1);f[c.type](c)}d||(d=this._l);this.updateNeeded&&this.update();var b=g,f={"":function(){},txt:function(c){"ram";if(c.wrap){var m=b.setFont(c.font).setFontAlign(0,-1).wrapString(c.label,c.w),n=c.y+(c.h-b.getFontHeight()*m.length>>1);b.drawString(m.join("\n"),c.x+(c.w>>1),n)}else b.setFont(c.font).setFontAlign(0, +0,c.r).drawString(c.label,c.x+(c.w>>1),c.y+(c.h>>1))},btn:function(c){"ram";var m=c.x+(0|c.pad),n=c.y+(0|c.pad),q=c.w-(c.pad<<1),r=c.h-(c.pad<<1);m=[m,n+4,m+4,n,m+q-5,n,m+q-1,n+4,m+q-1,n+r-5,m+q-5,n+r-1,m+4,n+r-1,m,n+r-5,m,n+4];n=c.selected?b.theme.bgH:b.theme.bg2;b.setColor(n).fillPoly(m).setColor(c.selected?b.theme.fgH:b.theme.fg2).drawPoly(m);void 0!==c.col&&b.setColor(c.col);c.src?b.setBgColor(n).drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5* +Math.PI*(c.r||0)}):b.setFont(c.font||"6x8:2").setFontAlign(0,0,c.r).drawString(c.label,c.x+c.w/2,c.y+c.h/2)},img:function(c){"ram";b.drawImage("function"==typeof c.src?c.src():c.src,c.x+c.w/2,c.y+c.h/2,{scale:c.scale||void 0,rotate:.5*Math.PI*(c.r||0)})},custom:function(c){"ram";c.render(c)},h:function(c){"ram";c.c.forEach(h)},v:function(c){"ram";c.c.forEach(h)}};if(this.lazy){this.rects||(this.rects={});var a=this.rects.clone(),e=[];t(d,a,e,this.rects,null);for(var l in a)delete this.rects[l];d= +Object.keys(a).map(c=>a[c]).reverse();for(var k of d)b.setBgColor(k.bg).clearRect.apply(g,k);e.forEach(h)}else h(d)};p.prototype.forgetLazyState=function(){this.rects={}};p.prototype.layout=function(d){var h={h:function(b){"ram";var f=b.x+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.fillx),0);e||(f+=b.w-b._w>>1,e=1);var l=f;b.c.forEach(k=>{k.x=0|l;f+=k._w;a+=0|k.fillx;l=f+Math.floor(a*(b.w-b._w)/e);k.w=0|l-k.x;k.h=0|(k.filly?b.h-(b.pad<<1):k._h);k.y=0|b.y+(0|b.pad)+((1+(0|k.valign))*(b.h-(b.pad<< +1)-k.h)>>1);if(k.c)h[k.type](k)})},v:function(b){"ram";var f=b.y+(0|b.pad),a=0,e=b.c&&b.c.reduce((k,c)=>k+(0|c.filly),0);e||(f+=b.h-b._h>>1,e=1);var l=f;b.c.forEach(k=>{k.y=0|l;f+=k._h;a+=0|k.filly;l=f+Math.floor(a*(b.h-b._h)/e);k.h=0|l-k.y;k.w=0|(k.fillx?b.w-(b.pad<<1):k._w);k.x=0|b.x+(0|b.pad)+((1+(0|k.halign))*(b.w-(b.pad<<1)-k.w)>>1);if(k.c)h[k.type](k)})}};h[d.type](d)};p.prototype.debug=function(d,h){d||(d=this._l);h=h||1;g.setColor(h&1,h&2,h&4).drawRect(d.x+h-1,d.y+h-1,d.x+d.w-h,d.y+d.h-h); +d.pad&&g.drawRect(d.x+d.pad-1,d.y+d.pad-1,d.x+d.w-d.pad,d.y+d.h-d.pad);h++;d.c&&d.c.forEach(b=>this.debug(b,h))};p.prototype.update=function(){function d(a){"ram";b[a.type](a);if(a.r&1){var e=a._w;a._w=a._h;a._h=e}a._w=Math.max(a._w+(a.pad<<1),0|a.width);a._h=Math.max(a._h+(a.pad<<1),0|a.height)}delete this.updateNeeded;var h=g,b={txt:function(a){"ram";a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));if(a.wrap)a._h=a._w=0;else{var e=g.setFont(a.font).stringMetrics(a.label); +a._w=e.width;a._h=e.height}},btn:function(a){"ram";a.font&&a.font.endsWith("%")&&(a.font="Vector"+Math.round(h.getHeight()*a.font.slice(0,-1)/100));var e=a.src?h.imageMetrics("function"==typeof a.src?a.src():a.src):h.setFont(a.font||"6x8:2").stringMetrics(a.label);a._h=16+e.height;a._w=20+e.width},img:function(a){"ram";var e=h.imageMetrics("function"==typeof a.src?a.src():a.src),l=a.scale||1;a._w=e.width*l;a._h=e.height*l},"":function(a){"ram";a._w=0;a._h=0},custom:function(a){"ram";a._w=0;a._h=0}, +h:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e,l)=>Math.max(e,l._h),0);a._w=a.c.reduce((e,l)=>e+l._w,0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)},v:function(a){"ram";a.c.forEach(d);a._h=a.c.reduce((e,l)=>e+l._h,0);a._w=a.c.reduce((e,l)=>Math.max(e,l._w),0);null==a.fillx&&a.c.some(e=>e.fillx)&&(a.fillx=1);null==a.filly&&a.c.some(e=>e.filly)&&(a.filly=1)}},f=this._l;d(f);delete b;f.fillx||f.filly?(f.w=Bangle.appRect.w,f.h=Bangle.appRect.h, +f.x=Bangle.appRect.x,f.y=Bangle.appRect.y):(f.w=f._w,f.h=f._h,f.x=Bangle.appRect.w-f.w>>1,f.y=Bangle.appRect.y+(Bangle.appRect.h-f.h>>1));this.layout(f)};p.prototype.clear=function(d){d||(d=this._l);g.reset();void 0!==d.bgCol&&g.setBgColor(d.bgCol);g.clearRect(d.x,d.y,d.x+d.w-1,d.y+d.h-1)};exports=p \ No newline at end of file From afa797591638f5394b4690536523c059038c8d46 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Wed, 30 Nov 2022 18:11:59 +0100 Subject: [PATCH 124/342] qcenter - Go back to settings menu instead of clock --- apps/qcenter/settings.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/apps/qcenter/settings.js b/apps/qcenter/settings.js index 544d85301..e4cd5458b 100644 --- a/apps/qcenter/settings.js +++ b/apps/qcenter/settings.js @@ -41,11 +41,8 @@ function showMainMenu() { var mainmenu = { - "": { title: "Quick Center" }, - "< Back": () => { - load(); - }, - }; + "": { title: "Quick Center", back: back} + }; // Set exit gesture mainmenu["Exit Gesture: " + exitGesture] = function () { @@ -56,10 +53,7 @@ pinnedApps.forEach((app, i) => { mainmenu[app.name] = function () { E.showMenu({ - "": { title: app.name }, - "< Back": () => { - showMainMenu(); - }, + "": { title: app.name, back: showMainMenu }, "Unpin": () => { pinnedApps.splice(i, 1); save("pinnedApps", pinnedApps); @@ -97,8 +91,7 @@ // menu for adding apps to the quick launch menu, listing all apps var pinAppMenu = { - "": { title: "Add App" }, - "< Back": showMainMenu, + "": { title: "Add App", back: showMainMenu } }; apps.forEach((a) => { pinAppMenu[a.name] = function () { @@ -113,8 +106,7 @@ // menu for setting exit gesture var exitGestureMenu = { - "": { title: "Exit Gesture" }, - "< Back": showMainMenu, + "": { title: "Exit Gesture", back: showMainMenu } }; exitGestureMenu["Swipe Up"] = function () { exitGesture = "swipeup"; From e82f64b69608928d9e107a7844b33cc21a797738 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Wed, 30 Nov 2022 18:16:05 +0100 Subject: [PATCH 125/342] qcenter - Add settings json to data array --- apps/qcenter/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index 96d8fa9f7..448b7271a 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -13,5 +13,6 @@ { "name": "qcenter.app.js", "url": "app.js" }, { "name": "qcenter.settings.js", "url": "settings.js" }, { "name": "qcenter.img", "url": "app-icon.js", "evaluate": true } - ] + ], + "data": [{"name":"qcenter.json"}] } From 557190b666f47aabc8e270d69f533d53bcb069ff Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Wed, 30 Nov 2022 18:18:31 +0100 Subject: [PATCH 126/342] qcenter - Change tabs to spaces according to code style --- apps/qcenter/app.js | 150 +++++++++++------------ apps/qcenter/metadata.json | 30 ++--- apps/qcenter/settings.js | 238 ++++++++++++++++++------------------- 3 files changed, 209 insertions(+), 209 deletions(-) diff --git a/apps/qcenter/app.js b/apps/qcenter/app.js index ef495ea17..be28db3b6 100644 --- a/apps/qcenter/app.js +++ b/apps/qcenter/app.js @@ -8,95 +8,95 @@ let exitGesture = settings.exitGesture || "swipeup"; // if empty load a default set of apps as an example if (pinnedApps.length == 0) { - pinnedApps = [ - { src: "setting.app.js", icon: "setting.img" }, - { src: "about.app.js", icon: "about.img" }, - ]; + pinnedApps = [ + { src: "setting.app.js", icon: "setting.img" }, + { src: "about.app.js", icon: "about.img" }, + ]; } // button drawing from Layout.js, edited to have completely custom button size with icon let drawButton = function(l) { - let x = l.x + (0 | l.pad), - y = l.y + (0 | l.pad), - w = l.w - (l.pad << 1), - h = l.h - (l.pad << 1); - let poly = [ - x, - y + 4, - x + 4, - y, - x + w - 5, - y, - x + w - 1, - y + 4, - x + w - 1, - y + h - 5, - x + w - 5, - y + h - 1, - x + 4, - y + h - 1, - x, - y + h - 5, - x, - y + 4, - ], - bg = l.selected ? g.theme.bgH : g.theme.bg2; - g.setColor(bg) - .fillPoly(poly) - .setColor(l.selected ? g.theme.fgH : g.theme.fg2) - .drawPoly(poly); - if (l.src) - g.setBgColor(bg).drawImage( - "function" == typeof l.src ? l.src() : l.src, - l.x + l.w / 2, - l.y + l.h / 2, - { scale: l.scale || undefined, rotate: Math.PI * 0.5 * (l.r || 0) } - ); + let x = l.x + (0 | l.pad), + y = l.y + (0 | l.pad), + w = l.w - (l.pad << 1), + h = l.h - (l.pad << 1); + let poly = [ + x, + y + 4, + x + 4, + y, + x + w - 5, + y, + x + w - 1, + y + 4, + x + w - 1, + y + h - 5, + x + w - 5, + y + h - 1, + x + 4, + y + h - 1, + x, + y + h - 5, + x, + y + 4, + ], + bg = l.selected ? g.theme.bgH : g.theme.bg2; + g.setColor(bg) + .fillPoly(poly) + .setColor(l.selected ? g.theme.fgH : g.theme.fg2) + .drawPoly(poly); + if (l.src) + g.setBgColor(bg).drawImage( + "function" == typeof l.src ? l.src() : l.src, + l.x + l.w / 2, + l.y + l.h / 2, + { scale: l.scale || undefined, rotate: Math.PI * 0.5 * (l.r || 0) } + ); } // function to split array into group of 3, for button placement let groupBy3 = function(data) { - let result = []; - for (let i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3)); - return result; + let result = []; + for (let i = 0; i < data.length; i += 3) result.push(data.slice(i, i + 3)); + return result; } // generate object with buttons for apps by group of 3 let appButtons = groupBy3(pinnedApps).map((appGroup, i) => { - return appGroup.map((app, j) => { - return { - type: "custom", - render: drawButton, - width: 50, - height: 50, - pad: 5, - src: require("Storage").read(app.icon), - scale: 0.75, - cb: (l) => load(app.src), - }; - }); + return appGroup.map((app, j) => { + return { + type: "custom", + render: drawButton, + width: 50, + height: 50, + pad: 5, + src: require("Storage").read(app.icon), + scale: 0.75, + cb: (l) => load(app.src), + }; + }); }); // create basic layout content with status info and sensor status on top let layoutContent = [ - { - type: "h", - pad: 5, - fillx: 1, - c: [ - { type: "txt", font: "8x12", pad: 3, scale: 2, label: E.getBattery() + "%" }, - { type: "txt", font: "8x12", pad: 3, scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") }, - ], - }, + { + type: "h", + pad: 5, + fillx: 1, + c: [ + { type: "txt", font: "8x12", pad: 3, scale: 2, label: E.getBattery() + "%" }, + { type: "txt", font: "8x12", pad: 3, scale: 2, label: "GPS: " + (Bangle.isGPSOn() ? "ON" : "OFF") }, + ], + }, ]; // create rows for buttons and add them to layoutContent appButtons.forEach((appGroup) => { - layoutContent.push({ - type: "h", - pad: 2, - c: appGroup, - }); + layoutContent.push({ + type: "h", + pad: 2, + c: appGroup, + }); }); // create layout with content @@ -105,8 +105,8 @@ Bangle.loadWidgets(); let Layout = require("Layout"); let layout = new Layout({ - type: "v", - c: layoutContent + type: "v", + c: layoutContent }, { remove: ()=>{ Bangle.removeListener("swipe", onSwipe); @@ -119,10 +119,10 @@ Bangle.drawWidgets(); // swipe event listener for exit gesture let onSwipe = function (lr, ud) { - if(exitGesture == "swipeup" && ud == -1) Bangle.showClock(); - if(exitGesture == "swipedown" && ud == 1) Bangle.showClock(); - if(exitGesture == "swipeleft" && lr == -1) Bangle.showClock(); - if(exitGesture == "swiperight" && lr == 1) Bangle.showClock(); + if(exitGesture == "swipeup" && ud == -1) Bangle.showClock(); + if(exitGesture == "swipedown" && ud == 1) Bangle.showClock(); + if(exitGesture == "swipeleft" && lr == -1) Bangle.showClock(); + if(exitGesture == "swiperight" && lr == 1) Bangle.showClock(); } Bangle.on("swipe", onSwipe); diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index 448b7271a..b07b9430e 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -1,18 +1,18 @@ { - "id": "qcenter", - "name": "Quick Center", - "shortName": "QCenter", - "version": "0.01", - "description": "An app for quickly launching your favourite apps, inspired by the control centres of other watches.", - "icon": "app.png", - "tags": "", - "supports": ["BANGLEJS2"], - "readme": "README.md", - "screenshots": [{ "url": "screenshot.png" }], - "storage": [ - { "name": "qcenter.app.js", "url": "app.js" }, - { "name": "qcenter.settings.js", "url": "settings.js" }, - { "name": "qcenter.img", "url": "app-icon.js", "evaluate": true } - ], + "id": "qcenter", + "name": "Quick Center", + "shortName": "QCenter", + "version": "0.01", + "description": "An app for quickly launching your favourite apps, inspired by the control centres of other watches.", + "icon": "app.png", + "tags": "", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "screenshots": [{ "url": "screenshot.png" }], + "storage": [ + { "name": "qcenter.app.js", "url": "app.js" }, + { "name": "qcenter.settings.js", "url": "settings.js" }, + { "name": "qcenter.img", "url": "app-icon.js", "evaluate": true } + ], "data": [{"name":"qcenter.json"}] } diff --git a/apps/qcenter/settings.js b/apps/qcenter/settings.js index e4cd5458b..2c97f8a5f 100644 --- a/apps/qcenter/settings.js +++ b/apps/qcenter/settings.js @@ -1,133 +1,133 @@ // make sure to enclose the function in parentheses (function (back) { - let settings = require("Storage").readJSON("qcenter.json", 1) || {}; - var apps = require("Storage") - .list(/\.info$/) - .map((app) => { - var a = require("Storage").readJSON(app, 1); - return ( - a && { - name: a.name, - type: a.type, - sortorder: a.sortorder, - src: a.src, - icon: a.icon, - } - ); - }) - .filter( - (app) => - app && - (app.type == "app" || - app.type == "launch" || - app.type == "clock" || - !app.type) - ); - apps.sort((a, b) => { - var n = (0 | a.sortorder) - (0 | b.sortorder); - if (n) return n; // do sortorder first - if (a.name < b.name) return -1; - if (a.name > b.name) return 1; - return 0; - }); + let settings = require("Storage").readJSON("qcenter.json", 1) || {}; + var apps = require("Storage") + .list(/\.info$/) + .map((app) => { + var a = require("Storage").readJSON(app, 1); + return ( + a && { + name: a.name, + type: a.type, + sortorder: a.sortorder, + src: a.src, + icon: a.icon, + } + ); + }) + .filter( + (app) => + app && + (app.type == "app" || + app.type == "launch" || + app.type == "clock" || + !app.type) + ); + apps.sort((a, b) => { + var n = (0 | a.sortorder) - (0 | b.sortorder); + if (n) return n; // do sortorder first + if (a.name < b.name) return -1; + if (a.name > b.name) return 1; + return 0; + }); - function save(key, value) { - settings[key] = value; - require("Storage").write("qcenter.json", settings); - } + function save(key, value) { + settings[key] = value; + require("Storage").write("qcenter.json", settings); + } - var pinnedApps = settings.pinnedApps || []; - var exitGesture = settings.exitGesture || "swipeup"; + var pinnedApps = settings.pinnedApps || []; + var exitGesture = settings.exitGesture || "swipeup"; - function showMainMenu() { - var mainmenu = { - "": { title: "Quick Center", back: back} + function showMainMenu() { + var mainmenu = { + "": { title: "Quick Center", back: back}, }; - // Set exit gesture - mainmenu["Exit Gesture: " + exitGesture] = function () { - E.showMenu(exitGestureMenu); - }; + // Set exit gesture + mainmenu["Exit Gesture: " + exitGesture] = function () { + E.showMenu(exitGestureMenu); + }; - //List all pinned apps, redirecting to menu with options to unpin and reorder - pinnedApps.forEach((app, i) => { - mainmenu[app.name] = function () { - E.showMenu({ - "": { title: app.name, back: showMainMenu }, - "Unpin": () => { - pinnedApps.splice(i, 1); - save("pinnedApps", pinnedApps); - showMainMenu(); - }, - "Move Up": () => { - if (i > 0) { - pinnedApps.splice(i - 1, 0, pinnedApps.splice(i, 1)[0]); - save("pinnedApps", pinnedApps); - showMainMenu(); - } - }, - "Move Down": () => { - if (i < pinnedApps.length - 1) { - pinnedApps.splice(i + 1, 0, pinnedApps.splice(i, 1)[0]); - save("pinnedApps", pinnedApps); - showMainMenu(); - } - }, - }); - }; - }); + //List all pinned apps, redirecting to menu with options to unpin and reorder + pinnedApps.forEach((app, i) => { + mainmenu[app.name] = function () { + E.showMenu({ + "": { title: app.name, back: showMainMenu }, + "Unpin": () => { + pinnedApps.splice(i, 1); + save("pinnedApps", pinnedApps); + showMainMenu(); + }, + "Move Up": () => { + if (i > 0) { + pinnedApps.splice(i - 1, 0, pinnedApps.splice(i, 1)[0]); + save("pinnedApps", pinnedApps); + showMainMenu(); + } + }, + "Move Down": () => { + if (i < pinnedApps.length - 1) { + pinnedApps.splice(i + 1, 0, pinnedApps.splice(i, 1)[0]); + save("pinnedApps", pinnedApps); + showMainMenu(); + } + }, + }); + }; + }); - // Show pin app menu, or show alert if max amount of apps are pinned - mainmenu["Pin App"] = function () { - if (pinnedApps.length < 6) { - E.showMenu(pinAppMenu); - } else { - E.showAlert("Max apps pinned").then(showMainMenu); - } - }; + // Show pin app menu, or show alert if max amount of apps are pinned + mainmenu["Pin App"] = function () { + if (pinnedApps.length < 6) { + E.showMenu(pinAppMenu); + } else { + E.showAlert("Max apps pinned").then(showMainMenu); + } + }; - return E.showMenu(mainmenu); - } + return E.showMenu(mainmenu); + } - // menu for adding apps to the quick launch menu, listing all apps - var pinAppMenu = { - "": { title: "Add App", back: showMainMenu } - }; - apps.forEach((a) => { - pinAppMenu[a.name] = function () { - // strip unncecessary properties - delete a.type; - delete a.sortorder; - pinnedApps.push(a); - save("pinnedApps", pinnedApps); - showMainMenu(); - }; - }); + // menu for adding apps to the quick launch menu, listing all apps + var pinAppMenu = { + "": { title: "Add App", back: showMainMenu } + }; + apps.forEach((a) => { + pinAppMenu[a.name] = function () { + // strip unncecessary properties + delete a.type; + delete a.sortorder; + pinnedApps.push(a); + save("pinnedApps", pinnedApps); + showMainMenu(); + }; + }); - // menu for setting exit gesture - var exitGestureMenu = { - "": { title: "Exit Gesture", back: showMainMenu } - }; - exitGestureMenu["Swipe Up"] = function () { - exitGesture = "swipeup"; - save("exitGesture", "swipeup"); - showMainMenu(); - }; - exitGestureMenu["Swipe Down"] = function () { - exitGesture = "swipedown"; - save("exitGesture", "swipedown"); - showMainMenu(); - }; - exitGestureMenu["Swipe Left"] = function () { - exitGesture = "swipeleft"; - save("exitGesture", "swipeleft"); - showMainMenu(); - }; - exitGestureMenu["Swipe Right"] = function () { - exitGesture = "swiperight"; - save("exitGesture", "swiperight"); - showMainMenu(); - }; + // menu for setting exit gesture + var exitGestureMenu = { + "": { title: "Exit Gesture", back: showMainMenu } + }; + exitGestureMenu["Swipe Up"] = function () { + exitGesture = "swipeup"; + save("exitGesture", "swipeup"); + showMainMenu(); + }; + exitGestureMenu["Swipe Down"] = function () { + exitGesture = "swipedown"; + save("exitGesture", "swipedown"); + showMainMenu(); + }; + exitGestureMenu["Swipe Left"] = function () { + exitGesture = "swipeleft"; + save("exitGesture", "swipeleft"); + showMainMenu(); + }; + exitGestureMenu["Swipe Right"] = function () { + exitGesture = "swiperight"; + save("exitGesture", "swiperight"); + showMainMenu(); + }; - showMainMenu(); + showMainMenu(); }); From 36e331e3600add4904d400d259eb9e6f9ab835a5 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Wed, 30 Nov 2022 18:18:56 +0100 Subject: [PATCH 127/342] qcenter - Bump version --- apps/qcenter/ChangeLog | 1 + apps/qcenter/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/qcenter/ChangeLog b/apps/qcenter/ChangeLog index 5560f00bc..900b9017c 100644 --- a/apps/qcenter/ChangeLog +++ b/apps/qcenter/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Fix fast loading on swipe to clock diff --git a/apps/qcenter/metadata.json b/apps/qcenter/metadata.json index b07b9430e..a325de10f 100644 --- a/apps/qcenter/metadata.json +++ b/apps/qcenter/metadata.json @@ -2,7 +2,7 @@ "id": "qcenter", "name": "Quick Center", "shortName": "QCenter", - "version": "0.01", + "version": "0.02", "description": "An app for quickly launching your favourite apps, inspired by the control centres of other watches.", "icon": "app.png", "tags": "", From 88da8fbc24620e7474a44d1ac5a280c9a2c86826 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 30 Nov 2022 19:08:18 +0100 Subject: [PATCH 128/342] gallery: Add interface Based on imageconverter.html with added Util.writeStorage()/Util.eraseStorage() --- apps/gallery/README.md | 4 +- apps/gallery/interface.html | 165 ++++++++++++++++++++++++++++++++++++ apps/gallery/metadata.json | 3 +- 3 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 apps/gallery/interface.html diff --git a/apps/gallery/README.md b/apps/gallery/README.md index b70fa07c2..65a0c36d3 100644 --- a/apps/gallery/README.md +++ b/apps/gallery/README.md @@ -8,6 +8,8 @@ Upon opening the gallery app, you will be presented with a list of images that y ## Adding images +Once this app is installed you can manage images by pressing the Disk icon next to it or by following the manual steps below: + 1. The gallery app does not perform any scaling, and does not support panning. Therefore, you should use your favorite image editor to produce an image of the appropriate size for your watch. (240x240 for Bangle 1 or 176x176 for Bangle 2.) How you achieve this is up to you. If on a Bangle 2, I recommend adjusting the colors here to comply with the color restrictions. 2. Upload your image to the [Espruino image converter](https://www.espruino.com/Image+Converter). I recommend enabling compression and choosing one of the following color settings: @@ -15,4 +17,4 @@ Upon opening the gallery app, you will be presented with a list of images that y * 3 bit RGB for Bangle 2 * 1 bit black/white for monochrome images that you want to respond to your system theme. (White will be rendered as your foreground color and black will be rendered as your background color.) -3. Set the output format to an image string, copy it into the [IDE](https://www.espruino.com/ide/), and set the destination to a file in storage. The file name should begin with "gal-" (without the quotes) and end with ".img" (without the quotes) to appear in the gallery. Note that the gal- prefix and .img extension will be removed in the UI. Upload the file. \ No newline at end of file +3. Set the output format to an image string, copy it into the [IDE](https://www.espruino.com/ide/), and set the destination to a file in storage. The file name should begin with "gal-" (without the quotes) and end with ".img" (without the quotes) to appear in the gallery. Note that the gal- prefix and .img extension will be removed in the UI. Upload the file. diff --git a/apps/gallery/interface.html b/apps/gallery/interface.html new file mode 100644 index 000000000..f309270ca --- /dev/null +++ b/apps/gallery/interface.html @@ -0,0 +1,165 @@ + + + + + + + + + +

Existing Images

+
    +
+ +

Convert & Upload Images

+ +
+ Use Compression?
+ Transparency to Color
+ Transparency?
+ Inverted?
+ Crop?
+ Diffusion:
+ + Brightness: +
+ Contrast: +
+ Colours:
+ + + + + + + + diff --git a/apps/gallery/metadata.json b/apps/gallery/metadata.json index 89f7606aa..0dc8d1613 100644 --- a/apps/gallery/metadata.json +++ b/apps/gallery/metadata.json @@ -12,6 +12,7 @@ "BANGLEJS" ], "allow_emulator": true, + "interface": "interface.html", "storage": [ { "name": "gallery.app.js", @@ -23,4 +24,4 @@ "evaluate": true } ] -} \ No newline at end of file +} From f21a0c6a520a201ddb7a1dca0d017415143bea9f Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Wed, 30 Nov 2022 20:44:19 +0100 Subject: [PATCH 129/342] add loadWidgets to work with Fastload Utils app --- apps/torch/ChangeLog | 1 + apps/torch/app.js | 1 + apps/torch/metadata.json | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/torch/ChangeLog b/apps/torch/ChangeLog index fa69d5d04..9c8521265 100644 --- a/apps/torch/ChangeLog +++ b/apps/torch/ChangeLog @@ -8,3 +8,4 @@ 0.08: Force background of widget field to the torch colour 0.09: Change code taking FW tweaks into account 0.10: Introduce fast switching. +0.11: Make compatible with Fastload Utils by loading widgets. diff --git a/apps/torch/app.js b/apps/torch/app.js index 5d288579c..a10943794 100644 --- a/apps/torch/app.js +++ b/apps/torch/app.js @@ -18,6 +18,7 @@ g.setTheme({bg:settings.bg,fg:"#000"}); g.setColor(settings.bg); g.fillRect(0,0,g.getWidth(),g.getHeight()); + Bangle.loadWidgets(); Bangle.setUI({ mode : 'custom', back : Bangle.showClock, // B2: SW back button to exit diff --git a/apps/torch/metadata.json b/apps/torch/metadata.json index 48399de96..4e8794663 100644 --- a/apps/torch/metadata.json +++ b/apps/torch/metadata.json @@ -2,7 +2,7 @@ "id": "torch", "name": "Torch", "shortName": "Torch", - "version": "0.10", + "version": "0.11", "description": "Turns screen white to help you see in the dark. Select from the launcher or press BTN1,BTN3,BTN1,BTN3 quickly to start when in any app that shows widgets on Bangle.js 1. You can also set the color through the app's setting menu.", "icon": "app.png", "tags": "tool,torch", From 95c5fd8bcff453f80096a5f755b9767e0ff205d1 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Wed, 30 Nov 2022 21:10:06 +0100 Subject: [PATCH 130/342] only load widgets if fastload is installed --- apps/torch/ChangeLog | 3 ++- apps/torch/app.js | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/torch/ChangeLog b/apps/torch/ChangeLog index 9c8521265..a3665a562 100644 --- a/apps/torch/ChangeLog +++ b/apps/torch/ChangeLog @@ -8,4 +8,5 @@ 0.08: Force background of widget field to the torch colour 0.09: Change code taking FW tweaks into account 0.10: Introduce fast switching. -0.11: Make compatible with Fastload Utils by loading widgets. +0.11: Make compatible with Fastload Utils by loading widgets. No change if +Fastload Utils is not installed. diff --git a/apps/torch/app.js b/apps/torch/app.js index a10943794..a65a2ff49 100644 --- a/apps/torch/app.js +++ b/apps/torch/app.js @@ -1,14 +1,15 @@ { const SETTINGS_FILE = "torch.json"; let settings; + let s = require("Storage"); let loadSettings = function() { - settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'bg': '#FFFFFF', 'color': 'White'}; + settings = s.readJSON(SETTINGS_FILE,1)|| {'bg': '#FFFFFF', 'color': 'White'}; }; loadSettings(); - let brightnessBackup = require("Storage").readJSON('setting.json').brightness; + let brightnessBackup = s.readJSON('setting.json').brightness; let optionsBackup = Bangle.getOptions(); Bangle.setLCDBrightness(1); Bangle.setLCDPower(1); @@ -18,7 +19,8 @@ g.setTheme({bg:settings.bg,fg:"#000"}); g.setColor(settings.bg); g.fillRect(0,0,g.getWidth(),g.getHeight()); - Bangle.loadWidgets(); + // if Fastload Utils is installed, make Torch compatible with it. + if (s.readJSON('fastload.info') != undefined) Bangle.loadWidgets(); Bangle.setUI({ mode : 'custom', back : Bangle.showClock, // B2: SW back button to exit From c4cbac0898edaa45b3f7484cd379c9ad5972d871 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Wed, 30 Nov 2022 21:45:57 +0100 Subject: [PATCH 131/342] use widget_utils slideOn - needs further work --- apps/torch/app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/torch/app.js b/apps/torch/app.js index a65a2ff49..0b7dc53ff 100644 --- a/apps/torch/app.js +++ b/apps/torch/app.js @@ -20,7 +20,10 @@ g.setColor(settings.bg); g.fillRect(0,0,g.getWidth(),g.getHeight()); // if Fastload Utils is installed, make Torch compatible with it. - if (s.readJSON('fastload.info') != undefined) Bangle.loadWidgets(); + if (s.readJSON('fastload.info') != undefined) { + Bangle.loadWidgets(); + require('widget_utils').swipeOn(); + } Bangle.setUI({ mode : 'custom', back : Bangle.showClock, // B2: SW back button to exit From 59c745a743512ed1b4bb16a3d62142f38610c17e Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 30 Nov 2022 22:05:38 +0100 Subject: [PATCH 132/342] [sleeplogalarm] Add sched dependency --- apps/sleeplogalarm/README.md | 2 +- apps/sleeplogalarm/metadata.json | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 09a30b7eb..005377fb1 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -2,7 +2,7 @@ This widget searches for active alarms and raises an own alarm event up to the defined time earlier, if in light sleep or awake phase. Optional the earlier alarm will only be triggered if comming from or in consecutive sleep. The settings of the earlier alarm can be adjusted and it is possible to filter the targeting alarms by time and message. By default the time of the targeting alarm is displayed inside the widget which can be adjusted, too. -_This widget does not detect sleep by its own and requires the [sleeplog](/apps/?id=sleeplog) app to be installed._ +_This widget does not detect sleep on its own and can not create alarms. It requires the [sleeplog](/apps/?id=sleeplog) app and any alarm app that uses [sched](/apps/?id=sched) to be installed._ --- ### Settings diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 1930a0ee3..235c1ecc1 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -8,7 +8,10 @@ "type": "widget", "tags": "tool,widget", "supports": ["BANGLEJS2"], - "dependencies": {"sleeplog": "app"}, + "dependencies": [ + {"scheduler": "type"}, + {"sleeplog": "app"} + ], "readme": "README.md", "storage": [ {"name": "sleeplogalarm", "url": "lib.js"}, From 439ecd703d5207b0f01d22f1c198b795328419ee Mon Sep 17 00:00:00 2001 From: storm64 Date: Wed, 30 Nov 2022 22:31:55 +0100 Subject: [PATCH 133/342] [sleeplogalarm] Correct dependencies in metadata --- apps/sleeplogalarm/metadata.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 235c1ecc1..fd85507e6 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -8,10 +8,10 @@ "type": "widget", "tags": "tool,widget", "supports": ["BANGLEJS2"], - "dependencies": [ - {"scheduler": "type"}, - {"sleeplog": "app"} - ], + "dependencies": { + "scheduler": "type", + "sleeplog": "app" + }, "readme": "README.md", "storage": [ {"name": "sleeplogalarm", "url": "lib.js"}, From e01e08db220eed861469d5d3e6c6388854adfefa Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Wed, 30 Nov 2022 23:40:47 +0100 Subject: [PATCH 134/342] no swipeOn for HW=1 --- apps/torch/app.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/torch/app.js b/apps/torch/app.js index 0b7dc53ff..1c96d50f3 100644 --- a/apps/torch/app.js +++ b/apps/torch/app.js @@ -2,6 +2,7 @@ const SETTINGS_FILE = "torch.json"; let settings; let s = require("Storage"); + let wu = require("widget_utils"); let loadSettings = function() { settings = s.readJSON(SETTINGS_FILE,1)|| {'bg': '#FFFFFF', 'color': 'White'}; @@ -19,10 +20,10 @@ g.setTheme({bg:settings.bg,fg:"#000"}); g.setColor(settings.bg); g.fillRect(0,0,g.getWidth(),g.getHeight()); - // if Fastload Utils is installed, make Torch compatible with it. - if (s.readJSON('fastload.info') != undefined) { + if (s.read('fastload.cache')!==undefined) { Bangle.loadWidgets(); - require('widget_utils').swipeOn(); + if (process.env.HWVERSION==1) wu.hide(); + if (process.env.HWVERSION==2) wu.swipeOn(); } Bangle.setUI({ mode : 'custom', @@ -32,6 +33,8 @@ Bangle.setLCDBrightness(brightnessBackup); Bangle.setOptions(optionsBackup); g.setTheme(themeBackup); + wu.show(); } }); } + From e9c673e119bdae72442bebbd9f6af356ab146496 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Wed, 30 Nov 2022 23:58:36 +0100 Subject: [PATCH 135/342] messages,messagegui: fix handling of music The library combines musicinfo+musicstate messages, and waited for a "complete" message before emitting the event. But once you are playing music you don't get new music state events. The problem was that when the first "complete" message arrives, the UI is load()ed, so the library forgets its state, and doesn't emit anymore music events until the play state changes. This - changes the library to keep combining music messages, but always emit an event - makes the UI only launch itself if it sees a "complete" music event - makes the UI also combine musicinfo+musicstate messages --- apps/messagegui/ChangeLog | 1 + apps/messagegui/app.js | 4 +++- apps/messagegui/lib.js | 4 ++-- apps/messagegui/metadata.json | 2 +- apps/messages/ChangeLog | 1 + apps/messages/lib.js | 1 - apps/messages/metadata.json | 2 +- 7 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 3dcb20fe8..0fd43347d 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -77,3 +77,4 @@ 0.54: Move icons out to messageicons module 0.55: Rename to messagegui, move global message handling library to message module Move widget to widmessage +0.56: Fix handling of music messages diff --git a/apps/messagegui/app.js b/apps/messagegui/app.js index bf086dd3d..50dc9182a 100644 --- a/apps/messagegui/app.js +++ b/apps/messagegui/app.js @@ -112,9 +112,11 @@ function showMapMessage(msg) { Bangle.setUI({mode:"updown", back: back}, back); // any input takes us back } -var updateLabelsInterval; +let updateLabelsInterval, + music = {artist: "", album: "", title: ""}; // defaults, so e.g. msg.title.length doesn't error function showMusicMessage(msg) { active = "music"; + msg = Object.assign(music, msg); // combine+remember "musicinfo" and "musicstate" messages openMusic = msg.state=="play"; var trackScrollOffset = 0; var artistScrollOffset = 0; diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index 5b07dd160..e45e6e5a0 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -15,12 +15,12 @@ exports.listener = function(type, msg) { const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {}; let loadMessages = (Bangle.CLOCK || event.important); if (type==="music") { - if (Bangle.CLOCK && msg.new && appSettings.openMusic) loadMessages = true; + if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true; else return; } require("messages").save(msg); msg.handled = true; - if (msg.t!=="add" || !msg.new) { + if ((msg.t!=="add" || !msg.new) && (type!=="music")) { // music always has t:"modify" return; } diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index c92fa90f5..361ce9b3d 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,7 +1,7 @@ { "id": "messagegui", "name": "Message UI", - "version": "0.55", + "version": "0.56", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index c984e4a0f..3df056d62 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1 +1,2 @@ 0.55: Moved messages library into standalone library +0.56: Fix handling of music messages diff --git a/apps/messages/lib.js b/apps/messages/lib.js index fa1419c95..e5c81f3fd 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -6,7 +6,6 @@ exports.music = {}; function emit(msg) { let type = "text"; if (["call", "music", "map"].includes(msg.id)) type = msg.id; - if (type==="music" && msg.t!=="remove" && (!("state" in msg) || (!("track" in msg)))) return; // wait for complete music info if (msg.src && msg.src.toLowerCase().startsWith("alarm")) type = "alarm"; Bangle.emit("message", type, msg); } diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 74c89b1b4..8bcf3da25 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.55", + "version": "0.56", "description": "Library to handle, load and store message events received from Android/iOS", "icon": "app.png", "type": "module", From ef74a18566a1f7c2859422dce3e694a293398a0b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 1 Dec 2022 00:45:48 +0100 Subject: [PATCH 136/342] load widgets and hide them --- apps/torch/ChangeLog | 3 +-- apps/torch/app.js | 8 ++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/torch/ChangeLog b/apps/torch/ChangeLog index a3665a562..35d3f5927 100644 --- a/apps/torch/ChangeLog +++ b/apps/torch/ChangeLog @@ -8,5 +8,4 @@ 0.08: Force background of widget field to the torch colour 0.09: Change code taking FW tweaks into account 0.10: Introduce fast switching. -0.11: Make compatible with Fastload Utils by loading widgets. No change if -Fastload Utils is not installed. +0.11: Make compatible with Fastload Utils by loading and hiding widgets. diff --git a/apps/torch/app.js b/apps/torch/app.js index 1c96d50f3..b44cfb929 100644 --- a/apps/torch/app.js +++ b/apps/torch/app.js @@ -20,11 +20,8 @@ g.setTheme({bg:settings.bg,fg:"#000"}); g.setColor(settings.bg); g.fillRect(0,0,g.getWidth(),g.getHeight()); - if (s.read('fastload.cache')!==undefined) { - Bangle.loadWidgets(); - if (process.env.HWVERSION==1) wu.hide(); - if (process.env.HWVERSION==2) wu.swipeOn(); - } + Bangle.loadWidgets(); + wu.hide(); Bangle.setUI({ mode : 'custom', back : Bangle.showClock, // B2: SW back button to exit @@ -37,4 +34,3 @@ } }); } - From 1d4fb1301a65b0f94eab0e4f6ae173112a68c627 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 1 Dec 2022 00:54:38 +0100 Subject: [PATCH 137/342] ClockFace: support Fast Loading, by adding a remove() function to clocks --- modules/ClockFace.js | 36 ++++++++++++++++++++++++++++++------ modules/ClockFace.md | 5 +++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/modules/ClockFace.js b/modules/ClockFace.js index c12360626..b1b007be9 100644 --- a/modules/ClockFace.js +++ b/modules/ClockFace.js @@ -9,7 +9,7 @@ function ClockFace(options) { if (![ "precision", "init", "draw", "update", - "pause", "resume", + "pause", "resume", "remove", "up", "down", "upDown", "settingsFile", ].includes(k)) throw `Invalid ClockFace option: ${k}`; @@ -27,6 +27,7 @@ function ClockFace(options) { if (options.init) this.init = options.init; if (options.pause) this._pause = options.pause; if (options.resume) this._resume = options.resume; + if (options.remove) this._remove = options.remove; if ((options.up || options.down) && options.upDown) throw "ClockFace up/down and upDown cannot be used together"; if (options.up || options.down) this._upDown = (dir) => { if (dir<0 && options.up) options.up.apply(this); @@ -44,8 +45,15 @@ function ClockFace(options) { ["showDate", "loadWidgets"].forEach(k => { if (this[k]===undefined) this[k] = true; }); + let s = require("Storage").readJSON("setting.json",1)||{}; + if ((global.__FILE__===undefined || global.__FILE__===s.clock) + && s.clockHasWidgets!==this.loadWidgets) { + // save whether we can Fast Load + s.clockHasWidgets = this.loadWidgets; + require("Storage").writeJSON("setting.json", s); + } // use global 24/12-hour setting if not set by clock-settings - if (!('is12Hour' in this)) this.is12Hour = !!(require("Storage").readJSON("setting.json", true) || {})["12hour"]; + if (!('is12Hour' in this)) this.is12Hour = !!(s["12hour"]); } ClockFace.prototype.tick = function() { @@ -85,16 +93,27 @@ ClockFace.prototype.start = function() { Bangle.CLOCK = 1; if (this.loadWidgets) Bangle.loadWidgets(); if (this.init) this.init.apply(this); - if (this._upDown) Bangle.setUI("clockupdown", d=>this._upDown.apply(this,[d])); - else Bangle.setUI("clock"); + const uiRemove = this._remove ? () => this.remove() : undefined; + if (this._upDown) { + Bangle.setUI({ + mode: "clockupdown", + remove: uiRemove, + }, d => this._upDown.apply(this, [d])); + } else { + Bangle.setUI({ + mode: "clock", + remove: uiRemove, + }); + } delete this._last; this.paused = false; this.tick(); - Bangle.on("lcdPower", on => { + this._onLcd = on => { if (on) this.resume(); else this.pause(); - }); + }; + Bangle.on("lcdPower", this._onLcd); }; ClockFace.prototype.pause = function() { @@ -111,6 +130,11 @@ ClockFace.prototype.resume = function() { if (this._resume) this._resume.apply(this); this.tick(); }; +ClockFace.prototype.remove = function() { + if (this._timeout) clearTimeout(this._timeout); + Bangle.removeListener("lcdPower", this._onLcd); + if (this._remove) this._remove.apply(this); +}; /** * Force a complete redraw diff --git a/modules/ClockFace.md b/modules/ClockFace.md index 85482213c..f123d38c0 100644 --- a/modules/ClockFace.md +++ b/modules/ClockFace.md @@ -77,6 +77,11 @@ var clock = new ClockFace({ resume: function() { // optional, called when the screen turns on // for example: turn GPS/compass back on }, + remove: function() { // optional, used for Fast Loading + // for example: remove listeners + // Fast Loading will not be used unless this function is present, + // if there is nothing to clean up, you can just leave it empty. + }, up: function() { // optional, up handler }, down: function() { // optional, down handler From 050139c763ab9705b9630184418410012f5493a6 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 1 Dec 2022 01:16:23 +0100 Subject: [PATCH 138/342] barclock: add Fast Loading --- apps/barclock/ChangeLog | 3 +- apps/barclock/clock-bar.js | 234 ++++++++++++++++++------------------ apps/barclock/metadata.json | 2 +- 3 files changed, 122 insertions(+), 117 deletions(-) diff --git a/apps/barclock/ChangeLog b/apps/barclock/ChangeLog index a00ae9325..88f4eaf00 100644 --- a/apps/barclock/ChangeLog +++ b/apps/barclock/ChangeLog @@ -12,4 +12,5 @@ 0.12: Add settings to hide date,widgets 0.13: Add font setting 0.14: Use ClockFace_menu.addItems -0.15: Add Power saving option \ No newline at end of file +0.15: Add Power saving option +0.16: Support Fast Loading diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index 5a7dfc8c0..f2499189b 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -1,124 +1,128 @@ /* jshint esversion: 6 */ -/** - * A simple digital clock showing seconds as a bar - **/ +{ + /** + * A simple digital clock showing seconds as a bar + **/ // Check settings for what type our clock should be -let locale = require("locale"); -{ // add some more info to locale - let date = new Date(); - date.setFullYear(1111); - date.setMonth(1, 3); // februari: months are zero-indexed - const localized = locale.date(date, true); - locale.dayFirst = /3.*2/.test(localized); - locale.hasMeridian = (locale.meridian(date)!==""); -} - -let barW = 0, prevX = 0; -function renderBar(l) { - "ram"; - if (l) prevX = 0; // called from Layout: drawing area was cleared - else l = clock.layout.bar; - let x2 = l.x+barW; - if (clock.powerSave && Bangle.isLocked()) x2 = 0; // hide bar - if (x2===prevX) return; // nothing to do - if (x2===0) x2--; // don't leave 1px line - if (x212) { - date12.setHours(hours-12); - } - return locale.time(date12, true); -} -function ampmText(date) { - return (clock.is12Hour && locale.hasMeridian) ? locale.meridian(date) : ""; -} -function dateText(date) { - const dayName = locale.dow(date, true), - month = locale.month(date, true), - day = date.getDate(); - const dayMonth = locale.dayFirst ? `${day} ${month}` : `${month} ${day}`; - return `${dayName} ${dayMonth}`; -} -const ClockFace = require("ClockFace"), - clock = new ClockFace({ - precision: 1, - settingsFile: "barclock.settings.json", - init: function() { - const Layout = require("Layout"); - this.layout = new Layout({ - type: "v", c: [ - { - type: "h", c: [ - {id: "time", label: "88:88", type: "txt", font: "6x8:5", col: g.theme.fg, bgCol: g.theme.bg}, // updated below - {id: "ampm", label: " ", type: "txt", font: "6x8:2", col: g.theme.fg, bgCol: g.theme.bg}, - ], - }, - {id: "bar", type: "custom", fillx: 1, height: 6, col: g.theme.fg2, render: renderBar}, - this.showDate ? {height: 40} : {}, - this.showDate ? {id: "date", type: "txt", font: "10%", valign: 1} : {}, - ], - }, {lazy: true}); - // adjustments based on screen size and whether we display am/pm - let thickness; // bar thickness, same as time font "pixel block" size - if (this.is12Hour && locale.hasMeridian) { - // Maximum font size = ( - ) / (5chars * 6px) - thickness = Math.floor((Bangle.appRect.w-24)/(5*6)); - } else { - this.layout.ampm.label = ""; - thickness = Math.floor(Bangle.appRect.w/(5*6)); - } - let bar = this.layout.bar; - bar.height = thickness+1; - if (this.font===1) { // vector - const B2 = process.env.HWVERSION>1; + let barW = 0, prevX = 0; + const renderBar = function (l) { + "ram"; + if (l) prevX = 0; // called from Layout: drawing area was cleared + else l = clock.layout.bar; + let x2 = l.x+barW; + if (clock.powerSave && Bangle.isLocked()) x2 = 0; // hide bar + if (x2===prevX) return; // nothing to do + if (x2===0) x2--; // don't leave 1px line + if (x212) { + date12.setHours(hours-12); + } + return locale.time(date12, true); + } + const ampmText = date => (clock.is12Hour && locale.hasMeridian) ? locale.meridian(date) : ""; + const dateText = date => { + const dayName = locale.dow(date, true), + month = locale.month(date, true), + day = date.getDate(); + const dayMonth = locale.dayFirst ? `${day} ${month}` : `${month} ${day}`; + return `${dayName} ${dayMonth}`; + }; + + const ClockFace = require("ClockFace"), + clock = new ClockFace({ + precision: 1, + settingsFile: "barclock.settings.json", + init: function() { + const Layout = require("Layout"); + this.layout = new Layout({ + type: "v", c: [ + { + type: "h", c: [ + {id: "time", label: "88:88", type: "txt", font: "6x8:5", col: g.theme.fg, bgCol: g.theme.bg}, // updated below + {id: "ampm", label: " ", type: "txt", font: "6x8:2", col: g.theme.fg, bgCol: g.theme.bg}, + ], + }, + {id: "bar", type: "custom", fillx: 1, height: 6, col: g.theme.fg2, render: renderBar}, + this.showDate ? {height: 40} : {}, + this.showDate ? {id: "date", type: "txt", font: "10%", valign: 1} : {}, + ], + }, {lazy: true}); + // adjustments based on screen size and whether we display am/pm + let thickness; // bar thickness, same as time font "pixel block" size if (this.is12Hour && locale.hasMeridian) { - this.layout.time.font = "Vector:"+(B2 ? 50 : 60); - this.layout.ampm.font = "Vector:"+(B2 ? 20 : 40); + // Maximum font size = ( - ) / (5chars * 6px) + thickness = Math.floor((Bangle.appRect.w-24)/(5*6)); } else { - this.layout.time.font = "Vector:"+(B2 ? 60 : 80); + this.layout.ampm.label = ""; + thickness = Math.floor(Bangle.appRect.w/(5*6)); } - } else { - this.layout.time.font = "6x8:"+thickness; - } - this.layout.update(); - bar.y2 = bar.y+bar.height-1; - }, - update: function(date, c) { - "ram"; - if (c.m) this.layout.time.label = timeText(date); - if (c.h) this.layout.ampm.label = ampmText(date); - if (c.d && this.showDate) this.layout.date.label = dateText(date); - if (c.m) this.layout.render(); - if (c.s) { - barW = Math.round(date.getSeconds()/60*this.layout.bar.w); - renderBar(); - } - }, - resume: function() { - prevX = 0; // force redraw of bar - this.layout.forgetLazyState(); - }, - }); + let bar = this.layout.bar; + bar.height = thickness+1; + if (this.font===1) { // vector + const B2 = process.env.HWVERSION>1; + if (this.is12Hour && locale.hasMeridian) { + this.layout.time.font = "Vector:"+(B2 ? 50 : 60); + this.layout.ampm.font = "Vector:"+(B2 ? 20 : 40); + } else { + this.layout.time.font = "Vector:"+(B2 ? 60 : 80); + } + } else { + this.layout.time.font = "6x8:"+thickness; + } + this.layout.update(); + bar.y2 = bar.y+bar.height-1; + }, + update: function(date, c) { + "ram"; + if (c.m) this.layout.time.label = timeText(date); + if (c.h) this.layout.ampm.label = ampmText(date); + if (c.d && this.showDate) this.layout.date.label = dateText(date); + if (c.m) this.layout.render(); + if (c.s) { + barW = Math.round(date.getSeconds()/60*this.layout.bar.w); + renderBar(); + } + }, + resume: function() { + prevX = 0; // force redraw of bar + this.layout.forgetLazyState(); + }, + remove: function() { + if (this.onLock) Bangle.removeListener("lock", this.onLock); + }, + }); -// power saving: only update once a minute while locked, hide bar -if (clock.powerSave) { - Bangle.on("lock", lock => { - clock.precision = lock ? 60 : 1; - clock.tick(); - renderBar(); // hide/redraw bar right away - }); -} + // power saving: only update once a minute while locked, hide bar + if (clock.powerSave) { + clock.onLock = lock => { + clock.precision = lock ? 60 : 1; + clock.tick(); + renderBar(); // hide/redraw bar right away + } + Bangle.on("lock", clock.onLock); + } -clock.start(); + clock.start(); +} \ No newline at end of file diff --git a/apps/barclock/metadata.json b/apps/barclock/metadata.json index 5b783dbda..785c228b0 100644 --- a/apps/barclock/metadata.json +++ b/apps/barclock/metadata.json @@ -1,7 +1,7 @@ { "id": "barclock", "name": "Bar Clock", - "version": "0.15", + "version": "0.16", "description": "A simple digital clock showing seconds as a bar", "icon": "clock-bar.png", "screenshots": [{"url":"screenshot.png"},{"url":"screenshot_pm.png"}], From 41046b9bb1b7aa986c3a684751dc075149e61dae Mon Sep 17 00:00:00 2001 From: Dustin Richards Date: Thu, 1 Dec 2022 02:03:23 -0700 Subject: [PATCH 139/342] [alarm] add confirm button to edit alarm menu --- apps/alarm/app.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index ed5aa608a..a0cde1074 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -128,6 +128,11 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex) { value: alarm.hidden || false, onchange: v => alarm.hidden = v }, + /*LANG*/"Confirm": () { + prepareAlarmForSave(alarm, alarmIndex, time); + saveAndReload(); + showMainMenu(); + }, /*LANG*/"Cancel": () => showMainMenu() }; From 6fe79f47b678a5f13951a6fa28d5e8cf075938a1 Mon Sep 17 00:00:00 2001 From: Dustin Richards Date: Thu, 1 Dec 2022 02:10:00 -0700 Subject: [PATCH 140/342] [alarm] fix broken lambda --- apps/alarm/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index a0cde1074..b7d9ff82a 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -128,7 +128,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex) { value: alarm.hidden || false, onchange: v => alarm.hidden = v }, - /*LANG*/"Confirm": () { + /*LANG*/"Confirm": () => { prepareAlarmForSave(alarm, alarmIndex, time); saveAndReload(); showMainMenu(); From 245c15646839118021760904708a293ecb9e784c Mon Sep 17 00:00:00 2001 From: Dustin Richards Date: Thu, 1 Dec 2022 02:19:41 -0700 Subject: [PATCH 141/342] [alarm] version bump --- apps/alarm/ChangeLog | 1 + apps/alarm/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 52ee8bf9c..6e648d42a 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -34,4 +34,5 @@ 0.32: Fix wrong hidden filter Add option for auto-delete a timer after it expires 0.33: Allow hiding timers&alarms +0.34: Add "Confirm" option to alarm/timer edit menus diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index 31dd58ece..2e4ea9f94 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.33", + "version": "0.34", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", From edcfd198feb2eb9ebcd70164726e99a1106e1b50 Mon Sep 17 00:00:00 2001 From: Dustin Richards Date: Thu, 1 Dec 2022 02:29:00 -0700 Subject: [PATCH 142/342] [alarm] add confirm button to edit timer menu --- apps/alarm/app.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index b7d9ff82a..efcabfb6d 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -128,12 +128,12 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex) { value: alarm.hidden || false, onchange: v => alarm.hidden = v }, + /*LANG*/"Cancel": () => showMainMenu(), /*LANG*/"Confirm": () => { prepareAlarmForSave(alarm, alarmIndex, time); saveAndReload(); showMainMenu(); - }, - /*LANG*/"Cancel": () => showMainMenu() + } }; if (!isNew) { @@ -298,7 +298,12 @@ function showEditTimerMenu(selectedTimer, timerIndex) { onchange: v => timer.hidden = v }, /*LANG*/"Vibrate": require("buzz_menu").pattern(timer.vibrate, v => timer.vibrate = v), - /*LANG*/"Cancel": () => showMainMenu() + /*LANG*/"Cancel": () => showMainMenu(), + /*LANG*/"Confirm": () => { + prepareTimerForSave(timer, timerIndex, time); + saveAndReload(); + showMainMenu(); + } }; if (!isNew) { From 218e2d5214736498aaaef56fab33eafefec34442 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 1 Dec 2022 10:32:49 +0000 Subject: [PATCH 143/342] health 0.16: Code tidyup, add back button in top left of health app graphs --- apps/health/ChangeLog | 1 + apps/health/app.js | 87 +++++++-------------------------------- apps/health/metadata.json | 2 +- 3 files changed, 18 insertions(+), 72 deletions(-) diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index 62d93e606..25909891a 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -14,3 +14,4 @@ 0.13: Add support for internationalization 0.14: Move settings 0.15: Fix charts (fix #1366) +0.16: Code tidyup, add back button in top left of health app graphs diff --git a/apps/health/app.js b/apps/health/app.js index c0a40bd93..576e1d02f 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -1,6 +1,4 @@ function menuMain() { - swipe_enabled = false; - clearButton(); E.showMenu({ "": { title: /*LANG*/"Health Tracking" }, /*LANG*/"< Back": () => load(), @@ -12,8 +10,6 @@ function menuMain() { } function menuStepCount() { - swipe_enabled = false; - clearButton(); E.showMenu({ "": { title:/*LANG*/"Steps" }, /*LANG*/"< Back": () => menuMain(), @@ -23,8 +19,6 @@ function menuStepCount() { } function menuMovement() { - swipe_enabled = false; - clearButton(); E.showMenu({ "": { title:/*LANG*/"Movement" }, /*LANG*/"< Back": () => menuMain(), @@ -34,8 +28,6 @@ function menuMovement() { } function menuHRM() { - swipe_enabled = false; - clearButton(); E.showMenu({ "": { title:/*LANG*/"Heart Rate" }, /*LANG*/"< Back": () => menuMain(), @@ -48,9 +40,6 @@ function stepsPerHour() { E.showMessage(/*LANG*/"Loading..."); var data = new Uint16Array(24); require("health").readDay(new Date(), h=>data[h.hr]+=h.steps); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuStepCount); barChart("HOUR", data); } @@ -59,9 +48,6 @@ function stepsPerDay() { E.showMessage(/*LANG*/"Loading..."); var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.steps); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuStepCount); barChart("DAY", data); } @@ -75,9 +61,6 @@ function hrmPerHour() { if (h.bpm) cnt[h.hr]++; }); data.forEach((d,i)=>data[i] = d/cnt[i]); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuHRM); barChart("HOUR", data); } @@ -91,9 +74,6 @@ function hrmPerDay() { if (h.bpm) cnt[h.day]++; }); data.forEach((d,i)=>data[i] = d/cnt[i]); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuHRM); barChart("DAY", data); } @@ -102,9 +82,6 @@ function movementPerHour() { E.showMessage(/*LANG*/"Loading..."); var data = new Uint16Array(24); require("health").readDay(new Date(), h=>data[h.hr]+=h.movement); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuMovement); barChart("HOUR", data); } @@ -113,15 +90,11 @@ function movementPerDay() { E.showMessage(/*LANG*/"Loading..."); var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.movement); - g.clear(1); - Bangle.drawWidgets(); - g.reset(); setButton(menuMovement); barChart("DAY", data); } // Bar Chart Code - const w = g.getWidth(); const h = g.getHeight(); @@ -130,13 +103,10 @@ var chart_index; var chart_max_datum; var chart_label; var chart_data; -var swipe_enabled = false; -var btn; // find the max value in the array, using a loop due to array size function max(arr) { var m = -Infinity; - for(var i=0; i< arr.length; i++) if(arr[i] > m) m = arr[i]; return m; @@ -145,10 +115,8 @@ function max(arr) { // find the end of the data, the array might be for 31 days but only have 2 days of data in it function get_data_length(arr) { var nlen = arr.length; - for(var i = arr.length - 1; i > 0 && arr[i] == 0; i--) nlen--; - return nlen; } @@ -167,15 +135,11 @@ function drawBarChart() { const bar_width = (w - 2) / 9; // we want 9 bars, bar 5 in the centre var bar_top; var bar; - - g.setColor(g.theme.bg); - g.fillRect(0,24,w,h); + g.reset().clearRect(0,24,w,h); for (bar = 1; bar < 10; bar++) { if (bar == 5) { - g.setFont('6x8', 2); - g.setFontAlign(0,-1); - g.setColor(g.theme.fg); + g.setFont('6x8', 2).setFontAlign(0,-1).setColor(g.theme.fg); g.drawString(chart_label + " " + (chart_index + bar -1) + " " + chart_data[chart_index + bar - 1], g.getWidth()/2, 150); g.setColor("#00f"); } else { @@ -189,45 +153,26 @@ function drawBarChart() { bar_top = bar_bot; g.fillRect( 1 + (bar - 1)* bar_width, bar_bot, 1 + bar*bar_width, bar_top); - g.setColor(g.theme.fg); - g.drawRect( 1 + (bar - 1)* bar_width, bar_bot, 1 + bar*bar_width, bar_top); + g.setColor(g.theme.fg).drawRect( 1 + (bar - 1)* bar_width, bar_bot, 1 + bar*bar_width, bar_top); } } -function next_bar() { - chart_index = Math.min(data_len - 5, chart_index + 1); -} - -function prev_bar() { - // HOUR data starts at index 0, DAY data starts at index 1 - chart_index = Math.max((chart_label == "DAY") ? -3 : -4, chart_index - 1); -} - -Bangle.on('swipe', dir => { - if (!swipe_enabled) return; - if (dir == 1) prev_bar(); else next_bar(); - drawBarChart(); -}); - -// use setWatch() as Bangle.setUI("updown",..) interacts with swipes function setButton(fn) { - // cancel callback, otherwise a slight up down movement will show the E.showMenu() - Bangle.setUI("updown", undefined); - - if (process.env.HWVERSION == 1) - btn = setWatch(fn, BTN2); - else - btn = setWatch(fn, BTN1); -} - -function clearButton() { - if (btn !== undefined) { - clearWatch(btn); - btn = undefined; - } + Bangle.setUI({mode:"custom", + back:fn, + swipe:(lr,ud) => { + if (lr == 1) { + // HOUR data starts at index 0, DAY data starts at index 1 + chart_index = Math.max((chart_label == "DAY") ? -3 : -4, chart_index - 1); + } else if (lr<0) { + chart_index = Math.min(data_len - 5, chart_index + 1); + } else { + return fn(); + } + drawBarChart(); + }}); } Bangle.loadWidgets(); Bangle.drawWidgets(); - menuMain(); diff --git a/apps/health/metadata.json b/apps/health/metadata.json index a038f67b5..82ae09356 100644 --- a/apps/health/metadata.json +++ b/apps/health/metadata.json @@ -1,7 +1,7 @@ { "id": "health", "name": "Health Tracking", - "version": "0.15", + "version": "0.16", "description": "Logs health data and provides an app to view it", "icon": "app.png", "tags": "tool,system,health", From 0bd33f0efed76d9a1d1996cd2e5055dca0d7fdb9 Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Fri, 25 Nov 2022 18:34:57 +0100 Subject: [PATCH 144/342] circlesclock: improved clkinfo handling --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 13 +++++++------ apps/circlesclock/metadata.json | 2 +- apps/circlesclock/settings.js | 1 - 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index ea7266442..f840ca447 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -31,3 +31,4 @@ 0.16: Fix const error Use widget_utils if available 0.17: Load circles from clkinfo +0.18: Improved clkinfo handling diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index d4a170ce8..b5770df6c 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -690,17 +690,18 @@ function drawClkInfo(index, w) { return; } var item = info.items[circleItemNum[index-1]]; - //TODO do hide()+get() here item.show(); item.hide(); - item=item.get(); - var img = item.img; + var data=item.get(); + var img = data.img; + var percent = 1; //fill up if no range + var txt = data.text; if(!img) img = info.img; - let percent = (item.v-item.min) / item.max; - if(isNaN(percent)) percent = 1; //fill it up + if(item.hasRange) percent = (data.v-data.min) / (data.max-data.min); + if(item.short) txt = item.short; drawGauge(w, h3, percent, color); drawInnerCircleAndTriangle(w); - writeCircleText(w, item.text); + writeCircleText(w, txt); g.setColor(getCircleIconColor(type, color, percent)) .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } diff --git a/apps/circlesclock/metadata.json b/apps/circlesclock/metadata.json index 490d6c4fb..fb743ae4c 100644 --- a/apps/circlesclock/metadata.json +++ b/apps/circlesclock/metadata.json @@ -1,7 +1,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.17", + "version":"0.18", "description": "A clock with three or four circles for different data at the bottom in a probably familiar style", "icon": "app.png", "screenshots": [{"url":"screenshot-dark.png"}, {"url":"screenshot-light.png"}, {"url":"screenshot-dark-4.png"}, {"url":"screenshot-light-4.png"}], diff --git a/apps/circlesclock/settings.js b/apps/circlesclock/settings.js index ca26cb295..2006790b8 100644 --- a/apps/circlesclock/settings.js +++ b/apps/circlesclock/settings.js @@ -17,7 +17,6 @@ var valuesCircleTypes = ["empty","weather", "sunprogress"]; var namesCircleTypes = ["empty","weather", "sun"]; clock_info.load().forEach(e=>{ - //TODO filter for hasRange and other if(!e.items.length || !e.items[0].name) { //suppose unnamed are varying (like timers or events), pick the first item = e.items[0]; From 80bd13c1a2fc2a5387bc676b05f56260ca6a4c99 Mon Sep 17 00:00:00 2001 From: glemco <32201227+glemco@users.noreply.github.com> Date: Fri, 25 Nov 2022 19:13:38 +0100 Subject: [PATCH 145/342] Fixed short label and dynamic --- apps/circlesclock/app.js | 7 +++---- apps/circlesclock/settings.js | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index b5770df6c..80fda279e 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -659,9 +659,8 @@ function reloadMenu() { let parts = settings['circle'+i].split("/"); let infoName = parts[0], itemName = parts[1]; let infoNum = menu.findIndex(e=>e.name==infoName); - let itemNum = 0; - //suppose unnamed are varying (like timers or events), pick the first - if(itemName) + let itemNum = 0; //get first if dynamic + if(!menu[infoNum].dynamic) itemNum = menu[infoNum].items.findIndex(it=>it.name==itemName); circleInfoNum[i-1] = infoNum; circleItemNum[i-1] = itemNum; @@ -698,7 +697,7 @@ function drawClkInfo(index, w) { var txt = data.text; if(!img) img = info.img; if(item.hasRange) percent = (data.v-data.min) / (data.max-data.min); - if(item.short) txt = item.short; + if(data.short) txt = data.short; drawGauge(w, h3, percent, color); drawInnerCircleAndTriangle(w); writeCircleText(w, txt); diff --git a/apps/circlesclock/settings.js b/apps/circlesclock/settings.js index 2006790b8..9a8b43c49 100644 --- a/apps/circlesclock/settings.js +++ b/apps/circlesclock/settings.js @@ -17,9 +17,7 @@ var valuesCircleTypes = ["empty","weather", "sunprogress"]; var namesCircleTypes = ["empty","weather", "sun"]; clock_info.load().forEach(e=>{ - if(!e.items.length || !e.items[0].name) { - //suppose unnamed are varying (like timers or events), pick the first - item = e.items[0]; + if(e.dynamic) { valuesCircleTypes = valuesCircleTypes.concat([e.name+"/"]); namesCircleTypes = namesCircleTypes.concat([e.name]); } else { From 92bf3579f208b05d83e7318480e3b5c7cd9f4664 Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Wed, 30 Nov 2022 18:34:29 +0100 Subject: [PATCH 146/342] circlesclock: using the weather clkinfo instead of reading from the file --- apps/circlesclock/ChangeLog | 2 +- apps/circlesclock/app.js | 56 +++++++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index f840ca447..8ec578fb6 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -31,4 +31,4 @@ 0.16: Fix const error Use widget_utils if available 0.17: Load circles from clkinfo -0.18: Improved clkinfo handling +0.18: Improved clkinfo handling and using it for the weather circle diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 80fda279e..bb537a819 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -106,6 +106,10 @@ let circleItemNum = [ 2, // circle3 3, // circle4 ]; +let weatherCircleNum = 0; +let weatherCircleDataNum = 0; +let weatherCircleCondNum = 0; +let weatherCircleTempNum = 0; function hideWidgets() { /* @@ -323,6 +327,49 @@ function getImage(graphic, color) { } function drawWeather(w) { + if (!w) w = getCircleXPosition("weather"); + let weatherInfo = menu[weatherCircleNum]; + let weatherCond = weatherCircleCondNum >= 0? weatherInfo.items[weatherCircleCondNum]: undefined; + let weatherData = weatherCircleDataNum >= 0? weatherInfo.items[weatherCircleDataNum]: undefined; + let weatherTemp = weatherCircleTempNum >= 0? weatherInfo.items[weatherCircleTempNum]: undefined; + let color = getCircleColor("weather"); + let percent = 0; + let data = settings.weatherCircleData; + let tempString = "?", icon = undefined; + + if(weatherCond) { + weatherCond.show() + weatherCond.hide() + icon = weatherCond.get().img; + } + if(weatherTemp) { + weatherTemp.show() + weatherTemp.hide() + tempString = weatherTemp.get().text; + } + + drawCircleBackground(w); + + if(weatherData) { + weatherData.show(); + weatherData.hide(); + let data = weatherData.get(); + if(weatherData.hasRange) percent = (data.v-data.min) / (data.max-data.min); + drawGauge(w, h3, percent, color); + } + + drawInnerCircleAndTriangle(w); + + writeCircleText(w, tempString); + + if(icon) { + g.setColor(getCircleIconColor("weather", color, percent)) + .drawImage(icon, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); + } else { + g.drawString("?", w, h3 + radiusOuter); + } +} +function drawWeatherOld(w) { if (!w) w = getCircleXPosition("weather"); let weather = getWeather(); let tempString = weather ? locale.temp(weather.temp - 273.15) : undefined; @@ -664,6 +711,11 @@ function reloadMenu() { itemNum = menu[infoNum].items.findIndex(it=>it.name==itemName); circleInfoNum[i-1] = infoNum; circleItemNum[i-1] = itemNum; + } else if(settings['circle'+i] == "weather") { + weatherCircleNum = menu.findIndex(e=>e.name.toLowerCase() == "weather"); + weatherCircleDataNum = menu[weatherCircleNum].items.findIndex(it=>it.name==settings.weatherCircleData); + weatherCircleCondNum = menu[weatherCircleNum].items.findIndex(it=>it.name=="condition"); + weatherCircleTempNum = menu[weatherCircleNum].items.findIndex(it=>it.name=="temperature"); } } //reload periodically for changes? @@ -684,11 +736,11 @@ function drawClkInfo(index, w) { if (!w) w = getCircleXPosition(type); drawCircleBackground(w); const color = getCircleColor(type); - if(!info || !info.items.length) { + var item = info.items[circleItemNum[index-1]]; + if(!info || !item) { drawEmpty(info? info.img : null, w, color); return; } - var item = info.items[circleItemNum[index-1]]; item.show(); item.hide(); var data=item.get(); From bd6f3c93048b61e6b314db08f2ddfa9cac977084 Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Thu, 1 Dec 2022 08:48:10 +0100 Subject: [PATCH 147/342] circlesclock: optional legacy weather icons --- apps/circlesclock/app.js | 10 ++++++++-- apps/circlesclock/settings.js | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index bb537a819..ee6741398 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -336,11 +336,17 @@ function drawWeather(w) { let percent = 0; let data = settings.weatherCircleData; let tempString = "?", icon = undefined; + let scale = 16/24; //our icons are 16x16 while clkinfo's are 24x24 if(weatherCond) { weatherCond.show() weatherCond.hide() - icon = weatherCond.get().img; + let data = weatherCond.get() + if(settings.legacyWeatherIcons) { //may disappear in future + icon = getWeatherIconByCode(data.v); + scale = 1; + } else + icon = data.img; } if(weatherTemp) { weatherTemp.show() @@ -364,7 +370,7 @@ function drawWeather(w) { if(icon) { g.setColor(getCircleIconColor("weather", color, percent)) - .drawImage(icon, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); + .drawImage(icon, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: scale}); } else { g.drawString("?", w, h3 + radiusOuter); } diff --git a/apps/circlesclock/settings.js b/apps/circlesclock/settings.js index 9a8b43c49..2ab655f01 100644 --- a/apps/circlesclock/settings.js +++ b/apps/circlesclock/settings.js @@ -82,6 +82,12 @@ }, onchange: x => save('updateInterval', x), }, + //TODO deprecated local icons, may disappear in future + /*LANG*/'legacy weather icons': { + value: !!settings.legacyWeatherIcons, + format: () => (settings.legacyWeatherIcons ? 'Yes' : 'No'), + onchange: x => save('legacyWeatherIcons', x), + }, /*LANG*/'show big weather': { value: !!settings.showBigWeather, format: () => (settings.showBigWeather ? 'Yes' : 'No'), From 546cfa79962181dab1c16773338ed48776245a0a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 1 Dec 2022 13:47:48 +0000 Subject: [PATCH 148/342] fix grey maps --- apps/openstmap/interface.html | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/openstmap/interface.html b/apps/openstmap/interface.html index 4a4bd5336..0bf2268a4 100644 --- a/apps/openstmap/interface.html +++ b/apps/openstmap/interface.html @@ -176,12 +176,14 @@ TODO: `; - let map = L.map(`tile-map-${mapNumber}`); - L.tileLayer(PREVIEWTILELAYER, { - maxZoom: 18 - }).addTo(map); - let marker = new L.marker(latlon).addTo(map); - map.fitBounds(latlon.toBounds(2000/*meters*/), {animation: false}); + setTimeout(function() { + let map = L.map(`tile-map-${mapNumber}`); + L.tileLayer(PREVIEWTILELAYER, { + maxZoom: 18 + }).addTo(map); + let marker = new L.marker(latlon).addTo(map); + map.fitBounds(latlon.toBounds(2000/*meters*/), {animation: false}); + }, 100); } resolve(); }); From d547ec97a6af647387a3d749005e6b12f959e19d Mon Sep 17 00:00:00 2001 From: Marco H Date: Thu, 1 Dec 2022 15:16:50 +0100 Subject: [PATCH 149/342] Update clkinfo.js --- apps/weather/clkinfo.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 8cdc37be0..339ff39c3 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -30,11 +30,18 @@ name: "Weather", img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="), items: [ + { + name: "conditionWithTemperature", + get: () => ({ text: weather.temp, img: weatherIcon(weather.code), + v: parseInt(weather.temp), min: -30, max: 55}), + show: function() { this.emit("redraw"); }, + hide: function () {} + }, { name: "condition", get: () => ({ text: weather.txt, img: weatherIcon(weather.code), v: weather.code}), - show: function() { weatherItems.items[0].emit("redraw"); }, + show: function() { this.emit("redraw"); }, hide: function () {} }, { @@ -42,7 +49,7 @@ hasRange : true, get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), v: parseInt(weather.temp), min: -30, max: 55}), - show: function() { weatherItems.items[1].emit("redraw"); }, + show: function() { this.emit("redraw"); }, hide: function () {} }, { @@ -50,7 +57,7 @@ hasRange : true, get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), v: parseInt(weather.hum), min: 0, max: 100}), - show: function() { weatherItems.items[2].emit("redraw"); }, + show: function() { this.emit("redraw"); }, hide: function () {} }, { @@ -58,7 +65,7 @@ hasRange : true, get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), v: parseInt(weather.wind), min: 0, max: 118}), - show: function() { weatherItems.items[3].emit("redraw"); }, + show: function() { this.emit("redraw"); }, hide: function () {} }, ] From cb84cce2032d776bd0b0df16b6e18a244de36bac Mon Sep 17 00:00:00 2001 From: Marco H Date: Thu, 1 Dec 2022 15:17:18 +0100 Subject: [PATCH 150/342] Update ChangeLog --- apps/weather/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index d8a7440c5..aefb903b9 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -16,3 +16,4 @@ 0.17: Added clkinfo for clocks. 0.18: Added hasRange to clkinfo. 0.19: Added weather condition to clkinfo. +0.20: Added weather condition with temperature to clkinfo. From d5fde1f046642032da280219f411c5ec3a1e8ace Mon Sep 17 00:00:00 2001 From: Marco H Date: Thu, 1 Dec 2022 15:17:27 +0100 Subject: [PATCH 151/342] Update metadata.json --- apps/weather/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index c679bdc2e..dd8b6c293 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.19", + "version": "0.20", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], From 6ea11508ef925e2230fea24380458e8d0718921d Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 1 Dec 2022 19:26:40 +0100 Subject: [PATCH 152/342] use widget_utils .hide() --- apps/aiclock/ChangeLog | 3 ++- apps/aiclock/aiclock.app.js | 3 +-- apps/aiclock/metadata.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/aiclock/ChangeLog b/apps/aiclock/ChangeLog index 31c55aef1..96b389f6e 100644 --- a/apps/aiclock/ChangeLog +++ b/apps/aiclock/ChangeLog @@ -1,3 +1,4 @@ 0.01: New app! 0.02: Design improvements and fixes. -0.03: Indicate battery level through line occurrence. \ No newline at end of file +0.03: Indicate battery level through line occurrence. +0.04: Use widget_utils module. diff --git a/apps/aiclock/aiclock.app.js b/apps/aiclock/aiclock.app.js index dbd053f2c..5d4e98fcd 100644 --- a/apps/aiclock/aiclock.app.js +++ b/apps/aiclock/aiclock.app.js @@ -215,8 +215,7 @@ Bangle.loadWidgets(); * so we will blank out the draw() functions of each widget and change the * area to the top bar doesn't get cleared. */ -for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} - +require('widget_utils').hide(); // Clear the screen once, at startup and draw clock g.setTheme({bg:"#fff",fg:"#000",dark:false}).clear(); draw(); diff --git a/apps/aiclock/metadata.json b/apps/aiclock/metadata.json index 2124b1b7e..0da23e8ca 100644 --- a/apps/aiclock/metadata.json +++ b/apps/aiclock/metadata.json @@ -3,7 +3,7 @@ "name": "AI Clock", "shortName":"AI Clock", "icon": "aiclock.png", - "version":"0.03", + "version":"0.04", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "A watch face that was designed by an AI (stable diffusion) and implemented by a human.", From 481ddb6a225751689f62f9fc5374138aee0ffa76 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 1 Dec 2022 21:03:15 +0100 Subject: [PATCH 153/342] add more /*LANG*/ to some of the most installed apps --- apps/about/ChangeLog | 1 + apps/about/app-bangle1.js | 10 +++--- apps/about/app-bangle2.js | 10 +++--- apps/about/metadata.json | 2 +- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 2 +- apps/alarm/metadata.json | 2 +- apps/health/ChangeLog | 1 + apps/health/app.js | 14 ++++----- apps/health/metadata.json | 2 +- apps/sched/ChangeLog | 1 + apps/sched/clkinfo.js | 4 +-- apps/sched/metadata.json | 2 +- apps/setting/' | 62 ++++++++++++++++++++++++++++++++++++++ apps/setting/ChangeLog | 1 + apps/setting/metadata.json | 2 +- apps/setting/settings.js | 17 ++++++----- 17 files changed, 101 insertions(+), 33 deletions(-) create mode 100644 apps/setting/' diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index ffe9de081..e236e4b34 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -11,3 +11,4 @@ 0.11: Bangle.js2: New pixels, btn1 to exit 0.12: Actual pixels as of 29th Nov 2021 0.13: Bangle.js 2: Use setUI to add software back button +0.14: Add automatic translation of more strings diff --git a/apps/about/app-bangle1.js b/apps/about/app-bangle1.js index 28a292376..dd94c1e84 100644 --- a/apps/about/app-bangle1.js +++ b/apps/about/app-bangle1.js @@ -11,8 +11,8 @@ g.drawString("BANGLEJS.COM",120,y-4); } else { y=-(4+h); // small screen, start right at top } -g.drawString("Powered by Espruino",0,y+=4+h); -g.drawString("Version "+ENV.VERSION,0,y+=h); +g.drawString(/*LANG*/"Powered by Espruino",0,y+=4+h); +g.drawString(/*LANG*/"Version "+ENV.VERSION,0,y+=h); g.drawString("Commit "+ENV.GIT_COMMIT,0,y+=h); function getVersion(name,file) { var j = s.readJSON(file,1); @@ -24,9 +24,9 @@ getVersion("Launcher","launch.info"); getVersion("Settings","setting.info"); y+=h; -g.drawString(MEM.total+" JS Variables available",0,y+=h); -g.drawString("Storage: "+(require("Storage").getFree()>>10)+"k free",0,y+=h); -if (ENV.STORAGE) g.drawString(" "+(ENV.STORAGE>>10)+"k total",0,y+=h); +g.drawString(MEM.total+/*LANG*/" JS Variables available",0,y+=h); +g.drawString("Storage: "+(require("Storage").getFree()>>10)+/*LANG*/"k free",0,y+=h); +if (ENV.STORAGE) g.drawString(" "+(ENV.STORAGE>>10)+/*LANG*/"k total",0,y+=h); if (ENV.SPIFLASH) g.drawString("SPI Flash: "+(ENV.SPIFLASH>>10)+"k",0,y+=h); g.setFontAlign(0,-1); g.flip(); diff --git a/apps/about/app-bangle2.js b/apps/about/app-bangle2.js index 471b0670f..ccffd183f 100644 --- a/apps/about/app-bangle2.js +++ b/apps/about/app-bangle2.js @@ -35,17 +35,17 @@ function drawInfo() { g.setFont("4x6").setFontAlign(0,0).drawString("BANGLEJS.COM",W-30,56); var h=8, y = 24-h; g.setFont("6x8").setFontAlign(-1,-1); - g.drawString("Powered by Espruino",0,y+=4+h); - g.drawString("Version "+ENV.VERSION,0,y+=h); + g.drawString(/*LANG*/"Powered by Espruino",0,y+=4+h); + g.drawString(/*LANG*/"Version "+ENV.VERSION,0,y+=h); g.drawString("Commit "+ENV.GIT_COMMIT,0,y+=h); getVersion("Bootloader","boot.info"); getVersion("Launcher","launch.info"); getVersion("Settings","setting.info"); - g.drawString(MEM.total+" JS Vars",0,y+=h); - g.drawString("Storage: "+(require("Storage").getFree()>>10)+"k free",0,y+=h); - if (ENV.STORAGE) g.drawString(" "+(ENV.STORAGE>>10)+"k total",0,y+=h); + g.drawString(MEM.total+/*LANG*/" JS Vars",0,y+=h); + g.drawString("Storage: "+(require("Storage").getFree()>>10)+/*LANG*/"k free",0,y+=h); + if (ENV.STORAGE) g.drawString(" "+(ENV.STORAGE>>10)+/*LANG*/"k total",0,y+=h); if (ENV.SPIFLASH) g.drawString("SPI Flash: "+(ENV.SPIFLASH>>10)+"k",0,y+=h); imageTop = y+h; imgScroll = imgHeight-imageTop; diff --git a/apps/about/metadata.json b/apps/about/metadata.json index 648576576..52cd37b7d 100644 --- a/apps/about/metadata.json +++ b/apps/about/metadata.json @@ -1,7 +1,7 @@ { "id": "about", "name": "About", - "version": "0.13", + "version": "0.14", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "icon": "app.png", "tags": "tool,system", diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 6e648d42a..6ce6147ca 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -35,4 +35,5 @@ Add option for auto-delete a timer after it expires 0.33: Allow hiding timers&alarms 0.34: Add "Confirm" option to alarm/timer edit menus +0.35: Add automatic translation of more strings diff --git a/apps/alarm/app.js b/apps/alarm/app.js index efcabfb6d..1414c0b90 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -183,7 +183,7 @@ function decodeDOW(alarm) { .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_") .join("") .toLowerCase() - : "Once" + : /*LANG*/"Once" } function showEditRepeatMenu(repeat, dow, dowChangeCallback) { diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index 2e4ea9f94..a02985851 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.34", + "version": "0.35", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index 25909891a..fc8f2c950 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -15,3 +15,4 @@ 0.14: Move settings 0.15: Fix charts (fix #1366) 0.16: Code tidyup, add back button in top left of health app graphs +0.17: Add automatic translation of bar chart labels diff --git a/apps/health/app.js b/apps/health/app.js index 576e1d02f..844dd7241 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -41,7 +41,7 @@ function stepsPerHour() { var data = new Uint16Array(24); require("health").readDay(new Date(), h=>data[h.hr]+=h.steps); setButton(menuStepCount); - barChart("HOUR", data); + barChart(/*LANG*/"HOUR", data); } function stepsPerDay() { @@ -49,7 +49,7 @@ function stepsPerDay() { var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.steps); setButton(menuStepCount); - barChart("DAY", data); + barChart(/*LANG*/"DAY", data); } function hrmPerHour() { @@ -62,7 +62,7 @@ function hrmPerHour() { }); data.forEach((d,i)=>data[i] = d/cnt[i]); setButton(menuHRM); - barChart("HOUR", data); + barChart(/*LANG*/"HOUR", data); } function hrmPerDay() { @@ -75,7 +75,7 @@ function hrmPerDay() { }); data.forEach((d,i)=>data[i] = d/cnt[i]); setButton(menuHRM); - barChart("DAY", data); + barChart(/*LANG*/"DAY", data); } function movementPerHour() { @@ -83,7 +83,7 @@ function movementPerHour() { var data = new Uint16Array(24); require("health").readDay(new Date(), h=>data[h.hr]+=h.movement); setButton(menuMovement); - barChart("HOUR", data); + barChart(/*LANG*/"HOUR", data); } function movementPerDay() { @@ -91,7 +91,7 @@ function movementPerDay() { var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.movement); setButton(menuMovement); - barChart("DAY", data); + barChart(/*LANG*/"DAY", data); } // Bar Chart Code @@ -163,7 +163,7 @@ function setButton(fn) { swipe:(lr,ud) => { if (lr == 1) { // HOUR data starts at index 0, DAY data starts at index 1 - chart_index = Math.max((chart_label == "DAY") ? -3 : -4, chart_index - 1); + chart_index = Math.max((chart_label == /*LANG*/"DAY") ? -3 : -4, chart_index - 1); } else if (lr<0) { chart_index = Math.min(data_len - 5, chart_index + 1); } else { diff --git a/apps/health/metadata.json b/apps/health/metadata.json index 82ae09356..d4eab1f38 100644 --- a/apps/health/metadata.json +++ b/apps/health/metadata.json @@ -1,7 +1,7 @@ { "id": "health", "name": "Health Tracking", - "version": "0.16", + "version": "0.17", "description": "Logs health data and provides an app to view it", "icon": "app.png", "tags": "tool,system,health", diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index f2dd54338..711326200 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -15,3 +15,4 @@ Fix wrong fallback for buzz pattern 0.13: Ask to delete a timer after stopping it 0.14: Added clkinfo for alarms and timers +0.15: Automatic translation of some string in clkinfo diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js index 71992dbb8..3bd11f70b 100644 --- a/apps/sched/clkinfo.js +++ b/apps/sched/clkinfo.js @@ -31,7 +31,7 @@ function getAlarmText(a){ if(a.timer) { - if(!a.on) return "off"; + if(!a.on) return /*LANG*/"off"; let time = Math.round(alarm.getTimeToAlarm(a)/(60*1000)); if(time > 60) time = Math.round(time / 60) + "h"; @@ -52,7 +52,7 @@ var img = iconAlarmOn; //get only alarms not created by other apps var alarmItems = { - name: "Alarms", + name: /*LANG*/"Alarms", img: img, dynamic: true, items: alarm.getAlarms().filter(a=>!a.appid) diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 4b38ee653..a457d0f44 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.14", + "version": "0.15", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/setting/' b/apps/setting/' new file mode 100644 index 000000000..bf78c50b6 --- /dev/null +++ b/apps/setting/' @@ -0,0 +1,62 @@ +0.02: Add support for 30-minute timezones. +0.03: Add support for Welcome app +0.04: Add setting to disable log messages +0.05: Fix Settings json +0.06: Remove distance setting as there's a separate app for Locale now +0.07: Added vibrate as beep workaround +0.08: Add support for app/widget settings +0.09: Move Welcome into App/widget settings +0.10: Added LCD wake-up settings + Adds LCD brightness setting +0.11: Make LCD brightness work after leaving settings +0.12: Fix memory leak (#206) + Bring App settings nearer the top + Move LCD Timeout to wakeup menu +0.13: Fix memory leak for App settings + Make capitalization more consistent + Move LCD Brightness menu into more general LCD menu +0.14: Reduce memory usage when running app settings page +0.15: Reduce memory usage when running default clock chooser (#294) +0.16: Reduce memory usage further when running app settings page +0.17: Remove need for "settings" in appid.info +0.18: Don't overwrite existing settings on app update +0.19: Allow BLE HID settings, add README.md +0.20: Fix set time menu, allow dates to roll over +0.21: Add passkey pairing option (BETA) + Add whitelist option (fix #78) +0.22: Move HID to BLE menu +0.23: Change max time offset to 13 for NZ summer daylight time (NZDT) +0.24: Add Quiet Mode settings +0.25: Move boot.js code into 'boot' app itself +0.26: Use Bangle.softOff if available as this keeps the time +0.27: Add Theme menu +0.28: Update Quiet Mode widget (if present) +0.29: Add Customize to Theme menu +0.30: Move '< Back' to the top of menus +0.31: Remove Bangle 1 settings when running on Bangle 2 +0.32: Fix 'beep' menu on Bangle.js 2 +0.33: Really fix 'beep' menu on Bangle.js 2 this time +0.34: Remove Quiet Mode LCD settings: now handled by Quiet Mode Schedule app +0.35: Change App/Widget settings to 'App Settings' so it fits on Bangle screen +0.36: Added 'Utils' menu with helpful utilities for restoring Bangle.js +0.37: Going into passkey menu now saves settings with passkey +0.38: Restructed menus as per forum discussion +0.39: Fix misbehaving debug info option +0.40: Moved off into Utils, put System after Apps +0.41: Stop users disabling all wake-up methods and locking themselves out (fix #1272) +0.42: Fix theme customizer on new Bangle 2 firmware +0.43: Add some Bangle 1 colours to theme customizer +0.44: Add "Start Week On X" option (#1780) + UI improvements to Locale and Date & Time menu +0.45: Add calibrate battery option +0.46: Fix regression after making 'calibrate battery' only for Bangle.js 2 +0.47: Allow colors to be translated + Improve "Turn Off" user experience +0.48: Allow reading custom themes from files +0.49: Now reloads settings properly after 'Calibrate Battery' +0.50: Add Bangle.js 2 touchscreen calibration - for 2v16 or 2v15 cutting edge builds +0.51: Add setting for configuring a launcher +0.52: Add option for left-handed users +0.53: Ensure that when clock is set, clockHasWidgets is set correctly too +0.54: If setting.json is corrupt, ensure it gets re-written +0.55: More strings tagged for automatic translation. diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 55b61c46a..bf78c50b6 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -59,3 +59,4 @@ 0.52: Add option for left-handed users 0.53: Ensure that when clock is set, clockHasWidgets is set correctly too 0.54: If setting.json is corrupt, ensure it gets re-written +0.55: More strings tagged for automatic translation. diff --git a/apps/setting/metadata.json b/apps/setting/metadata.json index 08544cff6..80db81f65 100644 --- a/apps/setting/metadata.json +++ b/apps/setting/metadata.json @@ -1,7 +1,7 @@ { "id": "setting", "name": "Settings", - "version": "0.54", + "version": "0.55", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 2350a8965..b58615913 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -146,7 +146,7 @@ function showAlertsMenu() { }, /*LANG*/"Quiet Mode": { value: settings.quiet|0, - format: v => ["Off", "Alarms", "Silent"][v%3], + format: v => [/*LANG*/"Off", /*LANG*/"Alarms", /*LANG*/"Silent"][v%3], onchange: v => { settings.quiet = v%3; updateSettings(); @@ -162,9 +162,9 @@ function showAlertsMenu() { function showBLEMenu() { var hidV = [false, "kbmedia", "kb", "com", "joy"]; - var hidN = ["Off", "Kbrd & Media", "Kbrd", "Kbrd & Mouse" ,"Joystick"]; + var hidN = [/*LANG*/"Off", /*LANG*/"Kbrd & Media", /*LANG*/"Kbrd", /*LANG*/"Kbrd & Mouse", /*LANG*/"Joystick"]; E.showMenu({ - '': { 'title': 'Bluetooth' }, + '': { 'title': /*LANG*/'Bluetooth' }, '< Back': ()=>showMainMenu(), /*LANG*/'Make Connectable': ()=>makeConnectable(), /*LANG*/'BLE': { @@ -193,11 +193,11 @@ function showBLEMenu() { } }, /*LANG*/'Passkey BETA': { - value: settings.passkey?settings.passkey:"none", + value: settings.passkey?settings.passkey:/*LANG*/"none", onchange: () => setTimeout(showPasskeyMenu) // graphical_menu redraws after the call }, /*LANG*/'Whitelist': { - value: settings.whitelist?(settings.whitelist.length+" devs"):"off", + value: settings.whitelist?(settings.whitelist.length+/*LANG*/" devs"):/*LANG*/"off", onchange: () => setTimeout(showWhitelistMenu) // graphical_menu redraws after the call } }); @@ -606,7 +606,7 @@ function showUtilMenu() { menu[/*LANG*/'Reset Settings'] = () => { E.showPrompt(/*LANG*/'Reset to Defaults?',{title:/*LANG*/"Settings"}).then((v) => { if (v) { - E.showMessage('Resetting'); + E.showMessage(/*LANG*/'Resetting'); resetSettings(); setTimeout(showMainMenu, 50); } else showUtilMenu(); @@ -824,6 +824,7 @@ function showAppSettings(app) { function showTouchscreenCalibration() { Bangle.setUI(); + require('widget_utils').hide(); // disable touchscreen calibration (passed coords right through) Bangle.setOptions({touchX1: 0, touchY1: 0, touchX2: g.getWidth(), touchY2: g.getHeight() }); @@ -847,7 +848,7 @@ function showTouchscreenCalibration() { g.drawLine(spot[0],spot[1]-32,spot[0],spot[1]+32); g.drawCircle(spot[0],spot[1], 16); var tapsLeft = (1-currentTry)*4+(4-currentCorner); - g.setFont("6x8:2").setFontAlign(0,0).drawString(tapsLeft+" taps\nto go", g.getWidth()/2, g.getHeight()/2); + g.setFont("6x8:2").setFontAlign(0,0).drawString(tapsLeft+/*LANG*/" taps\nto go", g.getWidth()/2, g.getHeight()/2); } function calcCalibration() { @@ -870,7 +871,7 @@ function showTouchscreenCalibration() { var s = storage.readJSON("setting.json",1)||{}; s.touch = calib; storage.writeJSON("setting.json",s); - g.setFont("6x8:2").setFontAlign(0,0).drawString("Calibrated!", g.getWidth()/2, g.getHeight()/2); + g.setFont("6x8:2").setFontAlign(0,0).drawString(/*LANG*/"Calibrated!", g.getWidth()/2, g.getHeight()/2); // now load the main menu again setTimeout(showLCDMenu, 500); } From 525b23a2965a81cfa1c47fcc3654df31b5722db0 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 1 Dec 2022 21:08:46 +0100 Subject: [PATCH 154/342] remove accidentally created file --- apps/setting/' | 62 -------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 apps/setting/' diff --git a/apps/setting/' b/apps/setting/' deleted file mode 100644 index bf78c50b6..000000000 --- a/apps/setting/' +++ /dev/null @@ -1,62 +0,0 @@ -0.02: Add support for 30-minute timezones. -0.03: Add support for Welcome app -0.04: Add setting to disable log messages -0.05: Fix Settings json -0.06: Remove distance setting as there's a separate app for Locale now -0.07: Added vibrate as beep workaround -0.08: Add support for app/widget settings -0.09: Move Welcome into App/widget settings -0.10: Added LCD wake-up settings - Adds LCD brightness setting -0.11: Make LCD brightness work after leaving settings -0.12: Fix memory leak (#206) - Bring App settings nearer the top - Move LCD Timeout to wakeup menu -0.13: Fix memory leak for App settings - Make capitalization more consistent - Move LCD Brightness menu into more general LCD menu -0.14: Reduce memory usage when running app settings page -0.15: Reduce memory usage when running default clock chooser (#294) -0.16: Reduce memory usage further when running app settings page -0.17: Remove need for "settings" in appid.info -0.18: Don't overwrite existing settings on app update -0.19: Allow BLE HID settings, add README.md -0.20: Fix set time menu, allow dates to roll over -0.21: Add passkey pairing option (BETA) - Add whitelist option (fix #78) -0.22: Move HID to BLE menu -0.23: Change max time offset to 13 for NZ summer daylight time (NZDT) -0.24: Add Quiet Mode settings -0.25: Move boot.js code into 'boot' app itself -0.26: Use Bangle.softOff if available as this keeps the time -0.27: Add Theme menu -0.28: Update Quiet Mode widget (if present) -0.29: Add Customize to Theme menu -0.30: Move '< Back' to the top of menus -0.31: Remove Bangle 1 settings when running on Bangle 2 -0.32: Fix 'beep' menu on Bangle.js 2 -0.33: Really fix 'beep' menu on Bangle.js 2 this time -0.34: Remove Quiet Mode LCD settings: now handled by Quiet Mode Schedule app -0.35: Change App/Widget settings to 'App Settings' so it fits on Bangle screen -0.36: Added 'Utils' menu with helpful utilities for restoring Bangle.js -0.37: Going into passkey menu now saves settings with passkey -0.38: Restructed menus as per forum discussion -0.39: Fix misbehaving debug info option -0.40: Moved off into Utils, put System after Apps -0.41: Stop users disabling all wake-up methods and locking themselves out (fix #1272) -0.42: Fix theme customizer on new Bangle 2 firmware -0.43: Add some Bangle 1 colours to theme customizer -0.44: Add "Start Week On X" option (#1780) - UI improvements to Locale and Date & Time menu -0.45: Add calibrate battery option -0.46: Fix regression after making 'calibrate battery' only for Bangle.js 2 -0.47: Allow colors to be translated - Improve "Turn Off" user experience -0.48: Allow reading custom themes from files -0.49: Now reloads settings properly after 'Calibrate Battery' -0.50: Add Bangle.js 2 touchscreen calibration - for 2v16 or 2v15 cutting edge builds -0.51: Add setting for configuring a launcher -0.52: Add option for left-handed users -0.53: Ensure that when clock is set, clockHasWidgets is set correctly too -0.54: If setting.json is corrupt, ensure it gets re-written -0.55: More strings tagged for automatic translation. From 1e9b3a6d9a095844dd5a3081c8296d038b6b6195 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 2 Dec 2022 09:04:03 +0000 Subject: [PATCH 155/342] lightswitch 0.06: Fix issue where .draw was being called by reference (not allowing widgets to be hidden) ref https://github.com/espruino/BangleApps/pull/2334 --- apps/lightswitch/ChangeLog | 1 + apps/lightswitch/metadata.json | 2 +- apps/lightswitch/widget.js | 22 +++++++++++----------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/apps/lightswitch/ChangeLog b/apps/lightswitch/ChangeLog index 4c89bae76..c4aeb2c1e 100644 --- a/apps/lightswitch/ChangeLog +++ b/apps/lightswitch/ChangeLog @@ -3,3 +3,4 @@ 0.03: Settings page now uses built-in min/max/wrap (fix #1607) 0.04: Add masking widget input to other apps (using espruino/Espruino#2151), add a oversize option to increase the touch area. 0.05: Prevent drawing into app area. +0.06: Fix issue where .draw was being called by reference (not allowing widgets to be hidden) diff --git a/apps/lightswitch/metadata.json b/apps/lightswitch/metadata.json index b8da2f759..d1a8d6e2a 100644 --- a/apps/lightswitch/metadata.json +++ b/apps/lightswitch/metadata.json @@ -2,7 +2,7 @@ "id": "lightswitch", "name": "Light Switch Widget", "shortName": "Light Switch", - "version": "0.05", + "version": "0.06", "description": "A fast way to switch LCD backlight on/off, change the brightness and show the lock status. All in one widget.", "icon": "images/app.png", "screenshots": [ diff --git a/apps/lightswitch/widget.js b/apps/lightswitch/widget.js index d9d4d421d..9eb488aca 100644 --- a/apps/lightswitch/widget.js +++ b/apps/lightswitch/widget.js @@ -224,28 +224,20 @@ // main widget function // // display and setup/reset function - draw: function(locked) { + draw: function() { // setup shortcut to this widget var w = WIDGETS.lightswitch; - // set lcd brightness on unlocking - // all other cases are catched by the boot file - if (locked === false) Bangle.setLCDBrightness(w.isOn ? w.value : 0); - // read lock status - locked = Bangle.isLocked(); + var locked = Bangle.isLocked(); // remove listeners to prevent uncertainties - Bangle.removeListener("lock", w.draw); Bangle.removeListener("touch", w.touchListener); Bangle.removeListener("tap", require("lightswitch.js").tapListener); // draw widget icon w.drawIcon(locked); - // add lock listener - Bangle.on("lock", w.draw); - // add touch listener to control the light depending on settings at first position if (w.touchOn === "always" || !global.__FILE__ || w.touchOn.includes(__FILE__) || @@ -259,7 +251,15 @@ w = undefined; } }); + + Bangle.on("lock", locked => { + var w = WIDGETS.lightswitch; + // set lcd brightness on unlocking + // all other cases are catched by the boot file + if (locked === false) Bangle.setLCDBrightness(w.isOn ? w.value : 0); + w.draw() + }); // clear variable - settings = undefined; + delete settings; })() From 11e5dc590585b70e0786fc7e15999b5c3bc62b5f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 2 Dec 2022 16:31:20 +0000 Subject: [PATCH 156/342] messagesgui 0.57: Fix "unread Timeout" = off (previously defaulted to 60s) --- apps/messagegui/ChangeLog | 1 + apps/messagegui/app.js | 7 +++---- apps/messagegui/metadata.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 0fd43347d..854979d18 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -78,3 +78,4 @@ 0.55: Rename to messagegui, move global message handling library to message module Move widget to widmessage 0.56: Fix handling of music messages +0.57: Fix "unread Timeout" = off (previously defaulted to 60s) diff --git a/apps/messagegui/app.js b/apps/messagegui/app.js index 50dc9182a..f6f7779eb 100644 --- a/apps/messagegui/app.js +++ b/apps/messagegui/app.js @@ -446,10 +446,9 @@ require("messages").toggleWidget(false); Bangle.drawWidgets(); setTimeout(() => { - var unreadTimeoutMillis = (settings.unreadTimeout || 60) * 1000; - if (unreadTimeoutMillis) { - unreadTimeout = setTimeout(load, unreadTimeoutMillis); - } + if (!isFinite(settings.unreadTimeout)) settings.unreadTimeout=60; + if (settings.unreadTimeout) + unreadTimeout = setTimeout(load, settings.unreadTimeout*1000); // only openMusic on launch if music is new var newMusic = MESSAGES.some(m => m.id === "music" && m.new); checkMessages({ clockIfNoMsg: 0, clockIfAllRead: 0, showMsgIfUnread: 1, openMusic: newMusic && settings.openMusic }); diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 361ce9b3d..b3e70d5d4 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,7 +1,7 @@ { "id": "messagegui", "name": "Message UI", - "version": "0.56", + "version": "0.57", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From 6b6dc4b14e861e53aef4b3f40f846301ff0c4f9f Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 17 Nov 2022 18:17:37 +0100 Subject: [PATCH 157/342] bthrm - Show internal values if replacing HRM --- apps/bthrm/bthrm.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index fadf2a5d8..84fce927c 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -91,7 +91,12 @@ function onHrm(e) { var settings = require('Storage').readJSON("bthrm.json", true) || {}; Bangle.on('BTHRM', onBtHrm); -Bangle.on('HRM', onHrm); + +if (settings.replace){ + Bangle.on('HRM_int', onHrm); +} else { + Bangle.on('HRM', onHrm); +} Bangle.setHRMPower(1,'bthrm'); if (!(settings.startWithHrm)){ From 1530ed39154de83e0e64e2fee49bd255f300f74e Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Thu, 1 Dec 2022 22:49:02 +0100 Subject: [PATCH 158/342] bthrm - Reimplement viewer app with layout --- apps/bthrm/bthrm.js | 191 ++++++++++++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 52 deletions(-) diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index 84fce927c..05bf323a5 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -1,5 +1,9 @@ var intervalInt; var intervalBt; +var intervalAgg; + +const BPM_FONT_SIZE="19%"; +const VALUE_TIMEOUT=3000; var BODY_LOCS = { 0: 'Other', @@ -7,40 +11,123 @@ var BODY_LOCS = { 2: 'Wrist', 3: 'Finger', 4: 'Hand', - 5: 'Ear Lobe', + 5: 'Earlobe', 6: 'Foot', +}; + +var Layout = require("Layout"); + +function border(l,c) { + g.setColor(c).drawLine(l.x+l.w*0.05, l.y-4, l.x+l.w*0.95, l.y-4); + c++; } -function clear(y){ - g.reset(); - g.clearRect(0,y,g.getWidth(),y+75); -} - -function draw(y, type, event) { - clear(y); - var px = g.getWidth()/2; - var str = event.bpm + ""; - g.reset(); - g.setFontAlign(0,0); - g.setFontVector(40).drawString(str,px,y+20); - str = "Event: " + type; - if (type === "HRM") { - str += " Confidence: " + event.confidence; - g.setFontVector(12).drawString(str,px,y+40); - str = " Source: " + (event.src ? event.src : "internal"); - g.setFontVector(12).drawString(str,px,y+50); +function getRow(id, text, additionalInfo){ + let additional = []; + let l = { + type:"h", c: [ + { + type:"v", + width: g.getWidth()*0.4, + c: [ + {type:"txt", halign:1, font:"8%", label:text, id:id+"text" }, + {type:"txt", halign:1, font:BPM_FONT_SIZE, label:"--", id:id, bgCol: g.theme.bg } + ] + },{ + type:undefined, fillx:1 + },{ + type:"v", + valign: -1, + width: g.getWidth()*0.45, + c: additional + },{ + type:undefined, width:g.getWidth()*0.05 + } + ] + }; + for (let i of additionalInfo){ + let label = {type:"txt", font:"6x8", label:i + ":" }; + let value = {type:"txt", font:"6x8", label:"--", id:id + i }; + additional.push({type:"h", halign:-1, c:[ label, {type:undefined, fillx:1}, value ]}); } - if (type === "BTHRM"){ - if (event.battery) str += " Bat: " + (event.battery ? event.battery : ""); - g.setFontVector(12).drawString(str,px,y+40); - str= ""; - if (event.location) str += "Loc: " + BODY_LOCS[event.location]; - if (event.rr && event.rr.length > 0) str += " RR: " + event.rr.join(","); - g.setFontVector(12).drawString(str,px,y+50); - str= ""; - if (event.contact) str += " Contact: " + event.contact; - if (event.energy) str += " kJoule: " + event.energy.toFixed(0); - g.setFontVector(12).drawString(str,px,y+60); + + return l; +} + +var layout = new Layout( { + type:"v", c: [ + getRow("int", "INT", ["Confidence"]), + getRow("agg", "HRM", ["Confidence", "Source"]), + getRow("bt", "BT", ["Battery","Location","Contact", "RR", "Energy"]), + { type:undefined, height:8 } //dummy to protect debug output + ] +}, { + lazy:true +}); + +var int,agg,bt; +var firstEvent = true; + +var drawTimeout; +function draw(){ + + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 1000); + + if (!(int || agg || bt)) return; + + if (firstEvent) { + g.clearRect(Bangle.appRect); + firstEvent = false; + } + + if (int){ + layout.int.label = int.bpm; + if (!isNaN(int.confidence)) layout.intConfidence.label = int.confidence; + } else { + layout.int.label = "--"; + layout.intConfidence.label = "--"; + } + + if (agg){ + layout.agg.label = agg.bpm; + if (!isNaN(agg.confidence)) layout.aggConfidence.label = agg.confidence; + if (agg.src) layout.aggSource.label = agg.src; + } else { + layout.agg.label = "--"; + layout.aggConfidence.label = "--"; + layout.aggSource.label = "--"; + } + + if (bt) { + layout.bt.label = bt.bpm; + if (bt.battery) layout.btBattery.label = bt.battery; + if (bt.rr) layout.btRR.label = bt.rr.join(","); + if (bt.location) layout.btLocation.label = BODY_LOCS[bt.location]; + if (bt.contact !== undefined) layout.btContact.label = bt.contact ? "Yes":"No"; + if (bt.energy) layout.btEnergy.label = bt.energy.toFixed(0) + "kJ"; + } else { + layout.bt.label = "--"; + layout.btBattery.label = "--"; + layout.btRR.label = "--"; + layout.btLocation.label = "--"; + layout.btContact.label = "--"; + layout.btEnergy.label = "--"; + } + + layout.update(); + layout.render(); + let first = true; + for (let c of layout.l.c){ + if (first) { + first = false; + continue; + } + if (c.type && c.type == "h") + border(c,g.theme.fg); } } @@ -57,11 +144,7 @@ function showStatusInfo(txt) { } function onBtHrm(e) { - if (firstEventBt){ - clear(24); - firstEventBt = false; - } - draw(100, "BTHRM", e); + bt = e; if (e.bpm === 0){ Bangle.buzz(100,0.2); } @@ -69,34 +152,37 @@ function onBtHrm(e) { clearInterval(intervalBt); } intervalBt = setInterval(()=>{ - clear(100); - }, 2000); + bt = undefined; + }, VALUE_TIMEOUT); } -function onHrm(e) { - if (firstEventInt){ - clear(24); - firstEventInt = false; - } - draw(24, "HRM", e); +function onInt(e) { + int = e; if (intervalInt){ clearInterval(intervalInt); } intervalInt = setInterval(()=>{ - clear(24); - }, 2000); + int = undefined; + }, VALUE_TIMEOUT); +} + +function onAgg(e) { + agg = e; + if (intervalAgg){ + clearInterval(intervalAgg); + } + intervalAgg = setInterval(()=>{ + agg = undefined; + }, VALUE_TIMEOUT); } var settings = require('Storage').readJSON("bthrm.json", true) || {}; Bangle.on('BTHRM', onBtHrm); +Bangle.on('HRM_int', onInt); +Bangle.on('HRM', onAgg); -if (settings.replace){ - Bangle.on('HRM_int', onHrm); -} else { - Bangle.on('HRM', onHrm); -} Bangle.setHRMPower(1,'bthrm'); if (!(settings.startWithHrm)){ @@ -108,10 +194,11 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); if (Bangle.setBTHRMPower){ g.reset().setFont("6x8",2).setFontAlign(0,0); - g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 24); + g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2); + draw(); } else { g.reset().setFont("6x8",2).setFontAlign(0,0); - g.drawString("BTHRM disabled",g.getWidth()/2,g.getHeight()/2 + 32); + g.drawString("BTHRM disabled",g.getWidth()/2,g.getHeight()/2); } E.on('kill', ()=>Bangle.setBTHRMPower(0,'bthrm')); From 48815b249eb197d4b957d8709cee1edec710d320 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 2 Dec 2022 19:38:51 +0100 Subject: [PATCH 159/342] kbswipe: Support input of numbers To switch between the input of alphabetic and numeric characters tap the widget which displays either "123" or "ABC" closes #1820 --- apps/kbswipe/ChangeLog | 1 + apps/kbswipe/README.md | 2 + apps/kbswipe/lib.js | 130 ++++++++++++++++++++++++++----------- apps/kbswipe/metadata.json | 2 +- 4 files changed, 96 insertions(+), 39 deletions(-) diff --git a/apps/kbswipe/ChangeLog b/apps/kbswipe/ChangeLog index 1804c4a89..05be810cc 100644 --- a/apps/kbswipe/ChangeLog +++ b/apps/kbswipe/ChangeLog @@ -3,3 +3,4 @@ 0.03: Positioning of marker now takes the height of the widget field into account. 0.04: Fix issue if going back without typing. 0.05: Keep drag-function in ram, hopefully improving performance and input reliability somewhat. +0.06: Support input of numbers diff --git a/apps/kbswipe/README.md b/apps/kbswipe/README.md index 3f5575777..1508061d1 100644 --- a/apps/kbswipe/README.md +++ b/apps/kbswipe/README.md @@ -4,6 +4,8 @@ A library that provides the ability to input text by swiping PalmOS Graffiti-sty To get a legend of available characters, just tap the screen. +To switch between the input of alphabetic and numeric characters tap the widget which displays either "123" or "ABC". + ![](key.png) ## Usage diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index fe5f7e977..861d046cb 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -1,47 +1,67 @@ +const INPUT_MODE_ALPHA = 0; +const INPUT_MODE_NUM = 1; + /* To make your own strokes, type: Bangle.on('stroke',print) on the left of the IDE, then do a stroke and copy out the Uint8Array line */ -exports.getStrokes = function(cb) { - cb("a", new Uint8Array([58, 159, 58, 155, 62, 144, 69, 127, 77, 106, 86, 90, 94, 77, 101, 68, 108, 62, 114, 59, 121, 59, 133, 61, 146, 70, 158, 88, 169, 107, 176, 124, 180, 135, 183, 144, 185, 152])); - cb("b", new Uint8Array([51, 47, 51, 77, 56, 123, 60, 151, 65, 163, 68, 164, 68, 144, 67, 108, 67, 76, 72, 43, 104, 51, 121, 74, 110, 87, 109, 95, 131, 117, 131, 140, 109, 152, 88, 157])); - cb("c", new Uint8Array([153, 62, 150, 62, 145, 62, 136, 62, 123, 62, 106, 65, 85, 70, 65, 75, 50, 82, 42, 93, 37, 106, 36, 119, 36, 130, 40, 140, 49, 147, 61, 153, 72, 156, 85, 157, 106, 158, 116, 158])); - cb("d", new Uint8Array([57, 178, 57, 176, 55, 171, 52, 163, 50, 154, 49, 146, 47, 135, 45, 121, 44, 108, 44, 97, 44, 85, 44, 75, 44, 66, 44, 58, 44, 48, 44, 38, 46, 31, 48, 26, 58, 21, 75, 20, 99, 26, 120, 35, 136, 51, 144, 70, 144, 88, 137, 110, 124, 131, 106, 145, 88, 153])); - cb("e", new Uint8Array([150, 72, 141, 69, 114, 68, 79, 69, 48, 77, 32, 81, 31, 85, 46, 91, 73, 95, 107, 100, 114, 103, 83, 117, 58, 134, 66, 143, 105, 148, 133, 148, 144, 148])); - cb("f", new Uint8Array([157, 52, 155, 52, 148, 52, 137, 52, 124, 52, 110, 52, 96, 52, 83, 52, 74, 52, 67, 52, 61, 52, 57, 52, 55, 52, 52, 52, 52, 54, 52, 58, 52, 64, 54, 75, 58, 97, 59, 117, 60, 130])); - cb("g", new Uint8Array([160, 66, 153, 62, 129, 58, 90, 56, 58, 57, 38, 65, 31, 86, 43, 125, 69, 152, 116, 166, 145, 154, 146, 134, 112, 116, 85, 108, 97, 106, 140, 106, 164, 106])); - cb("h", new Uint8Array([58, 50, 58, 55, 58, 64, 58, 80, 58, 102, 58, 122, 58, 139, 58, 153, 58, 164, 58, 171, 58, 177, 58, 179, 58, 181, 58, 180, 58, 173, 58, 163, 59, 154, 61, 138, 64, 114, 68, 95, 72, 84, 80, 79, 91, 79, 107, 82, 123, 93, 137, 111, 145, 130, 149, 147, 150, 154, 150, 159])); - cb("i", new Uint8Array([89, 48, 89, 49, 89, 51, 89, 55, 89, 60, 89, 68, 89, 78, 89, 91, 89, 103, 89, 114, 89, 124, 89, 132, 89, 138, 89, 144, 89, 148, 89, 151, 89, 154, 89, 156, 89, 157, 89, 158])); - cb("j", new Uint8Array([130, 57, 130, 61, 130, 73, 130, 91, 130, 113, 130, 133, 130, 147, 130, 156, 130, 161, 130, 164, 130, 166, 129, 168, 127, 168, 120, 168, 110, 168, 91, 167, 81, 167, 68, 167])); - cb("k", new Uint8Array([149, 63, 147, 68, 143, 76, 136, 89, 126, 106, 114, 123, 100, 136, 86, 147, 72, 153, 57, 155, 45, 152, 36, 145, 29, 131, 26, 117, 26, 104, 27, 93, 30, 86, 35, 80, 45, 77, 62, 80, 88, 96, 113, 116, 130, 131, 140, 142, 145, 149, 148, 153])); - cb("l", new Uint8Array([42, 55, 42, 59, 42, 69, 44, 87, 44, 107, 44, 128, 44, 143, 44, 156, 44, 163, 44, 167, 44, 169, 45, 170, 49, 170, 59, 169, 76, 167, 100, 164, 119, 162, 139, 160, 163, 159])); - cb("m", new Uint8Array([49, 165, 48, 162, 46, 156, 44, 148, 42, 138, 42, 126, 42, 113, 43, 101, 45, 91, 47, 82, 49, 75, 51, 71, 54, 70, 57, 70, 61, 74, 69, 81, 75, 91, 84, 104, 94, 121, 101, 132, 103, 137, 106, 130, 110, 114, 116, 92, 125, 75, 134, 65, 139, 62, 144, 66, 148, 83, 151, 108, 155, 132, 157, 149])); - cb("n", new Uint8Array([50, 165, 50, 160, 50, 153, 50, 140, 50, 122, 50, 103, 50, 83, 50, 65, 50, 52, 50, 45, 50, 43, 52, 52, 57, 67, 66, 90, 78, 112, 93, 131, 104, 143, 116, 152, 127, 159, 135, 160, 141, 150, 148, 125, 154, 96, 158, 71, 161, 56, 162, 49])); - cb("o", new Uint8Array([107, 58, 104, 58, 97, 61, 87, 68, 75, 77, 65, 88, 58, 103, 54, 116, 53, 126, 55, 135, 61, 143, 75, 149, 91, 150, 106, 148, 119, 141, 137, 125, 143, 115, 146, 104, 146, 89, 142, 78, 130, 70, 116, 65, 104, 62])); - cb("p", new Uint8Array([52, 59, 52, 64, 54, 73, 58, 88, 61, 104, 65, 119, 67, 130, 69, 138, 71, 145, 71, 147, 71, 148, 71, 143, 70, 133, 68, 120, 67, 108, 67, 97, 67, 89, 68, 79, 72, 67, 83, 60, 99, 58, 118, 58, 136, 63, 146, 70, 148, 77, 145, 84, 136, 91, 121, 95, 106, 97, 93, 97, 82, 97])); - cb("q", new Uint8Array([95, 59, 93, 59, 88, 59, 79, 59, 68, 61, 57, 67, 50, 77, 48, 89, 48, 103, 50, 117, 55, 130, 65, 140, 76, 145, 85, 146, 94, 144, 101, 140, 105, 136, 106, 127, 106, 113, 100, 98, 92, 86, 86, 79, 84, 75, 84, 72, 91, 69, 106, 67, 126, 67, 144, 67, 158, 67, 168, 67, 173, 67, 177, 67])); - cb("r", new Uint8Array([53, 49, 53, 62, 53, 91, 53, 127, 53, 146, 53, 147, 53, 128, 53, 94, 53, 69, 62, 44, 82, 42, 94, 50, 92, 68, 82, 85, 77, 93, 80, 102, 95, 119, 114, 134, 129, 145, 137, 150])); - cb("s", new Uint8Array([159, 72, 157, 70, 155, 68, 151, 66, 145, 63, 134, 60, 121, 58, 108, 56, 96, 55, 83, 55, 73, 55, 64, 56, 57, 60, 52, 65, 49, 71, 49, 76, 50, 81, 55, 87, 71, 94, 94, 100, 116, 104, 131, 108, 141, 114, 145, 124, 142, 135, 124, 146, 97, 153, 70, 157, 52, 158])); - cb("t", new Uint8Array([45, 55, 48, 55, 55, 55, 72, 55, 96, 55, 120, 55, 136, 55, 147, 55, 152, 55, 155, 55, 157, 55, 158, 56, 158, 60, 156, 70, 154, 86, 151, 102, 150, 114, 148, 125, 148, 138, 148, 146])); - cb("u", new Uint8Array([35, 52, 35, 59, 35, 73, 35, 90, 36, 114, 38, 133, 42, 146, 49, 153, 60, 157, 73, 158, 86, 156, 100, 152, 112, 144, 121, 131, 127, 114, 132, 97, 134, 85, 135, 73, 136, 61, 136, 56])); - cb("v", new Uint8Array([36, 55, 37, 59, 40, 68, 45, 83, 51, 100, 58, 118, 64, 132, 69, 142, 71, 149, 73, 156, 76, 158, 77, 160, 77, 159, 80, 151, 82, 137, 84, 122, 86, 111, 90, 91, 91, 78, 91, 68, 91, 63, 92, 61, 97, 61, 111, 61, 132, 61, 150, 61, 162, 61])); - cb("w", new Uint8Array([33, 58, 34, 81, 39, 127, 44, 151, 48, 161, 52, 162, 57, 154, 61, 136, 65, 115, 70, 95, 76, 95, 93, 121, 110, 146, 119, 151, 130, 129, 138, 84, 140, 56, 140, 45])); - cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); - cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); - cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); +exports.getStrokes = function(mode, cb) { + if (mode === INPUT_MODE_ALPHA) { + cb("a", new Uint8Array([58, 159, 58, 155, 62, 144, 69, 127, 77, 106, 86, 90, 94, 77, 101, 68, 108, 62, 114, 59, 121, 59, 133, 61, 146, 70, 158, 88, 169, 107, 176, 124, 180, 135, 183, 144, 185, 152])); + cb("b", new Uint8Array([51, 47, 51, 77, 56, 123, 60, 151, 65, 163, 68, 164, 68, 144, 67, 108, 67, 76, 72, 43, 104, 51, 121, 74, 110, 87, 109, 95, 131, 117, 131, 140, 109, 152, 88, 157])); + cb("c", new Uint8Array([153, 62, 150, 62, 145, 62, 136, 62, 123, 62, 106, 65, 85, 70, 65, 75, 50, 82, 42, 93, 37, 106, 36, 119, 36, 130, 40, 140, 49, 147, 61, 153, 72, 156, 85, 157, 106, 158, 116, 158])); + cb("d", new Uint8Array([57, 178, 57, 176, 55, 171, 52, 163, 50, 154, 49, 146, 47, 135, 45, 121, 44, 108, 44, 97, 44, 85, 44, 75, 44, 66, 44, 58, 44, 48, 44, 38, 46, 31, 48, 26, 58, 21, 75, 20, 99, 26, 120, 35, 136, 51, 144, 70, 144, 88, 137, 110, 124, 131, 106, 145, 88, 153])); + cb("e", new Uint8Array([150, 72, 141, 69, 114, 68, 79, 69, 48, 77, 32, 81, 31, 85, 46, 91, 73, 95, 107, 100, 114, 103, 83, 117, 58, 134, 66, 143, 105, 148, 133, 148, 144, 148])); + cb("f", new Uint8Array([157, 52, 155, 52, 148, 52, 137, 52, 124, 52, 110, 52, 96, 52, 83, 52, 74, 52, 67, 52, 61, 52, 57, 52, 55, 52, 52, 52, 52, 54, 52, 58, 52, 64, 54, 75, 58, 97, 59, 117, 60, 130])); + cb("g", new Uint8Array([160, 66, 153, 62, 129, 58, 90, 56, 58, 57, 38, 65, 31, 86, 43, 125, 69, 152, 116, 166, 145, 154, 146, 134, 112, 116, 85, 108, 97, 106, 140, 106, 164, 106])); + cb("h", new Uint8Array([58, 50, 58, 55, 58, 64, 58, 80, 58, 102, 58, 122, 58, 139, 58, 153, 58, 164, 58, 171, 58, 177, 58, 179, 58, 181, 58, 180, 58, 173, 58, 163, 59, 154, 61, 138, 64, 114, 68, 95, 72, 84, 80, 79, 91, 79, 107, 82, 123, 93, 137, 111, 145, 130, 149, 147, 150, 154, 150, 159])); + cb("i", new Uint8Array([89, 48, 89, 49, 89, 51, 89, 55, 89, 60, 89, 68, 89, 78, 89, 91, 89, 103, 89, 114, 89, 124, 89, 132, 89, 138, 89, 144, 89, 148, 89, 151, 89, 154, 89, 156, 89, 157, 89, 158])); + cb("j", new Uint8Array([130, 57, 130, 61, 130, 73, 130, 91, 130, 113, 130, 133, 130, 147, 130, 156, 130, 161, 130, 164, 130, 166, 129, 168, 127, 168, 120, 168, 110, 168, 91, 167, 81, 167, 68, 167])); + cb("k", new Uint8Array([149, 63, 147, 68, 143, 76, 136, 89, 126, 106, 114, 123, 100, 136, 86, 147, 72, 153, 57, 155, 45, 152, 36, 145, 29, 131, 26, 117, 26, 104, 27, 93, 30, 86, 35, 80, 45, 77, 62, 80, 88, 96, 113, 116, 130, 131, 140, 142, 145, 149, 148, 153])); + cb("l", new Uint8Array([42, 55, 42, 59, 42, 69, 44, 87, 44, 107, 44, 128, 44, 143, 44, 156, 44, 163, 44, 167, 44, 169, 45, 170, 49, 170, 59, 169, 76, 167, 100, 164, 119, 162, 139, 160, 163, 159])); + cb("m", new Uint8Array([49, 165, 48, 162, 46, 156, 44, 148, 42, 138, 42, 126, 42, 113, 43, 101, 45, 91, 47, 82, 49, 75, 51, 71, 54, 70, 57, 70, 61, 74, 69, 81, 75, 91, 84, 104, 94, 121, 101, 132, 103, 137, 106, 130, 110, 114, 116, 92, 125, 75, 134, 65, 139, 62, 144, 66, 148, 83, 151, 108, 155, 132, 157, 149])); + cb("n", new Uint8Array([50, 165, 50, 160, 50, 153, 50, 140, 50, 122, 50, 103, 50, 83, 50, 65, 50, 52, 50, 45, 50, 43, 52, 52, 57, 67, 66, 90, 78, 112, 93, 131, 104, 143, 116, 152, 127, 159, 135, 160, 141, 150, 148, 125, 154, 96, 158, 71, 161, 56, 162, 49])); + cb("o", new Uint8Array([107, 58, 104, 58, 97, 61, 87, 68, 75, 77, 65, 88, 58, 103, 54, 116, 53, 126, 55, 135, 61, 143, 75, 149, 91, 150, 106, 148, 119, 141, 137, 125, 143, 115, 146, 104, 146, 89, 142, 78, 130, 70, 116, 65, 104, 62])); + cb("p", new Uint8Array([52, 59, 52, 64, 54, 73, 58, 88, 61, 104, 65, 119, 67, 130, 69, 138, 71, 145, 71, 147, 71, 148, 71, 143, 70, 133, 68, 120, 67, 108, 67, 97, 67, 89, 68, 79, 72, 67, 83, 60, 99, 58, 118, 58, 136, 63, 146, 70, 148, 77, 145, 84, 136, 91, 121, 95, 106, 97, 93, 97, 82, 97])); + cb("q", new Uint8Array([95, 59, 93, 59, 88, 59, 79, 59, 68, 61, 57, 67, 50, 77, 48, 89, 48, 103, 50, 117, 55, 130, 65, 140, 76, 145, 85, 146, 94, 144, 101, 140, 105, 136, 106, 127, 106, 113, 100, 98, 92, 86, 86, 79, 84, 75, 84, 72, 91, 69, 106, 67, 126, 67, 144, 67, 158, 67, 168, 67, 173, 67, 177, 67])); + cb("r", new Uint8Array([53, 49, 53, 62, 53, 91, 53, 127, 53, 146, 53, 147, 53, 128, 53, 94, 53, 69, 62, 44, 82, 42, 94, 50, 92, 68, 82, 85, 77, 93, 80, 102, 95, 119, 114, 134, 129, 145, 137, 150])); + cb("s", new Uint8Array([159, 72, 157, 70, 155, 68, 151, 66, 145, 63, 134, 60, 121, 58, 108, 56, 96, 55, 83, 55, 73, 55, 64, 56, 57, 60, 52, 65, 49, 71, 49, 76, 50, 81, 55, 87, 71, 94, 94, 100, 116, 104, 131, 108, 141, 114, 145, 124, 142, 135, 124, 146, 97, 153, 70, 157, 52, 158])); + cb("t", new Uint8Array([45, 55, 48, 55, 55, 55, 72, 55, 96, 55, 120, 55, 136, 55, 147, 55, 152, 55, 155, 55, 157, 55, 158, 56, 158, 60, 156, 70, 154, 86, 151, 102, 150, 114, 148, 125, 148, 138, 148, 146])); + cb("u", new Uint8Array([35, 52, 35, 59, 35, 73, 35, 90, 36, 114, 38, 133, 42, 146, 49, 153, 60, 157, 73, 158, 86, 156, 100, 152, 112, 144, 121, 131, 127, 114, 132, 97, 134, 85, 135, 73, 136, 61, 136, 56])); + cb("v", new Uint8Array([36, 55, 37, 59, 40, 68, 45, 83, 51, 100, 58, 118, 64, 132, 69, 142, 71, 149, 73, 156, 76, 158, 77, 160, 77, 159, 80, 151, 82, 137, 84, 122, 86, 111, 90, 91, 91, 78, 91, 68, 91, 63, 92, 61, 97, 61, 111, 61, 132, 61, 150, 61, 162, 61])); + cb("w", new Uint8Array([33, 58, 34, 81, 39, 127, 44, 151, 48, 161, 52, 162, 57, 154, 61, 136, 65, 115, 70, 95, 76, 95, 93, 121, 110, 146, 119, 151, 130, 129, 138, 84, 140, 56, 140, 45])); + cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); + cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); + cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); + } else if (mode === INPUT_MODE_NUM) { + cb("0", new Uint8Array([105, 63, 97, 63, 80, 63, 62, 64, 52, 69, 47, 79, 47, 94, 48, 111, 55, 125, 74, 138, 100, 141, 126, 137, 148, 129, 158, 119, 161, 107, 161, 98, 159, 92, 154, 87, 149, 82])); + cb("1", new Uint8Array([123, 59, 123, 60, 123, 63, 123, 67, 123, 70, 122, 73, 121, 78, 119, 83, 118, 91, 117, 100, 116, 108, 115, 117, 114, 126, 113, 135, 112, 143, 111, 149, 111, 155, 110, 159])); + cb("2", new Uint8Array([61, 99, 61, 94, 61, 88, 61, 80, 65, 71, 73, 66, 83, 62, 97, 62, 109, 62, 126, 62, 141, 62, 149, 65, 151, 74, 151, 87, 150, 95, 143, 108, 130, 118, 117, 127, 100, 138, 84, 146, 67, 151, 55, 157, 52, 159, 73, 159, 117, 159, 163, 159, 183, 159])); + cb("3", new Uint8Array([69, 62, 78, 56, 98, 49, 121, 49, 141, 54, 149, 58, 150, 65, 148, 74, 143, 82, 126, 92, 114, 98, 119, 100, 135, 105, 143, 117, 142, 135, 123, 149, 105, 155])); + cb("4", new Uint8Array([78, 45, 78, 47, 78, 50, 78, 56, 78, 64, 78, 75, 78, 88, 78, 103, 78, 119, 78, 132, 78, 144, 78, 148, 80, 149, 84, 149, 96, 149, 112, 148, 127, 147, 144, 144, 163, 140, 175, 137])); + cb("5", new Uint8Array([142, 49, 134, 47, 121, 44, 104, 44, 88, 45, 75, 46, 68, 48, 64, 52, 64, 59, 64, 73, 64, 86, 64, 100, 67, 105, 82, 105, 106, 105, 130, 105, 143, 105, 149, 105, 151, 110, 148, 125, 138, 144, 118, 157, 92, 164, 76, 165, 65, 165, 60, 165])); + cb("6", new Uint8Array([161, 47, 151, 47, 133, 47, 108, 48, 85, 52, 65, 59, 53, 72, 46, 89, 44, 107, 49, 133, 71, 151, 100, 156, 118, 152, 120, 141, 108, 132, 84, 127, 70, 126])); + cb("7", new Uint8Array([43, 53, 53, 49, 72, 45, 96, 40, 116, 38, 129, 38, 138, 38, 144, 38, 147, 39, 149, 47, 143, 75, 127, 121, 114, 147, 107, 158, 104, 162, 98, 168, 93, 171])); + cb("8", new Uint8Array([148, 66, 135, 58, 113, 49, 97, 43, 84, 40, 74, 40, 66, 43, 62, 47, 62, 51, 67, 61, 84, 75, 101, 88, 111, 101, 113, 115, 110, 135, 98, 149, 84, 156, 73, 157, 63, 157, 58, 154, 52, 144, 52, 133, 54, 122, 65, 111, 81, 100, 97, 92, 110, 86, 121, 81, 129, 80, 137, 80, 145, 79, 151, 78])); + cb("9", new Uint8Array([146, 57, 146, 52, 146, 46, 143, 42, 135, 41, 123, 41, 107, 45, 92, 49, 83, 53, 78, 62, 89, 82, 110, 94, 126, 94, 139, 88, 147, 81, 151, 74, 152, 75, 152, 80, 152, 88, 152, 101, 152, 121, 152, 140, 152, 154, 152, 165, 152, 171])); + } cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); }; exports.input = function(options) { options = options||{}; + let input_mode = INPUT_MODE_ALPHA; var text = options.text; if ("string"!=typeof text) text=""; -Bangle.strokes = {}; -exports.getStrokes( (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); + function setupStrokes() { + Bangle.strokes = {}; + exports.getStrokes(input_mode, (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); + } + setupStrokes(); var flashToggle = false; const R = Bangle.appRect; @@ -49,6 +69,7 @@ exports.getStrokes( (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); var Rx2; var Ry1; var Ry2; + let flashInterval; function findMarker(strArr) { if (strArr.length == 0) { @@ -101,10 +122,13 @@ exports.getStrokes( (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); */ function show() { + if (flashInterval) clearInterval(flashInterval); + flashInterval = undefined; + g.reset(); g.clearRect(R).setColor("#f00"); var n=0; - exports.getStrokes((id,s) => { + exports.getStrokes(input_mode, (id,s) => { var x = n%6; var y = (n-x)/6; s = g.transformVertices(s, {scale:0.16, x:R.x+x*30-4, y:R.y+y*30-4}); @@ -119,22 +143,47 @@ exports.getStrokes( (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); if (!flashInterval) flashInterval = setInterval(() => { flashToggle = !flashToggle; - draw(); + draw(false); }, 1000); if (o.stroke!==undefined) { var ch = o.stroke; if (ch=="\b") text = text.slice(0,-1); else text += ch; - g.clearRect(R); + g.clearRect(R); } flashToggle = true; - draw(); + draw(false); } + + // Switches between alphabetic and numeric input + function cycleInput() { + input_mode++; + if (input_mode > INPUT_MODE_NUM) input_mode = 0; + setupStrokes(); + show(); + Bangle.drawWidgets(); + } + Bangle.on('stroke',strokeHandler); g.reset().clearRect(R); show(); draw(false); - var flashInterval; + + // Create Widget to switch between alphabetic and numeric input + WIDGETS.kbswipe={ + area:"tl", + width: 36, // 3 chars 6*2 px/char + draw: function() { + g.reset(); + g.setFont("6x8:2x3"); + g.setColor("#f00"); + if (input_mode === INPUT_MODE_ALPHA) { + g.drawString("123", this.x, this.y); + } else if (input_mode === INPUT_MODE_NUM) { + g.drawString("ABC", this.x, this.y); + } + } + }; return new Promise((resolve,reject) => { var l;//last event @@ -142,11 +191,16 @@ exports.getStrokes( (id,s) => Bangle.strokes[id] = Unistroke.new(s) ); "ram"; if (l) g.reset().setColor("#f00").drawLine(l.x,l.y,e.x,e.y); l = e.b ? e : 0; - },touch:() => { - if (flashInterval) clearInterval(flashInterval); - flashInterval = undefined; - show(); + },touch:(n,e) => { + if (WIDGETS.kbswipe && e.x>=WIDGETS.kbswipe.x && e.x=WIDGETS.kbswipe.y && e.y<=WIDGETS.kbswipe.y+24) { + // touch inside widget + cycleInput(); + } else { + show(); + } }, back:()=>{ + delete WIDGETS.kbswipe; Bangle.removeListener("stroke", strokeHandler); if (flashInterval) clearInterval(flashInterval); Bangle.setUI(); diff --git a/apps/kbswipe/metadata.json b/apps/kbswipe/metadata.json index 59622cb96..5e290e1dd 100644 --- a/apps/kbswipe/metadata.json +++ b/apps/kbswipe/metadata.json @@ -1,6 +1,6 @@ { "id": "kbswipe", "name": "Swipe keyboard", - "version":"0.05", + "version":"0.06", "description": "A library for text input via PalmOS style swipe gestures (beta!)", "icon": "app.png", "type":"textinput", From 39860e9bb281a343859d11522fab337f02c3ec40 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 2 Dec 2022 20:40:15 +0100 Subject: [PATCH 160/342] kbswipe: Support uppercase input --- apps/kbswipe/lib.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 861d046cb..451cc21b4 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -35,6 +35,7 @@ exports.getStrokes = function(mode, cb) { cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); + cb("SHIFT", new Uint8Array([106, 184, 106, 182, 106, 175, 106, 165, 106, 151, 106, 135, 106, 120, 106, 106, 106, 95, 106, 87, 106, 82, 106, 78, 106, 73, 106, 70, 106, 68, 106, 66, 106, 64])); } else if (mode === INPUT_MODE_NUM) { cb("0", new Uint8Array([105, 63, 97, 63, 80, 63, 62, 64, 52, 69, 47, 79, 47, 94, 48, 111, 55, 125, 74, 138, 100, 141, 126, 137, 148, 129, 158, 119, 161, 107, 161, 98, 159, 92, 154, 87, 149, 82])); cb("1", new Uint8Array([123, 59, 123, 60, 123, 63, 123, 67, 123, 70, 122, 73, 121, 78, 119, 83, 118, 91, 117, 100, 116, 108, 115, 117, 114, 126, 113, 135, 112, 143, 111, 149, 111, 155, 110, 159])); @@ -70,6 +71,7 @@ exports.input = function(options) { var Ry1; var Ry2; let flashInterval; + let shift = false; function findMarker(strArr) { if (strArr.length == 0) { @@ -148,7 +150,8 @@ exports.input = function(options) { if (o.stroke!==undefined) { var ch = o.stroke; if (ch=="\b") text = text.slice(0,-1); - else text += ch; + else if (ch==="SHIFT") { shift=!shift; Bangle.drawWidgets(); } + else text += shift ? ch.toUpperCase() : ch; g.clearRect(R); } flashToggle = true; @@ -159,6 +162,7 @@ exports.input = function(options) { function cycleInput() { input_mode++; if (input_mode > INPUT_MODE_NUM) input_mode = 0; + shift = false; setupStrokes(); show(); Bangle.drawWidgets(); @@ -172,15 +176,15 @@ exports.input = function(options) { // Create Widget to switch between alphabetic and numeric input WIDGETS.kbswipe={ area:"tl", - width: 36, // 3 chars 6*2 px/char + width: 36, // 3 chars, 6*2 px/char draw: function() { g.reset(); g.setFont("6x8:2x3"); g.setColor("#f00"); if (input_mode === INPUT_MODE_ALPHA) { - g.drawString("123", this.x, this.y); + g.drawString(shift ? "ABC" : "abc", this.x, this.y); } else if (input_mode === INPUT_MODE_NUM) { - g.drawString("ABC", this.x, this.y); + g.drawString("123", this.x, this.y); } } }; From e77a5f973c535bbfc2a755ceebdd4dc13c3f82e0 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 2 Dec 2022 19:10:26 +0100 Subject: [PATCH 161/342] bthrm - Emit copies of events when changing --- apps/bthrm/lib.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/bthrm/lib.js b/apps/bthrm/lib.js index f5e0e1e5b..a792167ca 100644 --- a/apps/bthrm/lib.js +++ b/apps/bthrm/lib.js @@ -553,14 +553,15 @@ exports.enable = () => { if (settings.replace){ // register a listener for original HRM events and emit as HRM_int - Bangle.on("HRM", (e) => { - e.modified = true; + Bangle.on("HRM", (o) => { + let e = Object.assign({},o); log("Emitting HRM_int", e); Bangle.emit("HRM_int", e); if (fallbackActive){ // if fallback to internal HRM is active, emit as HRM_R to which everyone listens - log("Emitting HRM_R(int)", e); - Bangle.emit("HRM_R", e); + o.src = "int"; + log("Emitting HRM_R(int)", o); + Bangle.emit("HRM_R", o); } }); @@ -576,6 +577,13 @@ exports.enable = () => { if (name == "HRM") o("HRM_R", cb); else o(name, cb); })(Bangle.removeListener); + } else { + Bangle.on("HRM", (o)=>{ + o.src = "int"; + let e = Object.assign({},o); + log("Emitting HRM_int", e); + Bangle.emit("HRM_int", e); + }); } Bangle.origSetHRMPower = Bangle.setHRMPower; From 85c2f92e0aa816ce8c47f46ea077ae82548b7d90 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 2 Dec 2022 19:15:03 +0100 Subject: [PATCH 162/342] bthrm - Bump version --- apps/bthrm/ChangeLog | 1 + apps/bthrm/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bthrm/ChangeLog b/apps/bthrm/ChangeLog index 99cf0c670..000c5e3f8 100644 --- a/apps/bthrm/ChangeLog +++ b/apps/bthrm/ChangeLog @@ -40,3 +40,4 @@ 0.16: Set powerdownRequested correctly on BTHRM power on Additional logging on errors Add debug option for disabling active scanning +0.17: New GUI based on layout library diff --git a/apps/bthrm/metadata.json b/apps/bthrm/metadata.json index 18c34ea33..0977fd755 100644 --- a/apps/bthrm/metadata.json +++ b/apps/bthrm/metadata.json @@ -2,7 +2,7 @@ "id": "bthrm", "name": "Bluetooth Heart Rate Monitor", "shortName": "BT HRM", - "version": "0.16", + "version": "0.17", "description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.", "icon": "app.png", "type": "app", From ddbbef2bf814eb254d9fd3969f5c05ddb4e70da1 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 2 Dec 2022 23:50:14 +0100 Subject: [PATCH 163/342] bthrm - Change from timeouts to timestamps for resetting values --- apps/bthrm/bthrm.js | 55 +++++++++------------------------------------ 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index 05bf323a5..e163dd8b7 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -1,7 +1,3 @@ -var intervalInt; -var intervalBt; -var intervalAgg; - const BPM_FONT_SIZE="19%"; const VALUE_TIMEOUT=3000; @@ -19,7 +15,6 @@ var Layout = require("Layout"); function border(l,c) { g.setColor(c).drawLine(l.x+l.w*0.05, l.y-4, l.x+l.w*0.95, l.y-4); - c++; } function getRow(id, text, additionalInfo){ @@ -68,23 +63,17 @@ var layout = new Layout( { var int,agg,bt; var firstEvent = true; -var drawTimeout; function draw(){ - - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - }, 1000); - if (!(int || agg || bt)) return; - + if (firstEvent) { g.clearRect(Bangle.appRect); firstEvent = false; } - - if (int){ + + let now = Date.now(); + + if (int && int.time > (now - VALUE_TIMEOUT)){ layout.int.label = int.bpm; if (!isNaN(int.confidence)) layout.intConfidence.label = int.confidence; } else { @@ -92,7 +81,7 @@ function draw(){ layout.intConfidence.label = "--"; } - if (agg){ + if (agg && agg.time > (now - VALUE_TIMEOUT)){ layout.agg.label = agg.bpm; if (!isNaN(agg.confidence)) layout.aggConfidence.label = agg.confidence; if (agg.src) layout.aggSource.label = agg.src; @@ -102,7 +91,7 @@ function draw(){ layout.aggSource.label = "--"; } - if (bt) { + if (bt && bt.time > (now - VALUE_TIMEOUT)) { layout.bt.label = bt.bpm; if (bt.battery) layout.btBattery.label = bt.battery; if (bt.rr) layout.btRR.label = bt.rr.join(","); @@ -131,9 +120,6 @@ function draw(){ } } -var firstEventBt = true; -var firstEventInt = true; - // This can get called for the boot code to show what's happening function showStatusInfo(txt) { @@ -145,38 +131,19 @@ function showStatusInfo(txt) { function onBtHrm(e) { bt = e; - if (e.bpm === 0){ - Bangle.buzz(100,0.2); - } - if (intervalBt){ - clearInterval(intervalBt); - } - intervalBt = setInterval(()=>{ - bt = undefined; - }, VALUE_TIMEOUT); + bt.time = Date.now(); } function onInt(e) { int = e; - if (intervalInt){ - clearInterval(intervalInt); - } - intervalInt = setInterval(()=>{ - int = undefined; - }, VALUE_TIMEOUT); + int.time = Date.now(); } function onAgg(e) { agg = e; - if (intervalAgg){ - clearInterval(intervalAgg); - } - intervalAgg = setInterval(()=>{ - agg = undefined; - }, VALUE_TIMEOUT); + agg.time = Date.now(); } - var settings = require('Storage').readJSON("bthrm.json", true) || {}; Bangle.on('BTHRM', onBtHrm); @@ -195,7 +162,7 @@ Bangle.drawWidgets(); if (Bangle.setBTHRMPower){ g.reset().setFont("6x8",2).setFontAlign(0,0); g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2); - draw(); + setInterval(draw, 1000); } else { g.reset().setFont("6x8",2).setFontAlign(0,0); g.drawString("BTHRM disabled",g.getWidth()/2,g.getHeight()/2); From 5308b42db1218457e965d96c05b1fd43c3e63836 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 13:07:33 +0100 Subject: [PATCH 164/342] Update app.js --- apps/contourclock/app.js | 74 +++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index d5c97edfa..05961d222 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -1,35 +1,45 @@ -var digits = []; -var drawTimeout; -var fontName=""; -var settings = require('Storage').readJSON("contourclock.json", true) || {}; -if (settings.fontIndex==undefined) { - settings.fontIndex=0; - require('Storage').writeJSON("myapp.json", settings); -} +{ + let digits = []; + let drawTimeout; + let fontName=""; + let settings = require('Storage').readJSON("contourclock.json", true) || {}; + if (settings.fontIndex==undefined) { + settings.fontIndex=0; + require('Storage').writeJSON("myapp.json", settings); + } -function queueDraw() { - setTimeout(function() { - draw(); - queueDraw(); - }, 60000 - (Date.now() % 60000)); -} + let queueDraw = function() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + queueDraw(); + }, 60000 - (Date.now() % 60000)); + }; -function draw() { - var date = new Date(); - // Draw day of the week - g.reset(); - g.setFont("Teletext10x18Ascii"); - g.clearRect(0,138,g.getWidth()-1,176); - g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); - // Draw Date - g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); - require('contourclock').drawClock(settings.fontIndex); -} + let draw = function() { + var date = new Date(); + // Draw day of the week + g.reset(); + g.setFont("Teletext10x18Ascii"); + g.clearRect(0,138,g.getWidth()-1,176); + g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); + // Draw Date + g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); + require('contourclock').drawClock(settings.fontIndex); + }; -require("FontTeletext10x18Ascii").add(Graphics); -Bangle.setUI("clock"); -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); -queueDraw(); -draw(); + require("FontTeletext10x18Ascii").add(Graphics); + g.clear(); + draw(); + Bangle.setUI({mode:"clock", remove:function() { + if (drawTimeout) clearTimeout(drawTimeout); + require("widget_utils").show(); + g.reset(); + g.clear(); + }}); + Bangle.loadWidgets(); + require("widget_utils").swipeOn(); + //Bangle.drawWidgets(); + queueDraw(); +} From 3a65e3f0ef3ac08622668e7f2313ca81f1543766 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 13:08:44 +0100 Subject: [PATCH 165/342] Update metadata.json --- apps/contourclock/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/contourclock/metadata.json b/apps/contourclock/metadata.json index eb0dd39fb..5a359ade5 100644 --- a/apps/contourclock/metadata.json +++ b/apps/contourclock/metadata.json @@ -1,9 +1,9 @@ { "id": "contourclock", "name": "Contour Clock", "shortName" : "Contour Clock", - "version":"0.27", + "version":"0.28", "icon": "app.png", - "description": "A Minimalist clockface with large Digits. Now with more fonts!", + "description": "A Minimalist clockface with large Digits.", "screenshots" : [{"url":"cc-screenshot-1.png"},{"url":"cc-screenshot-2.png"}], "tags": "clock", "custom": "custom.html", From 51cbb46466fd37b4a84ba35b25d02c92f0914f57 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:04:42 +0100 Subject: [PATCH 166/342] Update contourclock.settings.js --- apps/contourclock/contourclock.settings.js | 98 ++++++++++++++-------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/apps/contourclock/contourclock.settings.js b/apps/contourclock/contourclock.settings.js index a12538fc5..6564cef58 100644 --- a/apps/contourclock/contourclock.settings.js +++ b/apps/contourclock/contourclock.settings.js @@ -1,43 +1,73 @@ (function(back) { - Bangle.removeAllListeners('drag'); + //Bangle.removeAllListeners('drag'); Bangle.setUI(""); var settings = require('Storage').readJSON('contourclock.json', true) || {}; if (settings.fontIndex==undefined) { - settings.fontIndex=0; + settings.fontIndex=0; + settings.widgets=true; + settings.hide=true; + settings.weekday=true; + settings.date=true; require('Storage').writeJSON("myapp.json", settings); } - savedIndex=settings.fontIndex; - saveListener = setWatch(function() { //save changes and return to settings menu - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - back(); - }, BTN, { repeat:false, edge:'falling' }); - lockListener = Bangle.on('lock', function () { //discard changes and return to clock - settings.fontIndex=savedIndex; - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - load(); - }); - swipeListener = Bangle.on('swipe', function (direction) { - var fontName = require('contourclock').drawClock(settings.fontIndex+direction); - if (fontName) { - settings.fontIndex+=direction; - g.clearRect(0,0,g.getWidth()-1,16); - g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,0); - } else { - require('contourclock').drawClock(settings.fontIndex); + E.showMenu({ + "" : { "title" : "ContourClock" }, + "< Back" : () => back(), + 'Widgets': { + value: (settings.widgets !== undefined ? settings.widgets : true), + onchange : v => {settings.widgets=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'hide Widgets': { + value: (settings.hide !== undefined ? settings.hide : true), + onchange : v => {settings.hide=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Weekday': { + value: (settings.weekday !== undefined ? settings.weekday : true), + onchange : v => {settings.weekday=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Date': { + value: (settings.date !== undefined ? settings.date : true), + onchange : v => {settings.date=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'set Font': function() { + Bangle.removeAllListeners('drag'); + Bangle.removeAllListeners('touch'); + require("widget_utils").hide(); + savedIndex=settings.fontIndex; + saveListener = setWatch(function() { //save changes and return to settings menu + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + clearWatch(saveListener); + g.clear(); + //require("widget_utils").show(); + Bangle.load(); + }, BTN, { repeat:false, edge:'falling' }); + lockListener = Bangle.on('lock', function () { //discard changes and return to clock + settings.fontIndex=savedIndex; + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + clearWatch(saveListener); + g.clear(); + Bangle.load(); + }); + swipeListener = Bangle.on('swipe', function (direction) { + var fontName = require('contourclock').drawClock(settings.fontIndex+direction); + if (fontName) { + settings.fontIndex+=direction; + g.clearRect(0,0,g.getWidth()-1,16); + g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,0); + } else { + require('contourclock').drawClock(settings.fontIndex); + } + }); + g.reset(); + g.clear(); + g.setFont('6x8:2x2').setFontAlign(0,-1); + g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,0); + g.drawString('Swipe - change',g.getWidth()/2,g.getHeight()-36); + g.drawString('BTN - save',g.getWidth()/2,g.getHeight()-18); } }); - g.reset(); - g.clear(); - g.setFont('6x8:2x2').setFontAlign(0,-1); - g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,0); - g.drawString('Swipe - change',g.getWidth()/2,g.getHeight()-36); - g.drawString('BTN - save',g.getWidth()/2,g.getHeight()-18); }) From 2abdfd991c10785e1a180fdfb29e685b9b78aff1 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:19:04 +0100 Subject: [PATCH 167/342] Update app.js --- apps/contourclock/app.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index 05961d222..a1dd9f18a 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -5,7 +5,11 @@ let settings = require('Storage').readJSON("contourclock.json", true) || {}; if (settings.fontIndex==undefined) { settings.fontIndex=0; - require('Storage').writeJSON("myapp.json", settings); + settings.widgets=true; + settings.hide=false; + settings.weekday=true; + settings.hideWhenLocked=false; + settings.date=true; require('Storage').writeJSON("myapp.json", settings); } let queueDraw = function() { @@ -23,23 +27,31 @@ g.reset(); g.setFont("Teletext10x18Ascii"); g.clearRect(0,138,g.getWidth()-1,176); - g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); + if (settings.weekday) g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); // Draw Date - g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); + if (settings.date) g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); require('contourclock').drawClock(settings.fontIndex); }; + + if (settings.hideWhenLocked) Bangle.on('lock', function (locked) { + g.clear(); + if (locked) require('contourclock').drawClock(settings.fontIndex); + else draw(); + }); require("FontTeletext10x18Ascii").add(Graphics); g.clear(); draw(); Bangle.setUI({mode:"clock", remove:function() { if (drawTimeout) clearTimeout(drawTimeout); - require("widget_utils").show(); + if (settings.widgets && settings.hide) require("widget_utils").show(); g.reset(); g.clear(); }}); - Bangle.loadWidgets(); - require("widget_utils").swipeOn(); - //Bangle.drawWidgets(); + if (settings.widgets) { + Bangle.loadWidgets(); + if (settings.hide) require("widget_utils").swipeOn(); + else Bangle.drawWidgets(); + } queueDraw(); } From 94eb6f754444fad0d6bbe7098fc9e1d4dca3f0e5 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:26:43 +0100 Subject: [PATCH 168/342] Update contourclock.settings.js --- apps/contourclock/contourclock.settings.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/contourclock/contourclock.settings.js b/apps/contourclock/contourclock.settings.js index 6564cef58..13c5d874f 100644 --- a/apps/contourclock/contourclock.settings.js +++ b/apps/contourclock/contourclock.settings.js @@ -5,9 +5,10 @@ if (settings.fontIndex==undefined) { settings.fontIndex=0; settings.widgets=true; - settings.hide=true; + settings.hide=false; settings.weekday=true; settings.date=true; + settings.hideWhenLocked=false; require('Storage').writeJSON("myapp.json", settings); } E.showMenu({ @@ -18,7 +19,7 @@ onchange : v => {settings.widgets=v; require('Storage').writeJSON('contourclock.json', settings);} }, 'hide Widgets': { - value: (settings.hide !== undefined ? settings.hide : true), + value: (settings.hide !== undefined ? settings.hide : false), onchange : v => {settings.hide=v; require('Storage').writeJSON('contourclock.json', settings);} }, 'Weekday': { @@ -29,6 +30,10 @@ value: (settings.date !== undefined ? settings.date : true), onchange : v => {settings.date=v; require('Storage').writeJSON('contourclock.json', settings);} }, + 'Hide when locked': { + value: (settings.hideWhenLocked !== undefined ? settings.hideWhenLocked : false), + onchange : v => {settings.hideWhenLocked=v; require('Storage').writeJSON('contourclock.json', settings);} + }, 'set Font': function() { Bangle.removeAllListeners('drag'); Bangle.removeAllListeners('touch'); @@ -40,7 +45,6 @@ Bangle.removeAllListeners('lock'); clearWatch(saveListener); g.clear(); - //require("widget_utils").show(); Bangle.load(); }, BTN, { repeat:false, edge:'falling' }); lockListener = Bangle.on('lock', function () { //discard changes and return to clock From cd21548da8c168bc723f00b29ed2af0a3be0c970 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:51:48 +0100 Subject: [PATCH 169/342] Update ChangeLog --- apps/contourclock/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/contourclock/ChangeLog b/apps/contourclock/ChangeLog index d415a604d..98d82e91b 100644 --- a/apps/contourclock/ChangeLog +++ b/apps/contourclock/ChangeLog @@ -7,3 +7,4 @@ 0.25: Fixed a bug that would let widgets change the color of the clock. 0.26: Time formatted to locale 0.27: Fixed the timing code, which sometimes did not update for one minute +0.28: More config options, enabled fast loading From 2ea2983e36ef5e752a713349e895dd9b77b82fe7 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:57:07 +0100 Subject: [PATCH 170/342] Update contourclock.settings.js --- apps/contourclock/contourclock.settings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/contourclock/contourclock.settings.js b/apps/contourclock/contourclock.settings.js index 13c5d874f..2d8f74fc6 100644 --- a/apps/contourclock/contourclock.settings.js +++ b/apps/contourclock/contourclock.settings.js @@ -1,5 +1,4 @@ (function(back) { - //Bangle.removeAllListeners('drag'); Bangle.setUI(""); var settings = require('Storage').readJSON('contourclock.json', true) || {}; if (settings.fontIndex==undefined) { From 48ddf89913bd959d0f5da2e8d088aafe8b381fa0 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:57:48 +0100 Subject: [PATCH 171/342] Update ChangeLog --- apps/contourclock/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/ChangeLog b/apps/contourclock/ChangeLog index 98d82e91b..387340d5b 100644 --- a/apps/contourclock/ChangeLog +++ b/apps/contourclock/ChangeLog @@ -7,4 +7,4 @@ 0.25: Fixed a bug that would let widgets change the color of the clock. 0.26: Time formatted to locale 0.27: Fixed the timing code, which sometimes did not update for one minute -0.28: More config options, enabled fast loading +0.28: More config options for cleaner look, enabled fast loading From c07d23ce17c89c758a0669298629112b132c6fea Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 21:49:34 +0100 Subject: [PATCH 172/342] Update app.js --- apps/contourclock/app.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index a1dd9f18a..87eb3e5e8 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -34,14 +34,19 @@ }; if (settings.hideWhenLocked) Bangle.on('lock', function (locked) { - g.clear(); - if (locked) require('contourclock').drawClock(settings.fontIndex); - else draw(); + if (!locked) require("widget_utils").show(); + else { + g.clear(); + if (settings.hide) require("widget_utils").swipeOn(); + else require("widget_utils").hide(); + } + draw(); }); - + require("FontTeletext10x18Ascii").add(Graphics); g.clear(); draw(); + Bangle.setUI({mode:"clock", remove:function() { if (drawTimeout) clearTimeout(drawTimeout); if (settings.widgets && settings.hide) require("widget_utils").show(); From 2b95ba68af50c8c19247f3d72412402fd7e03c94 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 21:50:46 +0100 Subject: [PATCH 173/342] Update app.js --- apps/contourclock/app.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index 87eb3e5e8..8efa406c6 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -25,14 +25,21 @@ var date = new Date(); // Draw day of the week g.reset(); - g.setFont("Teletext10x18Ascii"); - g.clearRect(0,138,g.getWidth()-1,176); - if (settings.weekday) g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); - // Draw Date - if (settings.date) g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); + if ((!settings.hideWhenLocked) || (!Bangle.isLocked())) { + // Draw day of the week + g.setFont("Teletext10x18Ascii"); + g.clearRect(0,138,g.getWidth()-1,176); + if (settings.weekday) g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); + // Draw Date + if (settings.date) g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); + } require('contourclock').drawClock(settings.fontIndex); }; + require("FontTeletext10x18Ascii").add(Graphics); + g.clear(); + + draw(); if (settings.hideWhenLocked) Bangle.on('lock', function (locked) { if (!locked) require("widget_utils").show(); else { @@ -42,11 +49,6 @@ } draw(); }); - - require("FontTeletext10x18Ascii").add(Graphics); - g.clear(); - draw(); - Bangle.setUI({mode:"clock", remove:function() { if (drawTimeout) clearTimeout(drawTimeout); if (settings.widgets && settings.hide) require("widget_utils").show(); From 6324ffb378a77d8debd64cf28443946786016092 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 4 Dec 2022 10:56:20 +0100 Subject: [PATCH 174/342] kbswipe: Bug fixes --- apps/kbswipe/lib.js | 71 ++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 451cc21b4..edc50817a 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -1,5 +1,5 @@ -const INPUT_MODE_ALPHA = 0; -const INPUT_MODE_NUM = 1; +exports.INPUT_MODE_ALPHA = 0; +exports.INPUT_MODE_NUM = 1; /* To make your own strokes, type: @@ -8,7 +8,7 @@ Bangle.on('stroke',print) on the left of the IDE, then do a stroke and copy out the Uint8Array line */ exports.getStrokes = function(mode, cb) { - if (mode === INPUT_MODE_ALPHA) { + if (mode === exports.INPUT_MODE_ALPHA) { cb("a", new Uint8Array([58, 159, 58, 155, 62, 144, 69, 127, 77, 106, 86, 90, 94, 77, 101, 68, 108, 62, 114, 59, 121, 59, 133, 61, 146, 70, 158, 88, 169, 107, 176, 124, 180, 135, 183, 144, 185, 152])); cb("b", new Uint8Array([51, 47, 51, 77, 56, 123, 60, 151, 65, 163, 68, 164, 68, 144, 67, 108, 67, 76, 72, 43, 104, 51, 121, 74, 110, 87, 109, 95, 131, 117, 131, 140, 109, 152, 88, 157])); cb("c", new Uint8Array([153, 62, 150, 62, 145, 62, 136, 62, 123, 62, 106, 65, 85, 70, 65, 75, 50, 82, 42, 93, 37, 106, 36, 119, 36, 130, 40, 140, 49, 147, 61, 153, 72, 156, 85, 157, 106, 158, 116, 158])); @@ -35,18 +35,18 @@ exports.getStrokes = function(mode, cb) { cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); - cb("SHIFT", new Uint8Array([106, 184, 106, 182, 106, 175, 106, 165, 106, 151, 106, 135, 106, 120, 106, 106, 106, 95, 106, 87, 106, 82, 106, 78, 106, 73, 106, 70, 106, 68, 106, 66, 106, 64])); - } else if (mode === INPUT_MODE_NUM) { - cb("0", new Uint8Array([105, 63, 97, 63, 80, 63, 62, 64, 52, 69, 47, 79, 47, 94, 48, 111, 55, 125, 74, 138, 100, 141, 126, 137, 148, 129, 158, 119, 161, 107, 161, 98, 159, 92, 154, 87, 149, 82])); - cb("1", new Uint8Array([123, 59, 123, 60, 123, 63, 123, 67, 123, 70, 122, 73, 121, 78, 119, 83, 118, 91, 117, 100, 116, 108, 115, 117, 114, 126, 113, 135, 112, 143, 111, 149, 111, 155, 110, 159])); - cb("2", new Uint8Array([61, 99, 61, 94, 61, 88, 61, 80, 65, 71, 73, 66, 83, 62, 97, 62, 109, 62, 126, 62, 141, 62, 149, 65, 151, 74, 151, 87, 150, 95, 143, 108, 130, 118, 117, 127, 100, 138, 84, 146, 67, 151, 55, 157, 52, 159, 73, 159, 117, 159, 163, 159, 183, 159])); - cb("3", new Uint8Array([69, 62, 78, 56, 98, 49, 121, 49, 141, 54, 149, 58, 150, 65, 148, 74, 143, 82, 126, 92, 114, 98, 119, 100, 135, 105, 143, 117, 142, 135, 123, 149, 105, 155])); - cb("4", new Uint8Array([78, 45, 78, 47, 78, 50, 78, 56, 78, 64, 78, 75, 78, 88, 78, 103, 78, 119, 78, 132, 78, 144, 78, 148, 80, 149, 84, 149, 96, 149, 112, 148, 127, 147, 144, 144, 163, 140, 175, 137])); - cb("5", new Uint8Array([142, 49, 134, 47, 121, 44, 104, 44, 88, 45, 75, 46, 68, 48, 64, 52, 64, 59, 64, 73, 64, 86, 64, 100, 67, 105, 82, 105, 106, 105, 130, 105, 143, 105, 149, 105, 151, 110, 148, 125, 138, 144, 118, 157, 92, 164, 76, 165, 65, 165, 60, 165])); - cb("6", new Uint8Array([161, 47, 151, 47, 133, 47, 108, 48, 85, 52, 65, 59, 53, 72, 46, 89, 44, 107, 49, 133, 71, 151, 100, 156, 118, 152, 120, 141, 108, 132, 84, 127, 70, 126])); - cb("7", new Uint8Array([43, 53, 53, 49, 72, 45, 96, 40, 116, 38, 129, 38, 138, 38, 144, 38, 147, 39, 149, 47, 143, 75, 127, 121, 114, 147, 107, 158, 104, 162, 98, 168, 93, 171])); - cb("8", new Uint8Array([148, 66, 135, 58, 113, 49, 97, 43, 84, 40, 74, 40, 66, 43, 62, 47, 62, 51, 67, 61, 84, 75, 101, 88, 111, 101, 113, 115, 110, 135, 98, 149, 84, 156, 73, 157, 63, 157, 58, 154, 52, 144, 52, 133, 54, 122, 65, 111, 81, 100, 97, 92, 110, 86, 121, 81, 129, 80, 137, 80, 145, 79, 151, 78])); - cb("9", new Uint8Array([146, 57, 146, 52, 146, 46, 143, 42, 135, 41, 123, 41, 107, 45, 92, 49, 83, 53, 78, 62, 89, 82, 110, 94, 126, 94, 139, 88, 147, 81, 151, 74, 152, 75, 152, 80, 152, 88, 152, 101, 152, 121, 152, 140, 152, 154, 152, 165, 152, 171])); + cb("SHIFT", new Uint8Array([100, 160, 100, 50])); + } else if (mode === exports.INPUT_MODE_NUM) { + cb("0", new Uint8Array([127, 67, 125, 67, 121, 67, 111, 67, 98, 67, 83, 68, 72, 70, 64, 74, 58, 79, 54, 86, 51, 96, 50, 107, 50, 116, 50, 125, 53, 132, 59, 141, 66, 146, 75, 150, 93, 155, 112, 157, 132, 154, 147, 146, 158, 126, 160, 113, 159, 103, 155, 94, 149, 89, 142, 85])); + cb("1", new Uint8Array([100, 50, 100, 160])); + cb("2", new Uint8Array([63, 80, 65, 78, 68, 75, 72, 71, 79, 67, 87, 62, 97, 59, 106, 58, 115, 58, 122, 58, 126, 61, 128, 66, 129, 72, 127, 84, 123, 100, 115, 116, 110, 126, 103, 136, 95, 146, 93, 149, 98, 150, 114, 150, 136, 150, 154, 150])); + cb("3", new Uint8Array([100, 62, 102, 62, 105, 62, 109, 62, 114, 62, 121, 62, 127, 62, 131, 62, 135, 62, 137, 63, 138, 66, 138, 68, 138, 70, 137, 72, 135, 74, 133, 77, 132, 79, 129, 81, 126, 84, 123, 86, 119, 86, 122, 90, 129, 93, 142, 101, 150, 107, 154, 117, 154, 126, 150, 135, 142, 142, 131, 147, 122, 150])); + cb("4", new Uint8Array([93, 61, 93, 63, 93, 68, 93, 75, 93, 84, 93, 93, 93, 101, 93, 113, 93, 126, 93, 137, 93, 144, 93, 149, 93, 151, 93, 154, 93, 156, 94, 157, 96, 157, 103, 157, 120, 157, 141, 157, 161, 157, 176, 157, 182, 157, 185, 157])); + cb("5", new Uint8Array([151, 57, 144, 55, 130, 55, 110, 56, 94, 59, 83, 61, 78, 69, 78, 78, 78, 86, 78, 93, 83, 100, 103, 103, 127, 106, 143, 114, 148, 128, 141, 142, 125, 152, 107, 159, 90, 162, 81, 163])); + cb("6", new Uint8Array([147, 35, 145, 35, 141, 36, 136, 38, 130, 42, 123, 47, 115, 51, 106, 57, 97, 64, 88, 73, 81, 82, 76, 89, 73, 95, 71, 101, 70, 108, 70, 114, 70, 118, 71, 124, 74, 131, 80, 137, 87, 140, 96, 143, 103, 143, 108, 141, 113, 138, 116, 134, 118, 127, 118, 120, 118, 114, 116, 107, 113, 103, 109, 100])); + cb("7", new Uint8Array([66, 69, 69, 69, 75, 67, 83, 66, 95, 66, 108, 63, 121, 61, 132, 61, 141, 61, 147, 61, 151, 61, 154, 61, 156, 61, 158, 61, 160, 61, 162, 61, 162, 63, 161, 67, 156, 85, 147, 112, 137, 135, 129, 151, 124, 158])); + cb("8", new Uint8Array([148, 59, 145, 55, 137, 52, 125, 52, 112, 52, 100, 54, 92, 56, 84, 60, 81, 66, 81, 76, 90, 82, 109, 90, 128, 98, 136, 106, 137, 121, 126, 140, 107, 151, 92, 151, 81, 143, 81, 122, 92, 94, 108, 75, 124, 65])); + cb("9", new Uint8Array([129, 72, 127, 72, 125, 72, 122, 72, 117, 72, 111, 72, 104, 74, 100, 77, 95, 79, 94, 81, 94, 83, 94, 87, 96, 90, 101, 92, 105, 94, 111, 94, 115, 94, 121, 92, 130, 89, 136, 85, 140, 82, 144, 79, 146, 79, 147, 83, 149, 97, 149, 118, 149, 135, 149, 149, 149, 158])); } cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); @@ -54,7 +54,7 @@ exports.getStrokes = function(mode, cb) { exports.input = function(options) { options = options||{}; - let input_mode = INPUT_MODE_ALPHA; + let input_mode = exports.INPUT_MODE_ALPHA; var text = options.text; if ("string"!=typeof text) text=""; @@ -72,6 +72,7 @@ exports.input = function(options) { var Ry2; let flashInterval; let shift = false; + let lastDrag; function findMarker(strArr) { if (strArr.length == 0) { @@ -140,6 +141,20 @@ exports.input = function(options) { }); } + function isInside(rect, e) { + return e.x>=rect.x && e.x=rect.y && e.y<=rect.y+rect.h; + } + + function isStrokeInAppRect(stroke, rect) { + for(let i=0; i < stroke.length; i+=2) { + if (!isInside(rect, {x: stroke[i], y: stroke[i+1]})) { + return false; + } + } + return true; + } + function strokeHandler(o) { //print(o); if (!flashInterval) @@ -147,13 +162,14 @@ exports.input = function(options) { flashToggle = !flashToggle; draw(false); }, 1000); - if (o.stroke!==undefined) { + if (o.stroke!==undefined && o.xy.length >= 6 && isStrokeInAppRect(o.xy, R)) { var ch = o.stroke; if (ch=="\b") text = text.slice(0,-1); else if (ch==="SHIFT") { shift=!shift; Bangle.drawWidgets(); } else text += shift ? ch.toUpperCase() : ch; - g.clearRect(R); } + lastDrag = undefined; + g.clearRect(R); flashToggle = true; draw(false); } @@ -161,7 +177,7 @@ exports.input = function(options) { // Switches between alphabetic and numeric input function cycleInput() { input_mode++; - if (input_mode > INPUT_MODE_NUM) input_mode = 0; + if (input_mode > exports.INPUT_MODE_NUM) input_mode = 0; shift = false; setupStrokes(); show(); @@ -181,26 +197,27 @@ exports.input = function(options) { g.reset(); g.setFont("6x8:2x3"); g.setColor("#f00"); - if (input_mode === INPUT_MODE_ALPHA) { + if (input_mode === exports.INPUT_MODE_ALPHA) { g.drawString(shift ? "ABC" : "abc", this.x, this.y); - } else if (input_mode === INPUT_MODE_NUM) { + } else if (input_mode === exports.INPUT_MODE_NUM) { g.drawString("123", this.x, this.y); } } }; return new Promise((resolve,reject) => { - var l;//last event Bangle.setUI({mode:"custom", drag:e=>{ "ram"; - if (l) g.reset().setColor("#f00").drawLine(l.x,l.y,e.x,e.y); - l = e.b ? e : 0; + if (isInside(R, e)) { + if (lastDrag) g.reset().setColor("#f00").drawLine(lastDrag.x,lastDrag.y,e.x,e.y); + lastDrag = e.b ? e : 0; + } },touch:(n,e) => { - if (WIDGETS.kbswipe && e.x>=WIDGETS.kbswipe.x && e.x=WIDGETS.kbswipe.y && e.y<=WIDGETS.kbswipe.y+24) { + if (WIDGETS.kbswipe && isInside({x: WIDGETS.kbswipe.x, y: WIDGETS.kbswipe.y, w: WIDGETS.kbswipe.width, h: 24}, e)) { // touch inside widget cycleInput(); - } else { + } else if (isInside(R, e)) { + // touch inside app area show(); } }, back:()=>{ From 2183b53524b0162fa4a692531a386687a630688a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 4 Dec 2022 11:46:12 +0100 Subject: [PATCH 175/342] kbswipe: Redo some patterns --- apps/kbswipe/lib.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index edc50817a..981dc80db 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -31,22 +31,22 @@ exports.getStrokes = function(mode, cb) { cb("t", new Uint8Array([45, 55, 48, 55, 55, 55, 72, 55, 96, 55, 120, 55, 136, 55, 147, 55, 152, 55, 155, 55, 157, 55, 158, 56, 158, 60, 156, 70, 154, 86, 151, 102, 150, 114, 148, 125, 148, 138, 148, 146])); cb("u", new Uint8Array([35, 52, 35, 59, 35, 73, 35, 90, 36, 114, 38, 133, 42, 146, 49, 153, 60, 157, 73, 158, 86, 156, 100, 152, 112, 144, 121, 131, 127, 114, 132, 97, 134, 85, 135, 73, 136, 61, 136, 56])); cb("v", new Uint8Array([36, 55, 37, 59, 40, 68, 45, 83, 51, 100, 58, 118, 64, 132, 69, 142, 71, 149, 73, 156, 76, 158, 77, 160, 77, 159, 80, 151, 82, 137, 84, 122, 86, 111, 90, 91, 91, 78, 91, 68, 91, 63, 92, 61, 97, 61, 111, 61, 132, 61, 150, 61, 162, 61])); - cb("w", new Uint8Array([33, 58, 34, 81, 39, 127, 44, 151, 48, 161, 52, 162, 57, 154, 61, 136, 65, 115, 70, 95, 76, 95, 93, 121, 110, 146, 119, 151, 130, 129, 138, 84, 140, 56, 140, 45])); + cb("w", new Uint8Array([25, 46, 25, 82, 25, 119, 33, 143, 43, 153, 60, 147, 73, 118, 75, 91, 76, 88, 85, 109, 96, 134, 107, 143, 118, 137, 129, 112, 134, 81, 134, 64, 134, 55])); cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); cb("SHIFT", new Uint8Array([100, 160, 100, 50])); } else if (mode === exports.INPUT_MODE_NUM) { - cb("0", new Uint8Array([127, 67, 125, 67, 121, 67, 111, 67, 98, 67, 83, 68, 72, 70, 64, 74, 58, 79, 54, 86, 51, 96, 50, 107, 50, 116, 50, 125, 53, 132, 59, 141, 66, 146, 75, 150, 93, 155, 112, 157, 132, 154, 147, 146, 158, 126, 160, 113, 159, 103, 155, 94, 149, 89, 142, 85])); + cb("0", new Uint8Array([82, 50, 76, 50, 67, 50, 59, 50, 50, 51, 43, 57, 38, 68, 34, 83, 33, 95, 33, 108, 34, 121, 42, 136, 57, 148, 72, 155, 85, 157, 98, 155, 110, 149, 120, 139, 128, 127, 134, 119, 137, 114, 138, 107, 138, 98, 138, 88, 138, 77, 137, 71, 134, 65, 128, 60, 123, 58])); cb("1", new Uint8Array([100, 50, 100, 160])); - cb("2", new Uint8Array([63, 80, 65, 78, 68, 75, 72, 71, 79, 67, 87, 62, 97, 59, 106, 58, 115, 58, 122, 58, 126, 61, 128, 66, 129, 72, 127, 84, 123, 100, 115, 116, 110, 126, 103, 136, 95, 146, 93, 149, 98, 150, 114, 150, 136, 150, 154, 150])); - cb("3", new Uint8Array([100, 62, 102, 62, 105, 62, 109, 62, 114, 62, 121, 62, 127, 62, 131, 62, 135, 62, 137, 63, 138, 66, 138, 68, 138, 70, 137, 72, 135, 74, 133, 77, 132, 79, 129, 81, 126, 84, 123, 86, 119, 86, 122, 90, 129, 93, 142, 101, 150, 107, 154, 117, 154, 126, 150, 135, 142, 142, 131, 147, 122, 150])); - cb("4", new Uint8Array([93, 61, 93, 63, 93, 68, 93, 75, 93, 84, 93, 93, 93, 101, 93, 113, 93, 126, 93, 137, 93, 144, 93, 149, 93, 151, 93, 154, 93, 156, 94, 157, 96, 157, 103, 157, 120, 157, 141, 157, 161, 157, 176, 157, 182, 157, 185, 157])); - cb("5", new Uint8Array([151, 57, 144, 55, 130, 55, 110, 56, 94, 59, 83, 61, 78, 69, 78, 78, 78, 86, 78, 93, 83, 100, 103, 103, 127, 106, 143, 114, 148, 128, 141, 142, 125, 152, 107, 159, 90, 162, 81, 163])); - cb("6", new Uint8Array([147, 35, 145, 35, 141, 36, 136, 38, 130, 42, 123, 47, 115, 51, 106, 57, 97, 64, 88, 73, 81, 82, 76, 89, 73, 95, 71, 101, 70, 108, 70, 114, 70, 118, 71, 124, 74, 131, 80, 137, 87, 140, 96, 143, 103, 143, 108, 141, 113, 138, 116, 134, 118, 127, 118, 120, 118, 114, 116, 107, 113, 103, 109, 100])); - cb("7", new Uint8Array([66, 69, 69, 69, 75, 67, 83, 66, 95, 66, 108, 63, 121, 61, 132, 61, 141, 61, 147, 61, 151, 61, 154, 61, 156, 61, 158, 61, 160, 61, 162, 61, 162, 63, 161, 67, 156, 85, 147, 112, 137, 135, 129, 151, 124, 158])); - cb("8", new Uint8Array([148, 59, 145, 55, 137, 52, 125, 52, 112, 52, 100, 54, 92, 56, 84, 60, 81, 66, 81, 76, 90, 82, 109, 90, 128, 98, 136, 106, 137, 121, 126, 140, 107, 151, 92, 151, 81, 143, 81, 122, 92, 94, 108, 75, 124, 65])); - cb("9", new Uint8Array([129, 72, 127, 72, 125, 72, 122, 72, 117, 72, 111, 72, 104, 74, 100, 77, 95, 79, 94, 81, 94, 83, 94, 87, 96, 90, 101, 92, 105, 94, 111, 94, 115, 94, 121, 92, 130, 89, 136, 85, 140, 82, 144, 79, 146, 79, 147, 83, 149, 97, 149, 118, 149, 135, 149, 149, 149, 158])); + cb("2", new Uint8Array([40, 88, 40, 83, 40, 76, 43, 71, 47, 64, 55, 59, 64, 55, 73, 50, 80, 47, 91, 44, 104, 44, 117, 45, 128, 50, 135, 57, 142, 63, 145, 74, 145, 84, 140, 94, 129, 112, 108, 133, 87, 149, 71, 159, 58, 165, 52, 169, 55, 169, 63, 169, 77, 169, 89, 169, 100, 169, 110, 169, 116, 169])); + cb("3", new Uint8Array([52, 58, 65, 49, 83, 42, 100, 42, 118, 47, 136, 58, 143, 71, 135, 88, 125, 99, 114, 101, 119, 101, 132, 110, 142, 121, 145, 137, 139, 152, 122, 164, 106, 168, 92, 168, 74, 168, 55, 168])); + cb("4", new Uint8Array([37, 58, 37, 60, 37, 64, 37, 69, 37, 75, 37, 86, 37, 96, 37, 105, 37, 112, 37, 117, 37, 122, 37, 126, 37, 128, 38, 129, 40, 129, 45, 129, 48, 129, 53, 129, 67, 129, 85, 129, 104, 129, 119, 129, 129, 129, 136, 129])); + cb("5", new Uint8Array([142, 60, 119, 60, 79, 60, 45, 60, 37, 64, 37, 86, 37, 103, 47, 107, 66, 106, 81, 103, 97, 103, 116, 103, 129, 108, 131, 130, 122, 152, 101, 168, 85, 172, 70, 172, 59, 172])); + cb("6", new Uint8Array([128, 56, 110, 56, 81, 56, 58, 61, 47, 77, 41, 101, 41, 123, 41, 154, 50, 168, 71, 169, 98, 169, 123, 161, 131, 141, 129, 124, 117, 117, 102, 117, 92, 117, 85, 118, 77, 125])); + cb("7", new Uint8Array([47, 38, 48, 38, 53, 38, 66, 38, 85, 38, 103, 38, 117, 38, 125, 38, 129, 38, 134, 41, 135, 47, 135, 54, 135, 66, 131, 93, 124, 126, 116, 149, 109, 161, 105, 168])); + cb("8", new Uint8Array([122, 61, 102, 61, 83, 61, 60, 61, 47, 62, 45, 78, 58, 99, 84, 112, 105, 122, 118, 134, 121, 149, 113, 165, 86, 171, 59, 171, 47, 164, 45, 144, 50, 132, 57, 125, 67, 117, 78, 109, 87, 102, 96, 94, 105, 86, 113, 85])); + cb("9", new Uint8Array([122, 58, 117, 55, 112, 51, 104, 51, 95, 51, 86, 51, 77, 51, 68, 51, 60, 51, 54, 56, 47, 64, 46, 77, 46, 89, 46, 96, 51, 103, 64, 109, 74, 110, 83, 110, 94, 107, 106, 102, 116, 94, 124, 84, 127, 79, 128, 78, 128, 94, 128, 123, 128, 161, 128, 175])); } cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); @@ -146,7 +146,7 @@ exports.input = function(options) { && e.y>=rect.y && e.y<=rect.y+rect.h; } - function isStrokeInAppRect(stroke, rect) { + function isStrokeInside(rect, stroke) { for(let i=0; i < stroke.length; i+=2) { if (!isInside(rect, {x: stroke[i], y: stroke[i+1]})) { return false; @@ -162,7 +162,7 @@ exports.input = function(options) { flashToggle = !flashToggle; draw(false); }, 1000); - if (o.stroke!==undefined && o.xy.length >= 6 && isStrokeInAppRect(o.xy, R)) { + if (o.stroke!==undefined && o.xy.length >= 6 && isStrokeInside(R, o.xy)) { var ch = o.stroke; if (ch=="\b") text = text.slice(0,-1); else if (ch==="SHIFT") { shift=!shift; Bangle.drawWidgets(); } From 999e47a55012040ac390de81908e1daefc5c6acf Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 4 Dec 2022 14:24:45 +0000 Subject: [PATCH 176/342] Updted slopeclkpp README --- apps/slopeclockpp/ChangeLog | 1 + apps/slopeclockpp/README.md | 2 ++ apps/slopeclockpp/metadata.json | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/slopeclockpp/ChangeLog b/apps/slopeclockpp/ChangeLog index 9ae4ccc96..eef1840ea 100644 --- a/apps/slopeclockpp/ChangeLog +++ b/apps/slopeclockpp/ChangeLog @@ -6,3 +6,4 @@ Allowed black/white background (as that can look nice too) 0.05: Images in clkinfo are optional now 0.06: Added support for locale based time +0.07: README file update as UI interaction was not easy to understand diff --git a/apps/slopeclockpp/README.md b/apps/slopeclockpp/README.md index 9352db685..8aad8467b 100644 --- a/apps/slopeclockpp/README.md +++ b/apps/slopeclockpp/README.md @@ -10,6 +10,8 @@ to change (top right or bottom left). It should change color showing it is selected. * Swipe up or down to cycle through the info screens that can be displayed + when you have finnised tap again towards the centre of the screen to unselect. + * Swipe left or right to change the type of info screens displayed (by default there is only one type of data so this will have no effect) diff --git a/apps/slopeclockpp/metadata.json b/apps/slopeclockpp/metadata.json index bebed4b71..3243d389a 100644 --- a/apps/slopeclockpp/metadata.json +++ b/apps/slopeclockpp/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockpp", "name": "Slope Clock ++", - "version":"0.06", + "version":"0.07", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From fa70e5354c6df1485b546900123022c2a5a930a4 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 4 Dec 2022 16:42:24 +0100 Subject: [PATCH 177/342] aiclock -- support clkinfo module and updated icons of some clkinfos... --- apps/aiclock/ChangeLog | 1 + apps/aiclock/README.md | 4 +- apps/aiclock/aiclock.app.js | 285 +++++++++++++++++++++++++++++++----- apps/aiclock/impl.png | Bin 2743 -> 2597 bytes apps/aiclock/impl_2.png | Bin 0 -> 2459 bytes apps/aiclock/impl_3.png | Bin 0 -> 2487 bytes apps/aiclock/metadata.json | 6 +- apps/ha/ChangeLog | 3 +- apps/ha/ha.clkinfo.js | 2 +- apps/ha/metadata.json | 2 +- apps/smpltmr/ChangeLog | 3 +- apps/smpltmr/clkinfo.js | 3 +- apps/smpltmr/metadata.json | 2 +- apps/weather/ChangeLog | 1 + apps/weather/clkinfo.js | 2 +- apps/weather/metadata.json | 2 +- core | 2 +- modules/clock_info.js | 2 +- 18 files changed, 270 insertions(+), 50 deletions(-) create mode 100644 apps/aiclock/impl_2.png create mode 100644 apps/aiclock/impl_3.png diff --git a/apps/aiclock/ChangeLog b/apps/aiclock/ChangeLog index 96b389f6e..fb5aed3e3 100644 --- a/apps/aiclock/ChangeLog +++ b/apps/aiclock/ChangeLog @@ -2,3 +2,4 @@ 0.02: Design improvements and fixes. 0.03: Indicate battery level through line occurrence. 0.04: Use widget_utils module. +0.05: Support for clkinfo. \ No newline at end of file diff --git a/apps/aiclock/README.md b/apps/aiclock/README.md index 9e23de3a6..31dd5aa29 100644 --- a/apps/aiclock/README.md +++ b/apps/aiclock/README.md @@ -10,7 +10,9 @@ The original output of stable diffusion is shown here: My implementation is shown below. Note that horizontal lines occur randomly, but the probability is correlated with the battery level. So if your screen contains only -a few lines its time to charge your bangle again ;) +a few lines its time to charge your bangle again ;) Also note that the upper text +implementes the clkinfo module and can be configured via touch left/right/up/down. +Touch at the center to trigger the selected action. ![](impl.png) diff --git a/apps/aiclock/aiclock.app.js b/apps/aiclock/aiclock.app.js index 5d4e98fcd..b5bb30b9d 100644 --- a/apps/aiclock/aiclock.app.js +++ b/apps/aiclock/aiclock.app.js @@ -1,6 +1,14 @@ -/** +/************************************************ * AI Clock */ + const storage = require('Storage'); + const clock_info = require("clock_info"); + + + + /************************************************ + * Assets + */ require("Font7x11Numeric7Seg").add(Graphics); Graphics.prototype.setFontGochiHand = function(scale) { // Actual height 27 (29 - 3) @@ -13,7 +21,7 @@ Graphics.prototype.setFontGochiHand = function(scale) { return this; } -/* +/************************************************ * Set some important constants such as width, height and center */ var W = g.getWidth(),R=W/2; @@ -21,6 +29,120 @@ var H = g.getHeight(); var cx = W/2; var cy = H/2; var drawTimeout; +var lock_input = false; + + +/************************************************ + * SETTINGS + */ +const SETTINGS_FILE = "aiclock.setting.json"; +let settings = { + menuPosX: 0, + menuPosY: 0, +}; +let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; +for (const key in saved_settings) { + settings[key] = saved_settings[key] +} + + +/************************************************ + * Menu + */ +function getDate(){ + var date = new Date(); + return ("0"+date.getDate()).substr(-2) + "/" + ("0"+(date.getMonth()+1)).substr(-2) +} + + +// Custom clockItems menu - therefore, its added here and not in a clkinfo.js file. +var clockItems = { + name: getDate(), + img: null, + items: [ + { name: "Week", + get: () => ({ text: "Week " + weekOfYear(), img: null}), + show: function() { clockItems.items[0].emit("redraw"); }, + hide: function () {} + }, + ] + }; + +function weekOfYear() { + var date = new Date(); + date.setHours(0, 0, 0, 0); + // Thursday in current week decides the year. + date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7); + // January 4 is always in week 1. + var week1 = new Date(date.getFullYear(), 0, 4); + // Adjust to Thursday in week 1 and count number of weeks from date to week1. + return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 + - 3 + (week1.getDay() + 6) % 7) / 7); +} + + + +// Load menu +var menu = clock_info.load(); +menu = menu.concat(clockItems); + + + // Ensure that our settings are still in range (e.g. app uninstall). Otherwise reset the position it. + if(settings.menuPosX >= menu.length || settings.menuPosY > menu[settings.menuPosX].items.length ){ + settings.menuPosX = 0; + settings.menuPosY = 0; + } + + // Set draw functions for each item + menu.forEach((menuItm, x) => { + menuItm.items.forEach((item, y) => { + function drawItem() { + // For the clock, we have a special case, as we don't wanna redraw + // immediately when something changes. Instead, we update data each minute + // to save some battery etc. Therefore, we hide (and disable the listener) + // immedeately after redraw... + item.hide(); + + // After drawing the item, we enable inputs again... + lock_input = false; + + var info = item.get(); + drawMenuItem(info.text, info.img); + } + + item.on('redraw', drawItem); + }) + }); + + + function canRunMenuItem(){ + if(settings.menuPosY == 0){ + return false; + } + + var menuEntry = menu[settings.menuPosX]; + var item = menuEntry.items[settings.menuPosY-1]; + return item.run !== undefined; + } + + + function runMenuItem(){ + if(settings.menuPosY == 0){ + return; + } + + var menuEntry = menu[settings.menuPosX]; + var item = menuEntry.items[settings.menuPosY-1]; + try{ + var ret = item.run(); + if(ret){ + Bangle.buzz(300, 0.6); + } + } catch (ex) { + // Simply ignore it... + } + } + /* * Based on the great multi clock from https://github.com/jeffmer/BangleApps/ @@ -76,7 +198,50 @@ function toAngle(a){ return a } + +function drawMenuItem(text, image){ + if(text == null){ + drawTime(); + return + } + // image = atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA=="); + + text = String(text); + + g.reset().setBgColor("#fff").setColor("#000"); + g.setFontAlign(0,0); + g.setFont("Vector", 20); + + var imgWidth = image == null ? 0 : 24; + var strWidth = g.stringWidth(text); + var strHeight = text.split('\n').length > 1 ? 40 : Math.max(24, imgWidth+2); + var w = imgWidth + strWidth; + + g.clearRect(cx-w/2-8, 40-strHeight/2-1, cx+w/2+4, 40+strHeight/2) + + // Draw right line as designed by stable diffusion + g.drawLine(cx+w/2+5, 40-strHeight/2-1, cx+w/2+5, 40+strHeight/2); + g.drawLine(cx+w/2+6, 40-strHeight/2-1, cx+w/2+6, 40+strHeight/2); + g.drawLine(cx+w/2+7, 40-strHeight/2-1, cx+w/2+7, 40+strHeight/2); + + // And finally the text + g.drawString(text, cx+imgWidth/2, 42); + g.drawString(text, cx+1+imgWidth/2, 41); + + if(image != null) { + var scale = image.width ? imgWidth / image.width : 1; + g.drawImage(image, W/2 + -strWidth/2-4 - parseInt(imgWidth/2), 41-12, {scale: scale}); + } + + drawTime(); +} + + function drawTime(){ + // Draw digital time first + drawDigits(); + + // And now the analog time var drawHourHand = g.drawRotRect.bind(g,8,12,R-38); var drawMinuteHand = g.drawRotRect.bind(g,6,12,R-12 ); @@ -90,13 +255,6 @@ function drawTime(){ h += date.getMinutes()/60.0; h = parseInt(h*360/12); - // Draw minute and hour bg - g.setColor(g.theme.bg); - drawHourHand(toAngle(h-3)); - drawHourHand(toAngle(h+3)); - drawMinuteHand(toAngle(m-2)); - drawMinuteHand(toAngle(m+3)); - // Draw minute and hour fg g.setColor(g.theme.fg); drawHourHand(h); @@ -104,28 +262,6 @@ function drawTime(){ } - -function drawDate(){ - var date = new Date(); - g.setFontAlign(0,0); - g.setFontGochiHand(); - - var text = ("0"+date.getDate()).substr(-2) + "/" + ("0"+(date.getMonth()+1)).substr(-2); - var w = g.stringWidth(text); - g.setColor(g.theme.bg); - g.fillRect(cx-w/2-4, 20, cx+w/2+4, 40+12); - - g.setColor(g.theme.fg); - // Draw right line as designed by stable diffusion - g.drawLine(cx+w/2+5, 20, cx+w/2+5, 40+12); - g.drawLine(cx+w/2+6, 20, cx+w/2+6, 40+12); - g.drawLine(cx+w/2+7, 20, cx+w/2+7, 40+12); - - // And finally the text - g.drawString(text, cx, 40); -} - - function drawDigits(){ var date = new Date(); @@ -156,20 +292,35 @@ function drawDigits(){ } +function drawDate(){ + var menuEntry = menu[settings.menuPosX]; + + // The first entry is the overview... + if(settings.menuPosY == 0){ + drawMenuItem(menuEntry.name, menuEntry.img); + return; + } + + // Draw item if needed + lock_input = true; + var item = menuEntry.items[settings.menuPosY-1]; + item.show(); +} + + + + function draw(){ // Queue draw in one minute queueDraw(); - g.reset(); g.clearRect(0, 0, g.getWidth(), g.getHeight()); - g.setColor(1,1,1); + drawBackground(); drawDate(); - drawDigits(); - drawTime(); drawCircle(Bangle.isLocked()); } @@ -190,6 +341,68 @@ Bangle.on('lock', function(isLocked) { drawCircle(isLocked); }); +Bangle.on('touch', function(btn, e){ + var left = parseInt(g.getWidth() * 0.22); + var right = g.getWidth() - left; + var upper = parseInt(g.getHeight() * 0.22); + var lower = g.getHeight() - upper; + + var is_upper = e.y < upper; + var is_lower = e.y > lower; + var is_left = e.x < left && !is_upper && !is_lower; + var is_right = e.x > right && !is_upper && !is_lower; + var is_center = !is_upper && !is_lower && !is_left && !is_right; + + if(lock_input){ + return; + } + + if(is_lower){ + Bangle.buzz(40, 0.6); + settings.menuPosY = (settings.menuPosY+1) % (menu[settings.menuPosX].items.length+1); + + draw(); + } + + if(is_upper){ + Bangle.buzz(40, 0.6); + settings.menuPosY = settings.menuPosY-1; + settings.menuPosY = settings.menuPosY < 0 ? menu[settings.menuPosX].items.length : settings.menuPosY; + + draw(); + } + + if(is_right){ + Bangle.buzz(40, 0.6); + settings.menuPosX = (settings.menuPosX+1) % menu.length; + settings.menuPosY = 0; + draw(); + } + + if(is_left){ + Bangle.buzz(40, 0.6); + settings.menuPosY = 0; + settings.menuPosX = settings.menuPosX-1; + settings.menuPosX = settings.menuPosX < 0 ? menu.length-1 : settings.menuPosX; + draw(); + } + + if(is_center){ + if(canRunMenuItem()){ + runMenuItem(); + } + } +}); + + +E.on("kill", function(){ + try{ + storage.write(SETTINGS_FILE, settings); + } catch(ex){ + // If this fails, we still kill the app... + } +}); + /* * Some helpers @@ -203,7 +416,6 @@ function queueDraw() { } - /* * Lets start widgets, listen for btn etc. */ @@ -216,6 +428,7 @@ Bangle.loadWidgets(); * area to the top bar doesn't get cleared. */ require('widget_utils').hide(); + // Clear the screen once, at startup and draw clock g.setTheme({bg:"#fff",fg:"#000",dark:false}).clear(); draw(); diff --git a/apps/aiclock/impl.png b/apps/aiclock/impl.png index 92374b68059bb87f00feb41525d8b6dcb9d91c87..8a9e43e2deabf9a80b9cc59b763db5bf3bf15a47 100644 GIT binary patch delta 2576 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 delta 2723 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 literal 0 HcmV?d00001 diff --git a/apps/aiclock/impl_3.png b/apps/aiclock/impl_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a036d14b24b0ac1cc982f108f92039254b97f9 GIT binary patch literal 2487 zcmai0X*AUP8~@IX8QG9x(IOhMg~=AlGJ`BB{O6u?-`yAg=bUGG^Ld_go;}gh!dOgrzc2tm%+$olny;Dv z@GcZzR@6?p@D(h?+Sm}3cgfEJAQWV3WMD&fS)j9ni_VA|-P_suGLkbwSAFyR$uIW} zs=8Tz{)z`mejG~v{T?@;Pa4|~^sSIASlyG5qODQ@5QbNgpzi7Q!xGSOOGg;M_#b?Y zI4+ug1yIa}jhBHaqF8!kdvkN*{DrF`>lO->^|hAhRp7*FZ5APlHP!BXE)^VGmRWQL zfV&X${VS}lDLzUTKv6$jS&;w}FwQ{&9%nnVLV@y@P)CA+|3bdY6#NInL~&m2aJhCZ zn>*dAXa5qS!0MjDfzwC4>vAYD-(|MI?$mqbi^P;IcUW^Gh(|CNPbv>1;&7vE>K3Z~p^l6Q~p_5!pN4Rwqt2*S#aTZsKvvIN` zQ-GXt&@UKS;JK}qpy$kaGrMc-*x7(4WZ*N4;kTr0?I4*r4rYGgit>u<^C@S%6Jt(K z)<7D9ZA>w2JUR-HoCZ)fsX+NqPZJ<#eoA{7Zqj{XY}b(Q$P$KV5Qc0bk=o7-;4Wdi zLY8#VjW5rQn0ZK>W4lgt#hzcdl~>H}v@d0;b-?PrtGoL=t`QX=nms(-Q46aZh>xn> zIvK$bAHW>t?BrFZ^j{YyMgQ*QY!mX==DZpK=4Xm4{ZS*Egba*odRIsqCsV(*6Cyoz zSieAe`gkE;#&=NWx_{WOkgk`QKRR)CRgyH{lO`@d`{?Vj zK7c#bc)$&WXDw;$rOC&F@A(dl)? z$W!RF3pYwFxqDB}1k)*2agcLpbetPEEm7AK1DC2~DMy56b5Rs}>}o5FeD|-e ztM-T} z$TLItve--1^h`7yg84GG2(0*B3H#;Ykk$CL4U4Q%!4^3%KQK><>x)?utsG6IG=92{+}CvX?{u`+MpD8Uk1jYqKvb$|1K%^FQZGePf*fFE zrxy?9C}b0s22kh?AfGZz)D#+u-`9JGEy3>!i38AV$6hd|xwUVL$@g|pYm6M(|Ki3; zFjz6fP#(EMz zk5)em&i?uMdN552_+7rM3s3lgVpH$E_+fFUxUJp_I0=l|<>>z$Py;S}OAfcKAr3GC zfsZiJO$T%%#zCMarCMJULOy?eH~5xw;wjKVvye-USk_8^cq2gk(m6l+C&Hyu_;-Q} zGLXh|7fnt}MOl3hi3#Df zgK3kV3KNT84)5Nh3j2w2TcejY6GloBkzsNahT+Fa_1q4^-=uPvpMH}{vgy`IN4oQ_ z*=MQk_+MYjO6$l*fV%VA{RZ zk1oEggUq4`j4I|OT^Q2H3sN+mGiyPm;)}U(W)GFYs5(XlI+0h!Qlt0_dQoe6f@qm~ z_C+5?6uSAwZVt*v>GV+V;BYiO;CD2%H|PvgrK~Tp7m>SVdjh?&zb#FCWKkuTZVIz+ zv{_8NxTAX7Q44Kv*VQ<01r2oLWwI5BXL!x%K}U(lT&R?l__m*FE15TPS#PfFBInX{ zC!ROOr8aA~apE6!ooql|>n@xQNk$O+)Qv|jqX*L_0-gvblQ@4g5~sop4qf*X_UcKU31U&$<_ioG|f#2dMKr6#(3>Jb9>`?pYzyRp@8 zmc1n?9=hR~Sw0S18Ev{F=`DRccw~5KQA?G8|N1hf7LyrK){vqF*K+qq_NXaVwOp(z zK0G1BKdVWN!R9+Ei{-7^By$*l^zX2L<&{GH5<$l;U16Y{JKir1c>QYw8VZ!TsJbvD zXnMA_nj|>3sc_911_JzJwkBY8tlI=T01<{=Tgd+h@;oMQ+ka;FxJo$x69cB_EsV+y HiLw6!gEO)t literal 0 HcmV?d00001 diff --git a/apps/aiclock/metadata.json b/apps/aiclock/metadata.json index 0da23e8ca..1c3c68609 100644 --- a/apps/aiclock/metadata.json +++ b/apps/aiclock/metadata.json @@ -3,7 +3,7 @@ "name": "AI Clock", "shortName":"AI Clock", "icon": "aiclock.png", - "version":"0.04", + "version":"0.05", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "A watch face that was designed by an AI (stable diffusion) and implemented by a human.", @@ -11,7 +11,9 @@ "tags": "clock", "screenshots": [ {"url":"orig.png"}, - {"url":"impl.png"} + {"url":"impl.png"}, + {"url":"impl_2.png"}, + {"url":"impl_3.png"}, ], "storage": [ {"name":"aiclock.app.js","url":"aiclock.app.js"}, diff --git a/apps/ha/ChangeLog b/apps/ha/ChangeLog index a4865be3f..f9ca3c16d 100644 --- a/apps/ha/ChangeLog +++ b/apps/ha/ChangeLog @@ -2,4 +2,5 @@ 0.02: Includeas the ha.lib.js library that can be used by other apps or clocks. 0.03: Added clkinfo for clocks. 0.04: Feedback if clkinfo run is called. -0.05: Clkinfo improvements. \ No newline at end of file +0.05: Clkinfo improvements. +0.06: Updated clkinfo icon. \ No newline at end of file diff --git a/apps/ha/ha.clkinfo.js b/apps/ha/ha.clkinfo.js index 1b1e468d7..d6a0f72a0 100644 --- a/apps/ha/ha.clkinfo.js +++ b/apps/ha/ha.clkinfo.js @@ -4,7 +4,7 @@ var haItems = { name: "Home", - img: atob("GBiBAf/////////n///D//+B//8A//48T/wkD/gkD/A8D+AYB8AYA4eZ4QyZMOyZN+fb5+D/B+B+B+A8B+AYB+AYB+AYB+AYB+A8Bw=="), + img: atob("GBiBAAAAAAAAAAAAAAAYAAA+AAB+AADD4AHb4APD4Afn8A/n+BxmOD0mnA0ksAwAMA+B8A/D8A/n8A/n8A/n8A/n8AAAAAAAAAAAAA=="), items: [] }; diff --git a/apps/ha/metadata.json b/apps/ha/metadata.json index fad052544..089450f55 100644 --- a/apps/ha/metadata.json +++ b/apps/ha/metadata.json @@ -1,7 +1,7 @@ { "id": "ha", "name": "HomeAssistant", - "version": "0.05", + "version": "0.06", "description": "Integrates your BangleJS into HomeAssistant.", "icon": "ha.png", "type": "app", diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog index b09100f50..805e8546f 100644 --- a/apps/smpltmr/ChangeLog +++ b/apps/smpltmr/ChangeLog @@ -1,4 +1,5 @@ 0.01: Release 0.02: Rewrite with new interface 0.03: Added clock infos to expose timer functionality to clocks. -0.04: Improvements of clock infos. \ No newline at end of file +0.04: Improvements of clock infos. +0.05: Updated clkinfo icon. \ No newline at end of file diff --git a/apps/smpltmr/clkinfo.js b/apps/smpltmr/clkinfo.js index 1a63a9b7e..c16e6127e 100644 --- a/apps/smpltmr/clkinfo.js +++ b/apps/smpltmr/clkinfo.js @@ -63,10 +63,9 @@ } 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, + img: atob("GBiBAAB+AAB+AAAYAAAYAAB+AA3/sA+B8A4AcAwMMBgPGBgPmDAPjDAPzDAPzDP/zDP/zDH/jBn/mBj/GAw8MA4AcAeB4AH/gAB+AA=="), items: [ { name: null, diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index ce526d1ba..2191902de 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.04", + "version": "0.05", "description": "A very simple app to start a timer.", "icon": "app.png", "tags": "tool,alarm,timer,clkinfo", diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index aefb903b9..1b6c1b9b5 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -17,3 +17,4 @@ 0.18: Added hasRange to clkinfo. 0.19: Added weather condition to clkinfo. 0.20: Added weather condition with temperature to clkinfo. +0.21: Updated clkinfo icon. \ No newline at end of file diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 339ff39c3..3cdd31c59 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -28,7 +28,7 @@ //FIXME ranges are somehow arbitrary var weatherItems = { name: "Weather", - img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="), + img: atob("GBiBAABAAARGAAYEAADgACP4wDf8gAf+AA/+AE/4AG/jwA/v4A8P8AR/8DH/8AH//AP//g///g///g///gf//AAAAABkwABMgABMgA=="), items: [ { name: "conditionWithTemperature", diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index dd8b6c293..500eac012 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.20", + "version": "0.21", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], diff --git a/core b/core index 3a953179b..764197500 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 3a953179b7bb9f574d4e77d5f34b6b7deee1e884 +Subproject commit 76419750083a88ee7a569db3975ae1bdd6dc155a diff --git a/modules/clock_info.js b/modules/clock_info.js index 238888b1c..50968311e 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -77,7 +77,7 @@ exports.load = function() { // actual menu var menu = [{ name: "Bangle", - img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="), + img: atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA=="), items: [ { name : "Battery", hasRange : true, From 3673a0d7cf33eea9efc9d14e2eb701e8b16afb98 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 4 Dec 2022 16:43:41 +0100 Subject: [PATCH 178/342] Fixed json file --- apps/aiclock/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/aiclock/metadata.json b/apps/aiclock/metadata.json index 1c3c68609..1dcda427f 100644 --- a/apps/aiclock/metadata.json +++ b/apps/aiclock/metadata.json @@ -13,7 +13,7 @@ {"url":"orig.png"}, {"url":"impl.png"}, {"url":"impl_2.png"}, - {"url":"impl_3.png"}, + {"url":"impl_3.png"} ], "storage": [ {"name":"aiclock.app.js","url":"aiclock.app.js"}, From 8016e8ec5333ec8fe5ef4b8ea95b4a7428513bf6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Fri, 2 Dec 2022 23:53:32 +0100 Subject: [PATCH 179/342] bthrm - Correctly handle 0 values --- apps/bthrm/bthrm.js | 6 +++--- apps/bthrm/metadata.json | 1 + apps/bthrm/screen.png | Bin 0 -> 3702 bytes 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 apps/bthrm/screen.png diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index e163dd8b7..b07e7bd37 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -93,11 +93,11 @@ function draw(){ if (bt && bt.time > (now - VALUE_TIMEOUT)) { layout.bt.label = bt.bpm; - if (bt.battery) layout.btBattery.label = bt.battery; + if (!isNaN(bt.battery)) layout.btBattery.label = bt.battery + "%"; if (bt.rr) layout.btRR.label = bt.rr.join(","); - if (bt.location) layout.btLocation.label = BODY_LOCS[bt.location]; + if (!isNaN(bt.location)) layout.btLocation.label = BODY_LOCS[bt.location]; if (bt.contact !== undefined) layout.btContact.label = bt.contact ? "Yes":"No"; - if (bt.energy) layout.btEnergy.label = bt.energy.toFixed(0) + "kJ"; + if (!isNaN(bt.energy)) layout.btEnergy.label = bt.energy.toFixed(0) + "kJ"; } else { layout.bt.label = "--"; layout.btBattery.label = "--"; diff --git a/apps/bthrm/metadata.json b/apps/bthrm/metadata.json index 0977fd755..fea274ff3 100644 --- a/apps/bthrm/metadata.json +++ b/apps/bthrm/metadata.json @@ -5,6 +5,7 @@ "version": "0.17", "description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.", "icon": "app.png", + "screenshots": [{"url":"screen.png"}], "type": "app", "tags": "health,bluetooth,hrm,bthrm", "supports": ["BANGLEJS","BANGLEJS2"], diff --git a/apps/bthrm/screen.png b/apps/bthrm/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6b8522758de6d8a330fbe6184b59517f74360a GIT binary patch literal 3702 zcmaJ^c{CJy^#9IgBunGj-=L64+En%>&0;BQcE+^YvJRpNgJhZTo`?uBNn-HBXw+cH zDi~!pWhNn64Jr}WRpn>5n=iJ+@7y?RVNrK{b!)V86+eNzp7PKEf%`Y~1L@)h)H7=N z>OKc{opC=@zTJ|`Yf|T2ka*LrcX9(p+{r^__>}86jg((F`i_1zH^AqHLaktG_hrbP z)^Dhvu`mYNOc108D52RMK0rY6q!w=qCA`#=5-&fNWzokLV=w}&!*!CO0Z3Bq&5Zjk z+XxQHL>vn}3Fmd@<3LBNg}i$rNt66*Sf9GCWG= zE3%#AXuC)$Z|*Su8vtMWb6O@Y9O*4C!o{61Msr z1@NvJf#j?gS6)Z%4mNg;0@wGpxgR@YzsDUb(D`dv1dP%hn>h$@$h61nS4E6p$rZWY zKsbV}9c(P64H56zf-TaGfFnHVGkan8 zfWNj+d_=T&!VQN*v^`M#haZ253c#lK-tP6bynD^45bcKXMFs(*VwAK}Xm(_URl3OOib0p>?HXF#LOB|4nYFt7A${^KGUbvxUQ8m{=t@>3LReD zwAlFTn)xcz{~Cg_;6Fl5+;ls6IQE8ry#9~;+i&Na?AIo}jdJ14Ox@%;NbltBJjStUp3&oX5*ic6g-?XAPHBMEuoIq)Kw4>X5*Orh5q#DdeI51r{qr{?m7 zmm{a1h3Ovz8;3kTx};8HcDU$p`rD940j=bn8rugZ9 zhIXqWn2wfa#-GL6WvMy&){H@VBw4_UZ;r8;Jy%%S77)gZ-0lc%HG%q|R5+`;fMUrI z)r%6sx@-uD9E9h@^xO#~rJXq%vT8$Nc-JoXJ<_Y)wKDmWKvmnZME;O=cgsX6F;S4v zEH!^JIZ9$Tw2-tzGD`n znH7jiFfvzALo_P#2uhU2t_NWy7l2ywYSd0pzq9&flMs+^%}+QT)=Y}Wlh_Jx$+^QEDb0j+wiV_ z3W7SFy9Ia5ic^q(ZtbT)zNXsBpFXrBLM$+@<+>WnKV~D#Eu&yARYZZw94V7o83r)k z3@o_+KAK%yc}T$UO?t8N35YQRD08J)T}psVIEAwyB5@1EjIQ-sSN)4V+-_hjCU`$9 zl$R6+>pE?x&;JDVi1C9VIY4RYOLrB|XfG&3L@Yl!Qfyk;7He+U!Kusx_+%&>{B%bg z{m$>bQMprl#E?6^KY|P|OIyuDqKp*tUbpk5BQ8Y}eG;~pnV{ZfjfMOncrR3*Kb5SE zsQZz*W9f~6sVH%A`@A&EHFseZB@K}ddTalD{@W@_jvc*TbvW4BK-PILeq?ZBaAZbG zOL!Dd?PO3rKZ&j}Mo&&;vz&&}6So^e;@euC)F2T!`4pHIv~l0s{WBd< zJmfSjL-G1T$92Pdrq;)T$$bHQ=ifinr?#xgay^NrBm4hwPrN+U6&+%x_}tup%1$(6 zOP#N68GrVo#5&O0zGjC<*}S8Gn|!+j7CP8}RVMbk4)U+*g^X(xw^X;l2Lg$D~(v|F}`pEQn||++4Ag4PwY? zKpSIwl_9%*j)HsiCE`|@2|fQ=YfD#&{o7+SL*wrvuHbBXIQ1TK?O5jY%VJ1XU*PlC z|GwbpG^!HU9_)ME^29+W`%}ARup*aFV@CqAqPSHDk~v2Ek7oqkbYK00YkeL9B??|3 zl)?XUxo|@g(F#MC-Vnu}u5xdn9|a;m1_+r3N)CoAUwOGsrON6HZYXAlVx5A zjT0@2#p!9>32_ag(9#c_Rf#%R^KShJ7{q1V(VRo7}$^ zOX2I8U+%Dm0G2g&IkE(*&2FCf5o++9jn^TTI-aKFIzet5xkJG9x)A=6BVa??Qr*-Z zuwF4ZUe;@_9`0pNUiJ8-2L;eK^#;wJqG64zZgzteqq1QSVt?Z(UKVKk8 zF-H}pW}B3gik4%`uA(q|mY~W(GanFURNp^WjVN;$8PP;-C<%l({OIQ3-DMUN@~h&f zN>T4htRnz^Bg%}OAorOvRBx~6Z@-7dVV0)gu1GvEY`RAC*Q(5EnQ{@=>s)=1Xc=v6 zjBM@6s9Q!Mzp(Hrm#U?%-iq;sPfH_Q^68R|3ZdzkR}f7c<+{x_{N4;J(bE$zBS?8Wbe+cc+*tCHQgp4GY9f6 zOHHqVtS3P)HEfErw;SJcMuqd#@oix2fSNwbL^VFcXUC&4PMtwj#s~ak8|gYMzJ?Im z|2IMXu7NO>3^fi>*N7Os?eYG_uk$(bF)bNPn82oodQdi;&+|j-_JBv+Jz-i;BihcF z%iu^@M}0491fjS1L)j@bB5%N}q#;^+$TwY_wd+bW!#`OF-pVVLMm@NAfi9YTr!1s7 zJ59)Ia4)`@%CX3WdwOf>slExV)|57r7u?OlV_tp&;~E?LDfH(aB+3de{Mc4O6egtF zi(#Wd#2#09mDD*P$*C|o|L)2}om}_Za0T}7Jpp4r!R-U?$7#m?WMXsh7t|IhmRzgM zi)@809=~P!YsB^GC{E==knS!hF{)5+srJRJ?J z!%kxOmT&&_bSz%toY3x$4C_RpSdslsrp|uVM|G1!vd+)GDBs>ZSTa4j$ci8P^2gXM zm^0UJt)pFJAt4CNDclh;`gdSCjg12KBS3%-+`rL3|91#JVT_vPsgI1_P4I6VcNO2qyx&y?dgVnk#|8ZhWParx0vHv zAA(}|QOiPRC)FWKfupbCMr-Vkx{3L^NatWXJ1C7cs#tp#{xxAwpKS z!8w9nX#qCd!@!c&fnkkC_)-Iu^}Tu-UyFvhzE7m)CuTpqv=^uyC%lfK5i+N_n!vsx zIoPq1x$(iywUU$>>_$(prO+G%3Raj|`A-brJ5=^DAv1BB8!{$02(^+%e_QKrZEl+n zqbNG~EoPZ62mM-=F4>NI{V)*jVnuempU#0+n%@+$bZA(i zj!oWag~dsumWEBluh?vyV0=*Z*_&WY4wdbQ^t@J*?Q>-~?UUC~Eu`;@3^48d5vm0> zoMj$MBh?{_RI(1wWovx2P#rIWAHQRsXN^fpv!yQGy?<%t vw+*Gar+3!F$4L28JKYg%oXAx_!QTRYp6A|59miX4|Bk>G>wu}ZCZ_x^V3^&| literal 0 HcmV?d00001 From 90e603b49d1b6fdc55cfc4d4cc3edd3e4389f7f9 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 4 Dec 2022 19:44:17 +0100 Subject: [PATCH 180/342] kbswipe: Redo some patterns --- apps/kbswipe/ChangeLog | 2 +- apps/kbswipe/README.md | 2 ++ apps/kbswipe/lib.js | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/kbswipe/ChangeLog b/apps/kbswipe/ChangeLog index 05be810cc..568db372e 100644 --- a/apps/kbswipe/ChangeLog +++ b/apps/kbswipe/ChangeLog @@ -3,4 +3,4 @@ 0.03: Positioning of marker now takes the height of the widget field into account. 0.04: Fix issue if going back without typing. 0.05: Keep drag-function in ram, hopefully improving performance and input reliability somewhat. -0.06: Support input of numbers +0.06: Support input of numbers and uppercase characters. diff --git a/apps/kbswipe/README.md b/apps/kbswipe/README.md index 1508061d1..c4c3fbd99 100644 --- a/apps/kbswipe/README.md +++ b/apps/kbswipe/README.md @@ -6,6 +6,8 @@ To get a legend of available characters, just tap the screen. To switch between the input of alphabetic and numeric characters tap the widget which displays either "123" or "ABC". +To switch between lowercase and uppercase characters do an up swipe. + ![](key.png) ## Usage diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 981dc80db..75a434999 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -24,7 +24,7 @@ exports.getStrokes = function(mode, cb) { cb("m", new Uint8Array([49, 165, 48, 162, 46, 156, 44, 148, 42, 138, 42, 126, 42, 113, 43, 101, 45, 91, 47, 82, 49, 75, 51, 71, 54, 70, 57, 70, 61, 74, 69, 81, 75, 91, 84, 104, 94, 121, 101, 132, 103, 137, 106, 130, 110, 114, 116, 92, 125, 75, 134, 65, 139, 62, 144, 66, 148, 83, 151, 108, 155, 132, 157, 149])); cb("n", new Uint8Array([50, 165, 50, 160, 50, 153, 50, 140, 50, 122, 50, 103, 50, 83, 50, 65, 50, 52, 50, 45, 50, 43, 52, 52, 57, 67, 66, 90, 78, 112, 93, 131, 104, 143, 116, 152, 127, 159, 135, 160, 141, 150, 148, 125, 154, 96, 158, 71, 161, 56, 162, 49])); cb("o", new Uint8Array([107, 58, 104, 58, 97, 61, 87, 68, 75, 77, 65, 88, 58, 103, 54, 116, 53, 126, 55, 135, 61, 143, 75, 149, 91, 150, 106, 148, 119, 141, 137, 125, 143, 115, 146, 104, 146, 89, 142, 78, 130, 70, 116, 65, 104, 62])); - cb("p", new Uint8Array([52, 59, 52, 64, 54, 73, 58, 88, 61, 104, 65, 119, 67, 130, 69, 138, 71, 145, 71, 147, 71, 148, 71, 143, 70, 133, 68, 120, 67, 108, 67, 97, 67, 89, 68, 79, 72, 67, 83, 60, 99, 58, 118, 58, 136, 63, 146, 70, 148, 77, 145, 84, 136, 91, 121, 95, 106, 97, 93, 97, 82, 97])); + cb("p", new Uint8Array([29, 47, 29, 55, 29, 75, 29, 110, 29, 145, 29, 165, 29, 172, 29, 164, 30, 149, 37, 120, 50, 91, 61, 74, 72, 65, 85, 61, 103, 61, 118, 63, 126, 69, 129, 76, 130, 87, 126, 98, 112, 108, 97, 114, 87, 116])); cb("q", new Uint8Array([95, 59, 93, 59, 88, 59, 79, 59, 68, 61, 57, 67, 50, 77, 48, 89, 48, 103, 50, 117, 55, 130, 65, 140, 76, 145, 85, 146, 94, 144, 101, 140, 105, 136, 106, 127, 106, 113, 100, 98, 92, 86, 86, 79, 84, 75, 84, 72, 91, 69, 106, 67, 126, 67, 144, 67, 158, 67, 168, 67, 173, 67, 177, 67])); cb("r", new Uint8Array([53, 49, 53, 62, 53, 91, 53, 127, 53, 146, 53, 147, 53, 128, 53, 94, 53, 69, 62, 44, 82, 42, 94, 50, 92, 68, 82, 85, 77, 93, 80, 102, 95, 119, 114, 134, 129, 145, 137, 150])); cb("s", new Uint8Array([159, 72, 157, 70, 155, 68, 151, 66, 145, 63, 134, 60, 121, 58, 108, 56, 96, 55, 83, 55, 73, 55, 64, 56, 57, 60, 52, 65, 49, 71, 49, 76, 50, 81, 55, 87, 71, 94, 94, 100, 116, 104, 131, 108, 141, 114, 145, 124, 142, 135, 124, 146, 97, 153, 70, 157, 52, 158])); @@ -33,17 +33,17 @@ exports.getStrokes = function(mode, cb) { cb("v", new Uint8Array([36, 55, 37, 59, 40, 68, 45, 83, 51, 100, 58, 118, 64, 132, 69, 142, 71, 149, 73, 156, 76, 158, 77, 160, 77, 159, 80, 151, 82, 137, 84, 122, 86, 111, 90, 91, 91, 78, 91, 68, 91, 63, 92, 61, 97, 61, 111, 61, 132, 61, 150, 61, 162, 61])); cb("w", new Uint8Array([25, 46, 25, 82, 25, 119, 33, 143, 43, 153, 60, 147, 73, 118, 75, 91, 76, 88, 85, 109, 96, 134, 107, 143, 118, 137, 129, 112, 134, 81, 134, 64, 134, 55])); cb("x", new Uint8Array([56, 63, 56, 67, 57, 74, 60, 89, 66, 109, 74, 129, 85, 145, 96, 158, 107, 164, 117, 167, 128, 164, 141, 155, 151, 140, 159, 122, 166, 105, 168, 89, 170, 81, 170, 73, 169, 66, 161, 63, 141, 68, 110, 83, 77, 110, 55, 134, 47, 145])); - cb("y", new Uint8Array([42, 56, 42, 70, 48, 97, 62, 109, 85, 106, 109, 90, 126, 65, 134, 47, 137, 45, 137, 75, 127, 125, 98, 141, 70, 133, 65, 126, 92, 137, 132, 156, 149, 166])); + cb("y", new Uint8Array([30, 41, 30, 46, 30, 52, 30, 63, 30, 79, 33, 92, 38, 100, 47, 104, 54, 107, 66, 105, 79, 94, 88, 82, 92, 74, 94, 77, 96, 98, 96, 131, 94, 151, 91, 164, 85, 171, 75, 171, 71, 162, 74, 146, 84, 130, 95, 119, 106, 113])); cb("z", new Uint8Array([29, 62, 35, 62, 43, 62, 63, 62, 87, 62, 110, 62, 125, 62, 134, 62, 138, 62, 136, 63, 122, 68, 103, 77, 85, 91, 70, 107, 59, 120, 50, 132, 47, 138, 43, 143, 41, 148, 42, 151, 53, 155, 80, 157, 116, 158, 146, 158, 163, 158])); cb("SHIFT", new Uint8Array([100, 160, 100, 50])); } else if (mode === exports.INPUT_MODE_NUM) { cb("0", new Uint8Array([82, 50, 76, 50, 67, 50, 59, 50, 50, 51, 43, 57, 38, 68, 34, 83, 33, 95, 33, 108, 34, 121, 42, 136, 57, 148, 72, 155, 85, 157, 98, 155, 110, 149, 120, 139, 128, 127, 134, 119, 137, 114, 138, 107, 138, 98, 138, 88, 138, 77, 137, 71, 134, 65, 128, 60, 123, 58])); cb("1", new Uint8Array([100, 50, 100, 160])); - cb("2", new Uint8Array([40, 88, 40, 83, 40, 76, 43, 71, 47, 64, 55, 59, 64, 55, 73, 50, 80, 47, 91, 44, 104, 44, 117, 45, 128, 50, 135, 57, 142, 63, 145, 74, 145, 84, 140, 94, 129, 112, 108, 133, 87, 149, 71, 159, 58, 165, 52, 169, 55, 169, 63, 169, 77, 169, 89, 169, 100, 169, 110, 169, 116, 169])); - cb("3", new Uint8Array([52, 58, 65, 49, 83, 42, 100, 42, 118, 47, 136, 58, 143, 71, 135, 88, 125, 99, 114, 101, 119, 101, 132, 110, 142, 121, 145, 137, 139, 152, 122, 164, 106, 168, 92, 168, 74, 168, 55, 168])); + cb("2", new Uint8Array([40, 79, 46, 74, 56, 66, 68, 58, 77, 49, 87, 45, 100, 45, 111, 46, 119, 50, 128, 58, 133, 71, 130, 88, 120, 106, 98, 128, 69, 150, 50, 162, 42, 167, 43, 168, 58, 169, 78, 170, 93, 170, 103, 170, 109, 170])); + cb("3", new Uint8Array([47, 65, 51, 60, 57, 56, 65, 51, 74, 47, 84, 45, 93, 45, 102, 45, 109, 46, 122, 51, 129, 58, 130, 65, 127, 74, 120, 85, 112, 92, 107, 96, 112, 101, 117, 105, 125, 113, 128, 123, 127, 134, 122, 145, 108, 156, 91, 161, 70, 163, 55, 163])); cb("4", new Uint8Array([37, 58, 37, 60, 37, 64, 37, 69, 37, 75, 37, 86, 37, 96, 37, 105, 37, 112, 37, 117, 37, 122, 37, 126, 37, 128, 38, 129, 40, 129, 45, 129, 48, 129, 53, 129, 67, 129, 85, 129, 104, 129, 119, 129, 129, 129, 136, 129])); cb("5", new Uint8Array([142, 60, 119, 60, 79, 60, 45, 60, 37, 64, 37, 86, 37, 103, 47, 107, 66, 106, 81, 103, 97, 103, 116, 103, 129, 108, 131, 130, 122, 152, 101, 168, 85, 172, 70, 172, 59, 172])); - cb("6", new Uint8Array([128, 56, 110, 56, 81, 56, 58, 61, 47, 77, 41, 101, 41, 123, 41, 154, 50, 168, 71, 169, 98, 169, 123, 161, 131, 141, 129, 124, 117, 117, 102, 117, 92, 117, 85, 118, 77, 125])); + cb("6", new Uint8Array([136, 54, 135, 49, 129, 47, 114, 47, 89, 54, 66, 66, 50, 81, 39, 95, 35, 109, 34, 128, 38, 145, 52, 158, 81, 164, 114, 157, 133, 139, 136, 125, 132, 118, 120, 115, 102, 117, 85, 123])); cb("7", new Uint8Array([47, 38, 48, 38, 53, 38, 66, 38, 85, 38, 103, 38, 117, 38, 125, 38, 129, 38, 134, 41, 135, 47, 135, 54, 135, 66, 131, 93, 124, 126, 116, 149, 109, 161, 105, 168])); cb("8", new Uint8Array([122, 61, 102, 61, 83, 61, 60, 61, 47, 62, 45, 78, 58, 99, 84, 112, 105, 122, 118, 134, 121, 149, 113, 165, 86, 171, 59, 171, 47, 164, 45, 144, 50, 132, 57, 125, 67, 117, 78, 109, 87, 102, 96, 94, 105, 86, 113, 85])); cb("9", new Uint8Array([122, 58, 117, 55, 112, 51, 104, 51, 95, 51, 86, 51, 77, 51, 68, 51, 60, 51, 54, 56, 47, 64, 46, 77, 46, 89, 46, 96, 51, 103, 64, 109, 74, 110, 83, 110, 94, 107, 106, 102, 116, 94, 124, 84, 127, 79, 128, 78, 128, 94, 128, 123, 128, 161, 128, 175])); From 141eb9b90bebf93f8d701a16f25308bdca16db9f Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 4 Dec 2022 18:40:10 +0100 Subject: [PATCH 181/342] widget_utils - Allow setting a time for auto hideout --- modules/widget_utils.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/widget_utils.js b/modules/widget_utils.js index 3440a01d2..33fd303f9 100644 --- a/modules/widget_utils.js +++ b/modules/widget_utils.js @@ -29,6 +29,7 @@ exports.show = function() { /// Remove any intervals/handlers/etc that we might have added. Does NOT re-show widgets that were hidden exports.cleanup = function() { + delete exports.autohide; delete Bangle.appRect; if (exports.swipeHandler) { Bangle.removeListener("swipe", exports.swipeHandler); @@ -50,11 +51,13 @@ exports.cleanup = function() { /** Put widgets offscreen, and allow them to be swiped back onscreen with a downwards swipe. Use .show to undo. +First parameter controls automatic hiding time, 0 equals not hiding at all. +Default value is 2000ms until hiding. Bangle.js 2 only at the moment. */ -exports.swipeOn = function() { +exports.swipeOn = function(autohide) { exports.cleanup(); if (!global.WIDGETS) return; - + exports.autohide=autohide===undefined?2000:autohide; /* TODO: maybe when widgets are offscreen we don't even store them in an offscreen buffer? */ @@ -125,11 +128,13 @@ exports.swipeOn = function() { clearTimeout(exports.hideTimeout); delete exports.hideTimeout; } - if (ud>0 && offset<0) anim(4, function() { + let cb; + if (exports.autohide > 0) cb = function() { exports.hideTimeout = setTimeout(function() { anim(-4); - }, 2000); - }); + }, exports.autohide); + } + if (ud>0 && offset<0) anim(4, cb); if (ud<0 && offset>-24) anim(-4); }; From dba3511e2ab5dad72f5bc008dba91af934287713 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 4 Dec 2022 18:52:43 +0100 Subject: [PATCH 182/342] imageclock - Disable auto hide of widgets --- apps/imageclock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/imageclock/app.js b/apps/imageclock/app.js index 90c6163cd..374e73070 100644 --- a/apps/imageclock/app.js +++ b/apps/imageclock/app.js @@ -627,7 +627,7 @@ s.pl = {}; Bangle.drawWidgets = ()=>{}; Bangle.loadWidgets(); Bangle.drawWidgets = orig; - require("widget_utils").swipeOn(); + require("widget_utils").swipeOn(0); Bangle.drawWidgets(); } }).catch((e)=>{ From c9dec5ce4a0f83769f3d05475d19e2cf61921819 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sun, 4 Dec 2022 20:30:35 +0100 Subject: [PATCH 183/342] Create README.md --- apps/contourclock/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 apps/contourclock/README.md diff --git a/apps/contourclock/README.md b/apps/contourclock/README.md new file mode 100644 index 000000000..dcde447d4 --- /dev/null +++ b/apps/contourclock/README.md @@ -0,0 +1,6 @@ +##New Features: +- Fast load! (only works if your launcher uses widgets) +- widgets, date and weekday are individually configurable +- you can hide widgets, date and weekday for a cleaner look when the watch is locked + +Contact me for bug reports or feature requests: ContourClock@gmx.de From 06e8ba63cac6382bc457484cc3a2fbb04f291389 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sun, 4 Dec 2022 20:31:04 +0100 Subject: [PATCH 184/342] Update README.md --- apps/contourclock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/README.md b/apps/contourclock/README.md index dcde447d4..ad9f0b880 100644 --- a/apps/contourclock/README.md +++ b/apps/contourclock/README.md @@ -1,4 +1,4 @@ -##New Features: +#New Features: - Fast load! (only works if your launcher uses widgets) - widgets, date and weekday are individually configurable - you can hide widgets, date and weekday for a cleaner look when the watch is locked From df6eda645bdffe43596be3d084fcd8a9dfc5fef7 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sun, 4 Dec 2022 20:31:13 +0100 Subject: [PATCH 185/342] Update README.md --- apps/contourclock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/README.md b/apps/contourclock/README.md index ad9f0b880..3341439da 100644 --- a/apps/contourclock/README.md +++ b/apps/contourclock/README.md @@ -1,4 +1,4 @@ -#New Features: +# New Features: - Fast load! (only works if your launcher uses widgets) - widgets, date and weekday are individually configurable - you can hide widgets, date and weekday for a cleaner look when the watch is locked From 179e01299574c216afc671164e664b9b92e2c281 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sun, 4 Dec 2022 20:33:26 +0100 Subject: [PATCH 186/342] Delete apps/widtick directory --- apps/widtick/widtick.wid.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 apps/widtick/widtick.wid.js diff --git a/apps/widtick/widtick.wid.js b/apps/widtick/widtick.wid.js deleted file mode 100644 index c59ae5dfb..000000000 --- a/apps/widtick/widtick.wid.js +++ /dev/null @@ -1,8 +0,0 @@ -(()=>{ - setInterval(()=>{Bangle.buzz(5,1);},1000); - WIDGETS.tick = { - area: "tr", - width: 0, - draw: ()=>{} - }; -})(); From 2df4ba30f5928720257e9743141e17b736de1379 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 4 Dec 2022 21:13:10 +0100 Subject: [PATCH 187/342] gpstrek - Workaround minifier issue --- apps/gpstrek/ChangeLog | 1 + apps/gpstrek/app.js | 6 ++++-- apps/gpstrek/metadata.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/gpstrek/ChangeLog b/apps/gpstrek/ChangeLog index c36c23c72..849088c64 100644 --- a/apps/gpstrek/ChangeLog +++ b/apps/gpstrek/ChangeLog @@ -13,3 +13,4 @@ Reconstruct battery voltage by using calibrated batFullVoltage Averaging for smoothing compass headings Save state if route or waypoint has been chosen +0.09: Workaround a minifier issue allowing to install gpstrek with minification enabled diff --git a/apps/gpstrek/app.js b/apps/gpstrek/app.js index b3ec79fd2..1f46ae2b4 100644 --- a/apps/gpstrek/app.js +++ b/apps/gpstrek/app.js @@ -259,7 +259,8 @@ let getCompassSlice = function(compassDataSource){ if (compassDataSource.getPoints){ - for (let p of compassDataSource.getPoints()){ + let points = compassDataSource.getPoints(); //storing this in a variable works around a minifier bug causing a problem in the next line: for(let a of a.getPoints()) + for (let p of points){ g.reset(); var bpos = p.bearing - lastDrawnValue; if (bpos>180) bpos -=360; @@ -285,7 +286,8 @@ let getCompassSlice = function(compassDataSource){ } } if (compassDataSource.getMarkers){ - for (let m of compassDataSource.getMarkers()){ + let markers = compassDataSource.getMarkers(); //storing this in a variable works around a minifier bug causing a problem in the next line: for(let a of a.getMarkers()) + for (let m of markers){ g.reset(); g.setColor(m.fillcolor); let mpos = m.xpos * width; diff --git a/apps/gpstrek/metadata.json b/apps/gpstrek/metadata.json index 3e27a3247..2e2e481af 100644 --- a/apps/gpstrek/metadata.json +++ b/apps/gpstrek/metadata.json @@ -1,7 +1,7 @@ { "id": "gpstrek", "name": "GPS Trekking", - "version": "0.08", + "version": "0.09", "description": "Helper for tracking the status/progress during hiking. Do NOT depend on this for navigation!", "icon": "icon.png", "screenshots": [{"url":"screen1.png"},{"url":"screen2.png"},{"url":"screen3.png"},{"url":"screen4.png"}], From 72bbc3a406a47934f83126410167da2dde8663ec Mon Sep 17 00:00:00 2001 From: m-p-3 Date: Sun, 4 Dec 2022 21:24:33 -0500 Subject: [PATCH 188/342] Bump version 0.01 -> 0.02 --- apps/messageicons/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messageicons/metadata.json b/apps/messageicons/metadata.json index eb907f893..b6ce34f88 100644 --- a/apps/messageicons/metadata.json +++ b/apps/messageicons/metadata.json @@ -1,7 +1,7 @@ { "id": "messageicons", "name": "Message Icons", - "version": "0.01", + "version": "0.02", "description": "Library containing a list of icons and colors for apps", "icon": "app.png", "type": "module", From 768e2cb8f3001287883dc7e05a35e2a842bbcb7c Mon Sep 17 00:00:00 2001 From: m-p-3 Date: Sun, 4 Dec 2022 21:26:22 -0500 Subject: [PATCH 189/342] Update Changelog --- apps/messageicons/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/messageicons/ChangeLog b/apps/messageicons/ChangeLog index 52a4b35a7..fefc6ee6e 100644 --- a/apps/messageicons/ChangeLog +++ b/apps/messageicons/ChangeLog @@ -1 +1,2 @@ 0.01: Moved message icons from messages into standalone library +0.02: Added several new icons and colors From 081f3b8eb69daaf29be29b15ab944a22abc1e4b2 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Mon, 5 Dec 2022 10:14:17 +0100 Subject: [PATCH 190/342] Update contourclock.settings.js --- apps/contourclock/contourclock.settings.js | 123 ++++++++++----------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/apps/contourclock/contourclock.settings.js b/apps/contourclock/contourclock.settings.js index 2d8f74fc6..f2a75d9b5 100644 --- a/apps/contourclock/contourclock.settings.js +++ b/apps/contourclock/contourclock.settings.js @@ -10,67 +10,64 @@ settings.hideWhenLocked=false; require('Storage').writeJSON("myapp.json", settings); } - E.showMenu({ - "" : { "title" : "ContourClock" }, - "< Back" : () => back(), - 'Widgets': { - value: (settings.widgets !== undefined ? settings.widgets : true), - onchange : v => {settings.widgets=v; require('Storage').writeJSON('contourclock.json', settings);} - }, - 'hide Widgets': { - value: (settings.hide !== undefined ? settings.hide : false), - onchange : v => {settings.hide=v; require('Storage').writeJSON('contourclock.json', settings);} - }, - 'Weekday': { - value: (settings.weekday !== undefined ? settings.weekday : true), - onchange : v => {settings.weekday=v; require('Storage').writeJSON('contourclock.json', settings);} - }, - 'Date': { - value: (settings.date !== undefined ? settings.date : true), - onchange : v => {settings.date=v; require('Storage').writeJSON('contourclock.json', settings);} - }, - 'Hide when locked': { - value: (settings.hideWhenLocked !== undefined ? settings.hideWhenLocked : false), - onchange : v => {settings.hideWhenLocked=v; require('Storage').writeJSON('contourclock.json', settings);} - }, - 'set Font': function() { - Bangle.removeAllListeners('drag'); - Bangle.removeAllListeners('touch'); - require("widget_utils").hide(); - savedIndex=settings.fontIndex; - saveListener = setWatch(function() { //save changes and return to settings menu - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - Bangle.load(); - }, BTN, { repeat:false, edge:'falling' }); - lockListener = Bangle.on('lock', function () { //discard changes and return to clock - settings.fontIndex=savedIndex; - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - Bangle.load(); - }); - swipeListener = Bangle.on('swipe', function (direction) { - var fontName = require('contourclock').drawClock(settings.fontIndex+direction); - if (fontName) { - settings.fontIndex+=direction; - g.clearRect(0,0,g.getWidth()-1,16); - g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,0); - } else { - require('contourclock').drawClock(settings.fontIndex); - } - }); - g.reset(); - g.clear(); - g.setFont('6x8:2x2').setFontAlign(0,-1); - g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,0); - g.drawString('Swipe - change',g.getWidth()/2,g.getHeight()-36); - g.drawString('BTN - save',g.getWidth()/2,g.getHeight()-18); - } - }); + function mainMenu() { + E.showMenu({ + "" : { "title" : "ContourClock" }, + "< Back" : () => back(), + 'Widgets': { + value: (settings.widgets !== undefined ? settings.widgets : true), + onchange : v => {settings.widgets=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'hide Widgets': { + value: (settings.hide !== undefined ? settings.hide : false), + onchange : v => {settings.hide=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Weekday': { + value: (settings.weekday !== undefined ? settings.weekday : true), + onchange : v => {settings.weekday=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Date': { + value: (settings.date !== undefined ? settings.date : true), + onchange : v => {settings.date=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Hide when locked': { + value: (settings.hideWhenLocked !== undefined ? settings.hideWhenLocked : false), + onchange : v => {settings.hideWhenLocked=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'set Font': () => fontMenu() + }); + } + function fontMenu() { + Bangle.setUI(""); + savedIndex=settings.fontIndex; + saveListener = setWatch(function() { //save changes and return to settings menu + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + mainMenu(); + }, BTN, { repeat:false, edge:'falling' }); + lockListener = Bangle.on('lock', function () { //discard changes and return to clock + settings.fontIndex=savedIndex; + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + mainMenu(); + }); + swipeListener = Bangle.on('swipe', function (direction) { + var fontName = require('contourclock').drawClock(settings.fontIndex+direction); + if (fontName) { + settings.fontIndex+=direction; + g.clearRect(0,g.getHeight()-36,g.getWidth()-1,g.getHeight()-36+16); + g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,g.getHeight()-36); + } else { + require('contourclock').drawClock(settings.fontIndex); + } + }); + g.reset(); + g.clearRect(0,24,g.getWidth()-1,g.getHeight()-1); + g.setFont('6x8:2x2').setFontAlign(0,-1); + g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,g.getHeight()-36); + g.drawString('Button to save',g.getWidth()/2,g.getHeight()-18); + } + mainMenu(); }) From ca52522fc085e7ce246390a3e4e05a1afcb8280b Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:03:21 +0100 Subject: [PATCH 191/342] Update metadata.json --- apps/contourclock/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/contourclock/metadata.json b/apps/contourclock/metadata.json index 5a359ade5..6b2b51991 100644 --- a/apps/contourclock/metadata.json +++ b/apps/contourclock/metadata.json @@ -3,6 +3,7 @@ "shortName" : "Contour Clock", "version":"0.28", "icon": "app.png", + "readme": "README.md", "description": "A Minimalist clockface with large Digits.", "screenshots" : [{"url":"cc-screenshot-1.png"},{"url":"cc-screenshot-2.png"}], "tags": "clock", From 596a2be1f8b69cd8bf0cb9b7a9c64f12959fb6ef Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 5 Dec 2022 10:09:40 +0000 Subject: [PATCH 192/342] Update README.md --- apps/slopeclockpp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slopeclockpp/README.md b/apps/slopeclockpp/README.md index 8aad8467b..c9e9d523d 100644 --- a/apps/slopeclockpp/README.md +++ b/apps/slopeclockpp/README.md @@ -10,7 +10,7 @@ to change (top right or bottom left). It should change color showing it is selected. * Swipe up or down to cycle through the info screens that can be displayed - when you have finnised tap again towards the centre of the screen to unselect. + when you have finished tap again towards the centre of the screen to unselect. * Swipe left or right to change the type of info screens displayed (by default there is only one type of data so this will have no effect) From 67071d3722f169e45f0da4ed7c21cad9e716d855 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 2 Dec 2022 22:45:10 +0100 Subject: [PATCH 193/342] android - autotranslate some strings --- apps/android/ChangeLog | 3 ++- apps/android/boot.js | 4 ++-- apps/android/metadata.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index e4a3e9de0..86dbdb649 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -16,4 +16,5 @@ 0.16: Bangle.http now fails immediately if there is no Bluetooth connection (fix #2152) 0.17: Now kick off Calendar sync as soon as connected to Gadgetbridge 0.18: Use new message library - If connected to Gadgetbridge, allow GPS forwarding from phone (Gadgetbridge code still not merged) \ No newline at end of file + If connected to Gadgetbridge, allow GPS forwarding from phone (Gadgetbridge code still not merged) +0.19: Add automatic translation for a couple of strings. diff --git a/apps/android/boot.js b/apps/android/boot.js index 8e75241e7..e1e5b028b 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -57,7 +57,7 @@ t:event.cmd=="incoming"?"add":"remove", id:"call", src:"Phone", positive:true, negative:true, - title:event.name||"Call", body:"Incoming call\n"+event.number}); + title:event.name||/*LANG*/"Call", body:/*LANG*/"Incoming call\n"+event.number}); require("messages").pushMessage(event); }, "alarm" : function() { @@ -148,7 +148,7 @@ Bangle.http = (url,options)=>{ options = options||{}; if (!NRF.getSecurityStatus().connected) - return Promise.reject("Not connected to Bluetooth"); + return Promise.reject(/*LANG*/"Not connected to Bluetooth"); if (Bangle.httpRequest === undefined) Bangle.httpRequest={}; if (options.id === undefined) { diff --git a/apps/android/metadata.json b/apps/android/metadata.json index 45c08a75a..d5a45edb7 100644 --- a/apps/android/metadata.json +++ b/apps/android/metadata.json @@ -2,7 +2,7 @@ "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.18", + "version": "0.19", "description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.", "icon": "app.png", "tags": "tool,system,messages,notifications,gadgetbridge", From 6522e0311da0a767245884eb30918df6547df52e Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 2 Dec 2022 23:06:38 +0100 Subject: [PATCH 194/342] files - autotranslate strings --- apps/files/ChangeLog | 3 ++- apps/files/files.js | 54 ++++++++++++++++++++-------------------- apps/files/metadata.json | 2 +- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/apps/files/ChangeLog b/apps/files/ChangeLog index 1908f7e5c..4622e6f0f 100644 --- a/apps/files/ChangeLog +++ b/apps/files/ChangeLog @@ -3,4 +3,5 @@ 0.04: Add functionality to sort apps manually or alphabetically ascending/descending. 0.05: Tweaks to help with memory usage 0.06: Reduce memory usage -0.07: Allow negative numbers when manual-sorting \ No newline at end of file +0.07: Allow negative numbers when manual-sorting +0.08: Automatic translation of strings. diff --git a/apps/files/files.js b/apps/files/files.js index e81e9589f..2f7b5c9a1 100644 --- a/apps/files/files.js +++ b/apps/files/files.js @@ -3,20 +3,20 @@ const store = require('Storage'); function showMainMenu() { const mainmenu = { '': { - 'title': 'App Manager', + 'title': /*LANG*/'App Manager', }, '< Back': ()=> {load();}, - 'Sort Apps': () => showSortAppsMenu(), - 'Manage Apps': ()=> showApps(), - 'Compact': () => { - E.showMessage('Compacting...'); + /*LANG*/'Sort Apps': () => showSortAppsMenu(), + /*LANG*/'Manage Apps': ()=> showApps(), + /*LANG*/'Compact': () => { + E.showMessage(/*LANG*/'Compacting...'); try { store.compact(); } catch (e) { } showMainMenu(); }, - 'Free': { + /*LANG*/'Free': { value: undefined, format: (v) => { return store.getFree(); @@ -65,13 +65,13 @@ function eraseData(info) { }); } function eraseApp(app, files,data) { - E.showMessage('Erasing\n' + app.name + '...'); + E.showMessage(/*LANG*/'Erasing\n' + app.name + '...'); var info = store.readJSON(app.id + ".info", 1)||{}; if (files) eraseFiles(info); if (data) eraseData(info); } function eraseOne(app, files,data){ - E.showPrompt('Erase\n'+app.name+'?').then((v) => { + E.showPrompt(/*LANG*/'Erase\n'+app.name+'?').then((v) => { if (v) { Bangle.buzz(100, 1); eraseApp(app, files, data); @@ -82,7 +82,7 @@ function eraseOne(app, files,data){ }); } function eraseAll(apps, files,data) { - E.showPrompt('Erase all?').then((v) => { + E.showPrompt(/*LANG*/'Erase all?').then((v) => { if (v) { Bangle.buzz(100, 1); apps.forEach(app => eraseApp(app, files, data)); @@ -99,11 +99,11 @@ function showAppMenu(app) { '< Back': () => showApps(), }; if (app.hasData) { - appmenu['Erase Completely'] = () => eraseOne(app, true, true); - appmenu['Erase App,Keep Data'] = () => eraseOne(app, true, false); - appmenu['Only Erase Data'] = () => eraseOne(app, false, true); + appmenu[/*LANG*/'Erase Completely'] = () => eraseOne(app, true, true); + appmenu[/*LANG*/'Erase App,Keep Data'] = () => eraseOne(app, true, false); + appmenu[/*LANG*/'Only Erase Data'] = () => eraseOne(app, false, true); } else { - appmenu['Erase'] = () => eraseOne(app, true, false); + appmenu[/*LANG*/'Erase'] = () => eraseOne(app, true, false); } E.showMenu(appmenu); } @@ -111,7 +111,7 @@ function showAppMenu(app) { function showApps() { const appsmenu = { '': { - 'title': 'Apps', + 'title': /*LANG*/'Apps', }, '< Back': () => showMainMenu(), }; @@ -128,17 +128,17 @@ function showApps() { menu[app.name] = () => showAppMenu(app); return menu; }, appsmenu); - appsmenu['Erase All'] = () => { + appsmenu[/*LANG*/'Erase All'] = () => { E.showMenu({ - '': {'title': 'Erase All'}, - 'Erase Everything': () => eraseAll(list, true, true), - 'Erase Apps,Keep Data': () => eraseAll(list, true, false), - 'Only Erase Data': () => eraseAll(list, false, true), + '': {'title': /*LANG*/'Erase All'}, + /*LANG*/'Erase Everything': () => eraseAll(list, true, true), + /*LANG*/'Erase Apps,Keep Data': () => eraseAll(list, true, false), + /*LANG*/'Only Erase Data': () => eraseAll(list, false, true), '< Back': () => showApps(), }); }; } else { - appsmenu['...No Apps...'] = { + appsmenu[/*LANG*/'...No Apps...'] = { value: undefined, format: ()=> '', onchange: ()=> {} @@ -150,16 +150,16 @@ function showApps() { function showSortAppsMenu() { const sorterMenu = { '': { - 'title': 'App Sorter', + 'title': /*LANG*/'App Sorter', }, '< Back': () => showMainMenu(), - 'Sort: manually': ()=> showSortAppsManually(), - 'Sort: alph. ASC': () => { - E.showMessage('Sorting:\nAlphabetically\nascending ...'); + /*LANG*/'Sort: manually': ()=> showSortAppsManually(), + /*LANG*/'Sort: alph. ASC': () => { + E.showMessage(/*LANG*/'Sorting:\nAlphabetically\nascending ...'); sortAlphabet(false); }, 'Sort: alph. DESC': () => { - E.showMessage('Sorting:\nAlphabetically\ndescending ...'); + E.showMessage(/*LANG*/'Sorting:\nAlphabetically\ndescending ...'); sortAlphabet(true); } }; @@ -169,7 +169,7 @@ function showSortAppsMenu() { function showSortAppsManually() { const appsSorterMenu = { '': { - 'title': 'Sort: manually', + 'title': /*LANG*/'Sort: manually', }, '< Back': () => showSortAppsMenu(), }; @@ -186,7 +186,7 @@ function showSortAppsManually() { return menu; }, appsSorterMenu); } else { - appsSorterMenu['...No Apps...'] = { + appsSorterMenu[/*LANG*/'...No Apps...'] = { value: undefined, format: ()=> '', onchange: ()=> {} diff --git a/apps/files/metadata.json b/apps/files/metadata.json index ac73a7717..a53f914e6 100644 --- a/apps/files/metadata.json +++ b/apps/files/metadata.json @@ -1,7 +1,7 @@ { "id": "files", "name": "App Manager", - "version": "0.07", + "version": "0.08", "description": "Show currently installed apps, free space, and allow their deletion from the watch", "icon": "files.png", "tags": "tool,system,files", From db38c197015b4e3e4e93f19b82f70d3e0271c7df Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 2 Dec 2022 23:15:20 +0100 Subject: [PATCH 195/342] recorder - autotranslate more strings --- apps/recorder/ChangeLog | 1 + apps/recorder/app.js | 6 +++--- apps/recorder/metadata.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 3cf5d8372..a4d0b7e88 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -23,3 +23,4 @@ 0.17: Use default Bangle formatter for booleans 0.18: Improve widget load speed, allow currently recording track to be plotted in openstmap 0.19: Fix track plotting code +0.20: Automatic translation of some more strings. diff --git a/apps/recorder/app.js b/apps/recorder/app.js index 9006d2236..8dcc4c3ed 100644 --- a/apps/recorder/app.js +++ b/apps/recorder/app.js @@ -61,7 +61,7 @@ function showMainMenu() { setTimeout(function() { E.showMenu(); WIDGETS["recorder"].setRecording(v).then(function() { - print("Complete"); + print(/*LANG*/"Complete"); loadSettings(); print(settings.recording); showMainMenu(); @@ -96,7 +96,7 @@ function showMainMenu() { }; var recorders = WIDGETS["recorder"].getRecorders(); Object.keys(recorders).forEach(id=>{ - mainmenu["Log "+recorders[id]().name] = menuRecord(id); + mainmenu[/*LANG*/"Log "+recorders[id]().name] = menuRecord(id); }); delete recorders; return E.showMenu(mainmenu); @@ -404,7 +404,7 @@ function viewTrack(filename, info) { title: title, miny: min, maxy: max, - xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes + xlabel : x=>Math.round(x*dur/(60*infn.length))+/*LANG*/" min" // minutes }); g.setFont("6x8",2); g.setFontAlign(0,0,3); diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index bbc08e0ef..91ceaf86e 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.19", + "version": "0.20", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", From fb721b00a72a32a0de2359caa00a689f4f2519fa Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 2 Dec 2022 23:19:35 +0100 Subject: [PATCH 196/342] hrm - autotranslate strings --- apps/hrm/ChangeLog | 1 + apps/hrm/heartrate.js | 6 +++--- apps/hrm/metadata.json | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/hrm/ChangeLog b/apps/hrm/ChangeLog index 62956e8cd..b55ba8930 100644 --- a/apps/hrm/ChangeLog +++ b/apps/hrm/ChangeLog @@ -8,3 +8,4 @@ 0.08: Don't force backlight on/watch unlocked on Bangle 2 0.09: Grey out BPM until confidence is over 50% 0.10: Autoscale raw graph to maximum value seen +0.11: Automatic translation of strings. diff --git a/apps/hrm/heartrate.js b/apps/hrm/heartrate.js index 386341e6d..2e5a720e5 100644 --- a/apps/hrm/heartrate.js +++ b/apps/hrm/heartrate.js @@ -37,7 +37,7 @@ function updateHrm(){ var px = g.getWidth()/2; g.setFontAlign(0,-1); g.clearRect(0,24,g.getWidth(),80); - g.setFont("6x8").drawString("Confidence "+(hrmInfo.confidence || "--")+"%", px, 70); + g.setFont("6x8").drawString(/*LANG*/"Confidence "+(hrmInfo.confidence || "--")+"%", px, 70); updateScale(); @@ -46,7 +46,7 @@ function updateHrm(){ g.setFontVector(40).setColor(hrmInfo.confidence > 50 ? g.theme.fg : "#888").drawString(str,px,45); px += g.stringWidth(str)/2; g.setFont("6x8").setColor(g.theme.fg); - g.drawString("BPM",px+15,45); + g.drawString(/*LANG*/"BPM",px+15,45); } function updateScale(){ @@ -101,7 +101,7 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); g.setColor(g.theme.fg); g.reset().setFont("6x8",2).setFontAlign(0,-1); -g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16); +g.drawString(/*LANG*/"Please wait...",g.getWidth()/2,g.getHeight()/2 - 16); countDown(); diff --git a/apps/hrm/metadata.json b/apps/hrm/metadata.json index c5a5f4f4d..f254b5d23 100644 --- a/apps/hrm/metadata.json +++ b/apps/hrm/metadata.json @@ -1,7 +1,7 @@ { "id": "hrm", "name": "Heart Rate Monitor", - "version": "0.10", + "version": "0.11", "description": "Measure your heart rate and see live sensor data", "icon": "heartrate.png", "tags": "health", From ee21d0bb4820aad91baf567d7f1ad54d642f7aae Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 2 Dec 2022 23:30:08 +0100 Subject: [PATCH 197/342] weather - autotranslate strings --- apps/weather/ChangeLog | 4 +++- apps/weather/app.js | 22 +++++++++++----------- apps/weather/metadata.json | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index 1b6c1b9b5..359cb8635 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -17,4 +17,6 @@ 0.18: Added hasRange to clkinfo. 0.19: Added weather condition to clkinfo. 0.20: Added weather condition with temperature to clkinfo. -0.21: Updated clkinfo icon. \ No newline at end of file +0.21: Updated clkinfo icon. +0.22: Automatic translation of strings, some left untranslated. +>>>>>>> b37fcacd1 (weather - autotranslate strings) diff --git a/apps/weather/app.js b/apps/weather/app.js index f63b226b9..8988c5002 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -16,10 +16,10 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ {type: "txt", font: "12%", valign: -1, id: "tempUnit", label: "°C"}, ]}, {filly: 1}, - {type: "txt", font: "6x8", pad: 2, halign: 1, label: "Humidity"}, + {type: "txt", font: "6x8", pad: 2, halign: 1, label: /*LANG*/"Humidity"}, {type: "txt", font: "9%", pad: 2, halign: 1, id: "hum", label: "000%"}, {filly: 1}, - {type: "txt", font: "6x8", pad: 2, halign: -1, label: "Wind"}, + {type: "txt", font: "6x8", pad: 2, halign: -1, label: /*LANG*/"Wind"}, {type: "h", halign: -1, c: [ {type: "txt", font: "9%", pad: 2, id: "wind", label: "00"}, {type: "txt", font: "6x8", pad: 2, valign: -1, id: "windUnit", label: "km/h"}, @@ -27,22 +27,22 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ ]}, ]}, {filly: 1}, - {type: "txt", font: "9%", wrap: true, height: g.getHeight()*0.18, fillx: 1, id: "cond", label: "Weather condition"}, + {type: "txt", font: "9%", wrap: true, height: g.getHeight()*0.18, fillx: 1, id: "cond", label: /*LANG*/"Weather condition"}, {filly: 1}, {type: "h", c: [ {type: "txt", font: "6x8", pad: 4, id: "loc", label: "Toronto"}, {fillx: 1}, - {type: "txt", font: "6x8", pad: 4, id: "updateTime", label: "15 minutes ago"}, + {type: "txt", font: "6x8", pad: 4, id: "updateTime", label: /*LANG*/"15 minutes ago"}, ]}, {filly: 1}, ]}, {lazy: true}); function formatDuration(millis) { let pluralize = (n, w) => n + " " + w + (n == 1 ? "" : "s"); - if (millis < 60000) return "< 1 minute"; - if (millis < 3600000) return pluralize(Math.floor(millis/60000), "minute"); - if (millis < 86400000) return pluralize(Math.floor(millis/3600000), "hour"); - return pluralize(Math.floor(millis/86400000), "day"); + if (millis < 60000) return /*LANG*/"< 1 minute"; + if (millis < 3600000) return pluralize(Math.floor(millis/60000), /*LANG*/"minute"); + if (millis < 86400000) return pluralize(Math.floor(millis/3600000), /*LANG*/"hour"); + return pluralize(Math.floor(millis/86400000), /*LANG*/"day"); } function draw() { @@ -57,7 +57,7 @@ function draw() { layout.windUnit.label = wind[2] + " " + (current.wrose||'').toUpperCase(); layout.cond.label = current.txt.charAt(0).toUpperCase()+(current.txt||'').slice(1); layout.loc.label = current.loc; - layout.updateTime.label = `${formatDuration(Date.now() - current.time)} ago`; + layout.updateTime.label = `${formatDuration(Date.now() - current.time)} ago`; // How to autotranslate this and similar? layout.update(); layout.render(); } @@ -77,9 +77,9 @@ function update() { } else { layout.forgetLazyState(); if (NRF.getSecurityStatus().connected) { - E.showMessage("Weather\nunknown\n\nIs Gadgetbridge\nweather\nreporting set\nup on your\nphone?"); + E.showMessage(/*LANG*/"Weather\nunknown\n\nIs Gadgetbridge\nweather\nreporting set\nup on your\nphone?"); } else { - E.showMessage("Weather\nunknown\n\nGadgetbridge\nnot connected"); + E.showMessage(/*LANG*/"Weather\nunknown\n\nGadgetbridge\nnot connected"); NRF.on("connect", update); } } diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index 500eac012..7fefb7685 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.21", + "version": "0.22", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], From 946f77d7b59f469f87556d2b5e21e2d1da76a1f3 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 5 Dec 2022 18:06:17 +0100 Subject: [PATCH 198/342] sleepphasealarm Support javascript command to execute as defined in scheduler 'js' configuration --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 3 +++ apps/sleepphasealarm/metadata.json | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 80b2e554b..795c62fa2 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -12,3 +12,4 @@ Add setting to disable scheduler alarm 0.10: Fix: Do not wake when falling asleep 0.11: Minor tweaks +0.12: Support javascript command to execute as defined in scheduler 'js' configuration diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index a5193b244..90cd32c7e 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -173,6 +173,9 @@ if (nextAlarmDate !== undefined) { setTimeout(load, 1000); } else if (measure && now >= minAlarm && swest === false) { addLog(now, "alarm"); + if (nextAlarmConfig.js) { + eval(nextAlarmConfig.js); // run nextAlarmConfig.js if set + } buzz(); measure = false; if (config.settings.disableAlarm) { diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index fd3366812..ced99062f 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.11", + "version": "0.12", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", From ae6d53ffc397439e24d732c633af01206e2a8008 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 5 Dec 2022 17:09:09 +0000 Subject: [PATCH 199/342] bootloader 0.55: Add toLocalISOString polyfill for pre-2v15 firmwares + Only add boot info comments if settings.bootDebug was set + If settings.bootDebug is set, output timing for each section of .boot0 --- apps/boot/ChangeLog | 3 ++ apps/boot/bootupdate.js | 72 ++++++++++++++++++++++++++--------------- apps/boot/metadata.json | 2 +- 3 files changed, 50 insertions(+), 27 deletions(-) diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 0eaf517d9..780d9cc7d 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -61,3 +61,6 @@ 0.52: Ensure heading patch for pre-2v15.68 firmware applies to getCompass 0.53: Add polyfills for pre-2v15.135 firmware for Bangle.load and Bangle.showClock 0.54: Fix for invalid version comparison in polyfill +0.55: Add toLocalISOString polyfill for pre-2v15 firmwares + Only add boot info comments if settings.bootDebug was set + If settings.bootDebug is set, output timing for each section of .boot0 diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index ad58437ec..112dfeba8 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -1,16 +1,22 @@ /* This rewrites boot0.js based on current settings. If settings changed then it recalculates, but this avoids us doing a whole bunch of reconfiguration most of the time. */ +{ // execute in our own scope so we don't have to free variables... E.showMessage(/*LANG*/"Updating boot0..."); -var s = require('Storage').readJSON('setting.json',1)||{}; -var BANGLEJS2 = process.env.HWVERSION==2; // Is Bangle.js 2 -var FWVERSION = parseFloat(process.env.VERSION.replace("v","").replace(/\.(\d\d)$/,".0$1")); -var boot = "", bootPost = ""; +let s = require('Storage').readJSON('setting.json',1)||{}; +const BANGLEJS2 = process.env.HWVERSION==2; // Is Bangle.js 2 +const FWVERSION = parseFloat(process.env.VERSION.replace("v","").replace(/\.(\d\d)$/,".0$1")); +const DEBUG = s.bootDebug; // we can set this to enable debugging output in boot0 +let boot = "", bootPost = ""; +if (DEBUG) { + boot += "var _tm=Date.now()\n"; + bootPost += "delete _tm;"; +} if (require('Storage').hash) { // new in 2v11 - helps ensure files haven't changed - var CRC = E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\.boot\.js/)+E.CRC32(process.env.GIT_COMMIT); + let CRC = E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\.boot\.js/)+E.CRC32(process.env.GIT_COMMIT); boot += `if (E.CRC32(require('Storage').read('setting.json'))+require('Storage').hash(/\\.boot\\.js/)+E.CRC32(process.env.GIT_COMMIT)!=${CRC})`; } else { - var CRC = E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\.boot\.js/))+E.CRC32(process.env.GIT_COMMIT); + let CRC = E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\.boot\.js/))+E.CRC32(process.env.GIT_COMMIT); boot += `if (E.CRC32(require('Storage').read('setting.json'))+E.CRC32(require('Storage').list(/\\.boot\\.js/))+E.CRC32(process.env.GIT_COMMIT)!=${CRC})`; } boot += ` { eval(require('Storage').read('bootupdate.js')); throw "Storage Updated!"}\n`; @@ -88,14 +94,25 @@ delete Bangle.showClock; if (!Bangle.showClock) boot += `Bangle.showClock = ()=>{load(".bootcde")};\n`; delete Bangle.load; if (!Bangle.load) boot += `Bangle.load = load;\n`; +let date = new Date(); +delete date.toLocalISOString; // toLocalISOString was only introduced in 2v15 +if (!date.toLocalISOString) boot += `Date.prototype.toLocalISOString = function() { + var o = this.getTimezoneOffset(); + var d = new Date(this.getTime() - o*60000); + var sign = o>0?"-":"+"; + o = Math.abs(o); + return d.toISOString().slice(0,-1)+sign+Math.floor(o/60).toString().padStart(2,0)+(o%60).toString().padStart(2,0); +};\n`; +// show timings +if (DEBUG) boot += `print(".boot0",0|(Date.now()-_tm),"ms");_tm=Date.now();\n` // ================================================== BOOT.JS // Append *.boot.js files // These could change bleServices/bleServiceOptions if needed -var bootFiles = require('Storage').list(/\.boot\.js$/).sort((a,b)=>{ - var getPriority = /.*\.(\d+)\.boot\.js$/; - var aPriority = a.match(getPriority); - var bPriority = b.match(getPriority); +let bootFiles = require('Storage').list(/\.boot\.js$/).sort((a,b)=>{ + let getPriority = /.*\.(\d+)\.boot\.js$/; + let aPriority = a.match(getPriority); + let bPriority = b.match(getPriority); if (aPriority && bPriority){ return parseInt(aPriority[1]) - parseInt(bPriority[1]); } else if (aPriority && !bPriority){ @@ -106,14 +123,16 @@ var bootFiles = require('Storage').list(/\.boot\.js$/).sort((a,b)=>{ return a==b ? 0 : (a>b ? 1 : -1); }); // precalculate file size -var fileSize = boot.length + bootPost.length; +let fileSize = boot.length + bootPost.length; bootFiles.forEach(bootFile=>{ // match the size of data we're adding below in bootFiles.forEach - fileSize += 2+bootFile.length+1+require('Storage').read(bootFile).length+2; + if (DEBUG) fileSize += 2+bootFile.length+1; // `//${bootFile}\n` comment + fileSize += require('Storage').read(bootFile).length+2; // boot code plus ";\n" + if (DEBUG) fileSize += 48+E.toJS(bootFile).length; // `print(${E.toJS(bootFile)},0|(Date.now()-_tm),"ms");_tm=Date.now();\n` }); // write file in chunks (so as not to use up all RAM) require('Storage').write('.boot0',boot,0,fileSize); -var fileOffset = boot.length; +let fileOffset = boot.length; bootFiles.forEach(bootFile=>{ // we add a semicolon so if the file is wrapped in (function(){ ... }() // with no semicolon we don't end up with (function(){ ... }()(function(){ ... }() @@ -122,16 +141,18 @@ bootFiles.forEach(bootFile=>{ // "//"+bootFile+"\n"+require('Storage').read(bootFile)+";\n"; // but we need to do this without ever loading everything into RAM as some // boot files seem to be getting pretty big now. - require('Storage').write('.boot0',"//"+bootFile+"\n",fileOffset); - fileOffset+=2+bootFile.length+1; - var bf = require('Storage').read(bootFile); + if (DEBUG) { + require('Storage').write('.boot0',`//${bootFile}\n`,fileOffset); + fileOffset+=2+bootFile.length+1; + } + let bf = require('Storage').read(bootFile); // we can't just write 'bf' in one go because at least in 2v13 and earlier // Espruino wants to read the whole file into RAM first, and on Bangle.js 1 // it can be too big (especially BTHRM). - var bflen = bf.length; - var bfoffset = 0; + let bflen = bf.length; + let bfoffset = 0; while (bflen) { - var bfchunk = Math.min(bflen, 2048); + let bfchunk = Math.min(bflen, 2048); require('Storage').write('.boot0',bf.substr(bfoffset, bfchunk),fileOffset); fileOffset+=bfchunk; bfoffset+=bfchunk; @@ -139,15 +160,14 @@ bootFiles.forEach(bootFile=>{ } require('Storage').write('.boot0',";\n",fileOffset); fileOffset+=2; + if (DEBUG) { + require('Storage').write('.boot0',`print(${E.toJS(bootFile)},0|(Date.now()-_tm),"ms");_tm=Date.now();\n`,fileOffset); + fileOffset += 48+E.toJS(bootFile).length + } }); require('Storage').write('.boot0',bootPost,fileOffset); - -delete boot; -delete bootPost; -delete bootFiles; -delete fileSize; -delete fileOffset; E.showMessage(/*LANG*/"Reloading..."); -eval(require('Storage').read('.boot0')); +} // .bootcde should be run automatically after if required, since // we normally get called automatically from '.boot0' +eval(require('Storage').read('.boot0')); diff --git a/apps/boot/metadata.json b/apps/boot/metadata.json index bd39beb7f..455563a16 100644 --- a/apps/boot/metadata.json +++ b/apps/boot/metadata.json @@ -1,7 +1,7 @@ { "id": "boot", "name": "Bootloader", - "version": "0.54", + "version": "0.55", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "icon": "bootloader.png", "type": "bootloader", From b47725568c7d08636cdef5a3486276568dcb7bde Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 5 Dec 2022 17:09:22 +0000 Subject: [PATCH 200/342] Not sure how, but core got set to earlier commit --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 764197500..3a953179b 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 76419750083a88ee7a569db3975ae1bdd6dc155a +Subproject commit 3a953179b7bb9f574d4e77d5f34b6b7deee1e884 From 7114d646bc14dc422d239c41f80d6a9f63ba6d3a Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Mon, 5 Dec 2022 20:31:58 +0000 Subject: [PATCH 201/342] Prime Lato: changed to a prime icon --- apps/primetimelato/ChangeLog | 1 + apps/primetimelato/icon.js | 2 +- apps/primetimelato/metadata.json | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/primetimelato/ChangeLog b/apps/primetimelato/ChangeLog index 1be18255b..7781e93a1 100644 --- a/apps/primetimelato/ChangeLog +++ b/apps/primetimelato/ChangeLog @@ -1,3 +1,4 @@ 0.01: first release 0.02: added option to buzz on prime, with settings 0.03: added option to debug settings and test fw 2.15.93 load speed ups +0.04: changed icon diff --git a/apps/primetimelato/icon.js b/apps/primetimelato/icon.js index 06f93e2ef..7c8d5380b 100644 --- a/apps/primetimelato/icon.js +++ b/apps/primetimelato/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwIdah/wAof//4ECgYFB4AFBg4FB8AFBj/wh/4AoM/wEB/gFBvwCEBAU/AQP4gfAj8AgPwAoMPwED8AFBg/AAYIBDA4ngg4TB4EBApkPKgJSBJQIFTMgIFCJIIFDKoIFEvgFBGoMAnw7DP4IFEh+BAoItBg+DNIQwBMIaeCKoKxCPoIzCEgKVHUIqtFXIrFFaIrdFdIwAV")) +require("heatshrink").decompress(atob("mEw4X/AAIHB8cYttrJf4AR1gKJgdYBZMCBZdcBZMNsALKuALJhNABZMFwALJmvAAwkOqvAmtAkwSF83+uEV4EMOIpZBznWII5NB7mXGo5BB7Z0HkpBB6x0HFYXVNA4rC6pcFAANXDQhSFqgaEBZGYaBLfIaAUBBZUJNQ4jCm+cHZPcBZFXgdwzELBg1W/PAy/rBY3VPAOVTY863kAnaPHAH4A/ADAA==")) diff --git a/apps/primetimelato/metadata.json b/apps/primetimelato/metadata.json index dd200e5d3..400220b10 100644 --- a/apps/primetimelato/metadata.json +++ b/apps/primetimelato/metadata.json @@ -1,6 +1,6 @@ { "id": "primetimelato", - "name": "Prime Time Lato", - "version": "0.03", + "name": "Prime Lato", + "version": "0.04", "type": "clock", "description": "A clock that tells you the primes of the time in the Lato font", "icon": "app.png", From d06e4c5a5ec25c357e148568b89154ff2db7f0bc Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 5 Dec 2022 21:34:20 +0100 Subject: [PATCH 202/342] gallery: Do not invert image colors --- apps/gallery/ChangeLog | 3 ++- apps/gallery/app.js | 6 +++--- apps/gallery/metadata.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/gallery/ChangeLog b/apps/gallery/ChangeLog index 76db22053..0167bc1f9 100644 --- a/apps/gallery/ChangeLog +++ b/apps/gallery/ChangeLog @@ -1,2 +1,3 @@ 0.01: New app! -0.02: Submitted to app loader \ No newline at end of file +0.02: Submitted to app loader +0.03: Do not invert colors diff --git a/apps/gallery/app.js b/apps/gallery/app.js index ca9392f13..6fb2bdf49 100644 --- a/apps/gallery/app.js +++ b/apps/gallery/app.js @@ -35,7 +35,7 @@ function drawImage(fileName) { Bangle.setLCDBrightness(1); // Full brightness image = eval(storage.read(fileName)); // Sadly, the only reasonable way to do this - g.clear().reset().drawImage(image, 88, 88, { rotate: angle }); + g.clear().reset().setBgColor(0).setColor("#fff").drawImage(image, 88, 88, { rotate: angle }); } setWatch(info => { @@ -44,9 +44,9 @@ setWatch(info => { else angle = 0; Bangle.buzz(); - g.clear().reset().drawImage(image, 88, 88, { rotate: angle }) + g.clear().reset().setBgColor(0).setColor("#fff").drawImage(image, 88, 88, { rotate: angle }) } }, BTN1, { repeat: true }); // We don't load the widgets because there is no reasonable way to unload them -drawMenu(); \ No newline at end of file +drawMenu(); diff --git a/apps/gallery/metadata.json b/apps/gallery/metadata.json index 0dc8d1613..00ac42075 100644 --- a/apps/gallery/metadata.json +++ b/apps/gallery/metadata.json @@ -1,7 +1,7 @@ { "id": "gallery", "name": "Gallery", - "version": "0.02", + "version": "0.03", "description": "A gallery that lets you view images uploaded with the IDE (see README)", "readme": "README.md", "icon": "icon.png", From 350e0057f417752faa91f62b35eb54a522e56e7a Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 12 Nov 2022 23:29:27 +0100 Subject: [PATCH 203/342] podadrem - compatibility with Fastload Utils --- apps/podadrem/ChangeLog | 1 + apps/podadrem/app.js | 90 +++++++++++++++++++++---------------- apps/podadrem/metadata.json | 2 +- 3 files changed, 53 insertions(+), 40 deletions(-) diff --git a/apps/podadrem/ChangeLog b/apps/podadrem/ChangeLog index c26e40c0e..837ef7941 100644 --- a/apps/podadrem/ChangeLog +++ b/apps/podadrem/ChangeLog @@ -4,3 +4,4 @@ Addict. 0.04: New layout. 0.05: Add widget field, tweak layout. +0.06: Add compatibility with Fastload Utils. diff --git a/apps/podadrem/app.js b/apps/podadrem/app.js index b04d80b17..0e32847ef 100644 --- a/apps/podadrem/app.js +++ b/apps/podadrem/app.js @@ -1,3 +1,4 @@ +{ /* Bluetooth.println(JSON.stringify({t:"intent", action:"", flags:["flag1", "flag2",...], categories:["category1","category2",...], mimetype:"", data:"", package:"", class:"", target:"", extra:{someKey:"someValueOrString"}})); @@ -65,13 +66,14 @@ Since v2020.16 com.bambuna.podcastaddict.service.player.togglespeed – This will toggle the Playback speed for the episode currently playing (alternate between selected speed and 1.0x). */ -var R; -var backToMenu = false; -var dark = g.theme.dark; // bool +let R; +let widgetUtils = require("widget_utils"); +let backToMenu = false; +let dark = g.theme.dark; // bool // The main layout of the app -function gfx() { - //Bangle.drawWidgets(); +let gfx = function() { + widgetUtils.hide(); R = Bangle.appRect; marigin = 8; // g.drawString(str, x, y, solid) @@ -106,10 +108,10 @@ function gfx() { g.setFontAlign(1, 1, 0); g.drawString("Speed", R.x + R.w - 2*marigin, R.y + R.h - 2*marigin); -} +}; // Touch handler for main layout -function touchHandler(_, xy) { +let touchHandler = function(_, xy) { x = xy.x; y = xy.y; len = (R.w { - if (ud) Bangle.musicControl(ud>0 ? "volumedown" : "volumeup"); - } + {mode : "updown", + remove : ()=>{ + Bangle.removeListener("touch", touchHandler); + Bangle.removeListener("swipe", swipeHandler); + clearWatch(buttonHandler); + widgetUtils.show(); + } + }, + ud => { + if (ud) Bangle.musicControl(ud>0 ? "volumedown" : "volumeup"); + } ); Bangle.on("touch", touchHandler); Bangle.on("swipe", swipeHandler); -} + let buttonHandler = setWatch(()=>{load();}, BTN, {edge:'falling'}); +}; /* The functions for interacting with Android and the Podcast Addict app */ -pkg = "com.bambuna.podcastaddict"; -standardCls = pkg + ".receiver.PodcastAddictPlayerReceiver"; -updateCls = pkg + ".receiver.PodcastAddictBroadcastReceiver"; -speed = 1.0; +let pkg = "com.bambuna.podcastaddict"; +let standardCls = pkg + ".receiver.PodcastAddictPlayerReceiver"; +let updateCls = pkg + ".receiver.PodcastAddictBroadcastReceiver"; +let speed = 1.0; -simpleSearch = ""; +let simpleSearch = ""; -function simpleSearchTerm() { // input a simple search term without tags, overrides search with tags (artist and track) +let simpleSearchTerm = function() { // input a simple search term without tags, overrides search with tags (artist and track) require("textinput").input({ text: simpleSearch }).then(result => { @@ -189,9 +199,9 @@ function simpleSearchTerm() { // input a simple search term without tags, overri }).then(() => { E.showMenu(searchMenu); }); -} +}; -function searchPlayWOTags() { //make a search and play using entered terms +let searchPlayWOTags = function() { //make a search and play using entered terms searchString = simpleSearch; Bluetooth.println(JSON.stringify({ t: "intent", @@ -203,9 +213,9 @@ function searchPlayWOTags() { //make a search and play using entered terms }, flags: ["FLAG_ACTIVITY_NEW_TASK"] })); -} +}; -function gadgetbridgeWake() { +let gadgetbridgeWake = function() { Bluetooth.println(JSON.stringify({ t: "intent", target: "activity", @@ -213,15 +223,15 @@ function gadgetbridgeWake() { package: "gadgetbridge", class: "nodomain.freeyourgadget.gadgetbridge.activities.WakeActivity" })); -} +}; // For stringing together the action for Podcast Addict to perform -function actFn(actName, activOrServ) { +let actFn = function(actName, activOrServ) { return "com.bambuna.podcastaddict." + (activOrServ == "service" ? "service." : "") + actName; -} +}; // Send the intent message to Gadgetbridge -function btMsg(activOrServ, cls, actName, xtra) { +let btMsg = function(activOrServ, cls, actName, xtra) { Bluetooth.println(JSON.stringify({ t: "intent", @@ -231,10 +241,10 @@ function btMsg(activOrServ, cls, actName, xtra) { target: "broadcastreceiver", extra: xtra })); -} +}; // Get back to the main layout -function backToGfx() { +let backToGfx = function() { E.showMenu(); g.clear(); g.reset(); @@ -243,10 +253,10 @@ function backToGfx() { setUI(); gfx(); backToMenu = false; -} +}; // Podcast Addict Menu -var paMenu = { +let paMenu = { "": { title: " ", back: backToGfx @@ -271,7 +281,7 @@ var paMenu = { }; -var controlMenu = { +let controlMenu = { "": { title: " ", back: () => {if (backToMenu) E.showMenu(paMenu); @@ -310,7 +320,7 @@ var controlMenu = { }, }; -var speedMenu = { +let speedMenu = { "": { title: " ", back: () => {if (backToMenu) E.showMenu(paMenu); @@ -333,7 +343,7 @@ var speedMenu = { //"Slower" : ()=>{speed-=0.1; speed=((speed<0.1)?0.1:speed); btMsg("service",standardCls,"player.customspeed",{arg1:speed});}, }; -var searchMenu = { +let searchMenu = { "": { title: " ", @@ -356,7 +366,7 @@ var searchMenu = { "Simpler search and play" : searchPlayWOTags, }; -var navigationMenu = { +let navigationMenu = { "": { title: " ", back: () => {if (backToMenu) E.showMenu(paMenu); @@ -372,4 +382,6 @@ var navigationMenu = { Bangle.loadWidgets(); setUI(); +widgetUtils.hide(); gfx(); +} diff --git a/apps/podadrem/metadata.json b/apps/podadrem/metadata.json index 929269762..3d49dfdbd 100644 --- a/apps/podadrem/metadata.json +++ b/apps/podadrem/metadata.json @@ -2,7 +2,7 @@ "id": "podadrem", "name": "Podcast Addict Remote", "shortName": "PA Remote", - "version": "0.05", + "version": "0.06", "description": "Control Podcast Addict on your android device.", "readme": "README.md", "type": "app", From 22b97ac96298d4d8680624f377f6029e88aef799 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Mon, 5 Dec 2022 20:41:42 +0000 Subject: [PATCH 204/342] Prime Lato: changed to a prime icon --- apps/primetimelato/README.md | 2 +- apps/primetimelato/app.png | Bin 710 -> 1455 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/primetimelato/README.md b/apps/primetimelato/README.md index 924a6fae6..0ffd5a3fa 100644 --- a/apps/primetimelato/README.md +++ b/apps/primetimelato/README.md @@ -1,4 +1,4 @@ -# Prime Time Lato (clock) +# Prime Lato (clock) A watchface that displays time and its prime factors in the Lato font. For example when the time is 21:05, the prime factors are 5,421. diff --git a/apps/primetimelato/app.png b/apps/primetimelato/app.png index 2a84c62a07e71744a3721a4a7f8e3caa3721d71c..e5762b97cbfbc9ecfb0bf3c51c5c83947529359f 100644 GIT binary patch literal 1455 zcmV;g1yK5lP)Px)X-PyuRA@u(SZPR&q@sG*rwZs8B@N2Nw22BC;h zKhgv-C6^zHC{z-emQ)BWC>bf`R%EUSfq|mt9%`Hm?=Yh?-#70xLkjc!aeU{#_nz}C z=Xvg!tgf!EViTK*k-$HWo-qRdH~`r25%}`u3!I#suw%y#wZ7WW1bTaW5f&B(Yin!7 z#>V2>wQJbEeY*;g4Nc(ErAsI;FUQKtiU9ul^=o)}d2J2?Gcz;r_4UQ4PoD%}e}8|} z)zx9wu3ejhz{igtar*RW{P^($rlzLI$;m-hR+jjzY#TC#m@-vWRY*%q!`$2)9336; z>eVZ_ySuL|xI z=L{|;@~}d_J}6Kv{-BO9sx3y4jnoq8q<|4 zR}|V_U0tmfw8n&2^M&jb8W|ZuL_`F-y1HOyW`^9{T->~QQ{$Pbsj0Ys|31vk%|%f% zo%pw-qeCU#94p6CE8bij$z!nQ{tAz2MHBJ3?0VWwHpodGiK=fq@Ed78VwYXlPQ3g@pxN zxNt#8BG-6(dyCH;&h%xn2;}GIt9Xx*P*=PXxbg9E#Kgql?c2BFR#j0^A*5HICW`=D zI+a6N;{FQ^WtIfS#>U{_-~i6}E-o(m#4qnsf9%*XusP9KxZl2g(+KAG@87t7{ko!Q zu{*O1>)W)B02S!Kfdd#E926Kh9=v$*VjUi-9ymfU=Otse<%pnf)0)8Y@-p`A+b49K zcIwnAG&VM>#WOoQi<2i$;{E&gLT*VaI5-$DU%u2ge(h6;AXuNwxOMB6;vD{FbMfLu@juD1OLI+BRFs&1copQ7N&>tRN&>(r zG9sLhxNhwbD2IqF0`2YX@bU2h6^5SQy?Zyp!^4HfvuL}!yM=7B!SOrFD7*E~pFhPK zf+pDd`g*WV%F4=c=FAz5*F|lJ$RfZ(=FHDYlqMA@KXaVmSj{V-t*x#2o&`?=)PH5$ zxpSwe2NwF@nk)i5jN?H`NeP}me~yWX3E|QG`}Yf3O-xK&hlfhV`z^b&ot+(cUF1kj zMf<IZDlYK6plC9#C2_7H34NN*1f&$wCm3D!(usgB2N~)e zBLPEsR@;4z5zy9ChFWKgfT29A?Y_ncXzM9MtusczP@dIx-#_QO0-mUQetiG{002ov JPDHLkV1k&)$d>>B literal 710 zcmV;%0y+JOP)Px%fJsC_R9Hvtm^+TbFc5|(bXUD~@YEpQpp&!1vedHBEsjPT^cG zM;ybcdbe!c0b3UI$(&QzDXb~rLc)cF3yHL2;5Q1RAQ}#bY@%AN((!nFiCZidxfVfv zq8@m6zu)su!T0{Zv>2;NWb5I8d`y=R4S}elv5oT zp@7cHvoaD^fhBfzqXILTObFX76JR{ETrNp=IeN$>g@uvANx-k1=n7-f;;h%}JSysL zCJB~1XHvi?g~U6+dIzBR{eF)eohZ9Tz)=(9)udA$MNK+2bW#IGKE=$J^n=tSX-$t| zbzi6hOL`P&gasz8WR#?^Fjg3b;uemmED^O32&9AUmcGzol?iP_O(r z;Iv2Ke=3Yr)#-G?>I~TgUpu8*)7!rp1#1eQPN#>@ut-yCZq?hLLR$ewZGe(d77XNN zwYb;YpTZi~5=joEw%u;GwApOJ599iWa%m^o%Pg&_OR|)WrYo3fC#-~osWThTIba(q sW){O~!&=J{S%8WU7sF|*{dEfe0H(cp6H7fzivR!s07*qoM6N<$f*j~OtpET3 From b124bfade5ff3da2eaf5b3bec10d728cdd1690ff Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 12 Nov 2022 22:35:23 +0100 Subject: [PATCH 205/342] spotrem - compatibility with Fastload Utils --- apps/spotrem/ChangeLog | 1 + apps/spotrem/app.js | 160 ++++++++++++++++++++----------------- apps/spotrem/metadata.json | 2 +- 3 files changed, 87 insertions(+), 76 deletions(-) diff --git a/apps/spotrem/ChangeLog b/apps/spotrem/ChangeLog index 8e3d8b652..f54b4a0fa 100644 --- a/apps/spotrem/ChangeLog +++ b/apps/spotrem/ChangeLog @@ -3,3 +3,4 @@ 0.03: change handling of intent extras. 0.04: New layout. 0.05: Add widgets field. Tweak layout. +0.06: Make compatible with Fastload Utils app. diff --git a/apps/spotrem/app.js b/apps/spotrem/app.js index 7e76d84bc..d66b466d2 100644 --- a/apps/spotrem/app.js +++ b/apps/spotrem/app.js @@ -1,21 +1,23 @@ +{ /* Bluetooth.println(JSON.stringify({t:"intent", action:"", flags:["flag1", "flag2",...], categories:["category1","category2",...], mimetype:"", data:"", package:"", class:"", target:"", extra:{someKey:"someValueOrString"}})); */ -var R; -var backToMenu = false; -var isPaused = true; -var dark = g.theme.dark; // bool +let R; +let widgetUtils = require("widget_utils"); +let backToMenu = false; +let isPaused = true; +let dark = g.theme.dark; // bool // The main layout of the app -function gfx() { - //Bangle.drawWidgets(); +let gfx = function() { + widgetUtils.hide(); R = Bangle.appRect; marigin = 8; // g.drawString(str, x, y, solid) g.clearRect(R); g.reset(); - + if (dark) {g.setColor(0x07E0);} else {g.setColor(0x03E0);} // Green on dark theme, DarkGreen on light theme. g.setFont("4x6:2"); g.setFontAlign(1, 0, 0); @@ -44,10 +46,10 @@ function gfx() { g.setFontAlign(1, 1, 0); g.drawString("Saved", R.x + R.w - 2*marigin, R.y + R.h - 2*marigin); -} +}; // Touch handler for main layout -function touchHandler(_, xy) { +let touchHandler = function(_, xy) { x = xy.x; y = xy.y; len = (R.w { - if (ud) Bangle.musicControl(ud>0 ? "volumedown" : "volumeup"); - } + {mode : "updown", + remove : ()=>{ + Bangle.removeListener("touch", touchHandler); + Bangle.removeListener("swipe", swipeHandler); + clearWatch(buttonHandler); + widgetUtils.show(); + } + }, + ud => { + if (ud) Bangle.musicControl(ud>0 ? "volumedown" : "volumeup"); + } ); Bangle.on("touch", touchHandler); Bangle.on("swipe", swipeHandler); -} - - + let buttonHandler = setWatch(()=>{load();}, BTN, {edge:'falling'}); +}; // Get back to the main layout -function backToGfx() { +let backToGfx = function() { E.showMenu(); g.clear(); g.reset(); @@ -122,109 +130,109 @@ function backToGfx() { setUI(); gfx(); backToMenu = false; -} +}; /* The functions for interacting with Android and the Spotify app */ simpleSearch = ""; -function simpleSearchTerm() { // input a simple search term without tags, overrides search with tags (artist and track) +let simpleSearchTerm = function() { // input a simple search term without tags, overrides search with tags (artist and track) require("textinput").input({text:simpleSearch}).then(result => {simpleSearch = result;}).then(() => {E.showMenu(searchMenu);}); -} +}; artist = ""; -function artistSearchTerm() { // input artist to search for +let artistSearchTerm = function() { // input artist to search for require("textinput").input({text:artist}).then(result => {artist = result;}).then(() => {E.showMenu(searchMenu);}); -} +}; track = ""; -function trackSearchTerm() { // input track to search for +let trackSearchTerm = function() { // input track to search for require("textinput").input({text:track}).then(result => {track = result;}).then(() => {E.showMenu(searchMenu);}); -} +}; album = ""; -function albumSearchTerm() { // input album to search for +let albumSearchTerm = function() { // input album to search for require("textinput").input({text:album}).then(result => {album = result;}).then(() => {E.showMenu(searchMenu);}); -} +}; -function searchPlayWOTags() {//make a spotify search and play using entered terms +let searchPlayWOTags = function() {//make a spotify search and play using entered terms searchString = simpleSearch; Bluetooth.println(JSON.stringify({t:"intent", action:"android.media.action.MEDIA_PLAY_FROM_SEARCH", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", target:"activity", extra:{query:searchString}, flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function searchPlayWTags() {//make a spotify search and play using entered terms +let searchPlayWTags = function() {//make a spotify search and play using entered terms searchString = (artist=="" ? "":("artist:\""+artist+"\"")) + ((artist!="" && track!="") ? " ":"") + (track=="" ? "":("track:\""+track+"\"")) + (((artist!="" && album!="") || (track!="" && album!="")) ? " ":"") + (album=="" ? "":(" album:\""+album+"\"")); Bluetooth.println(JSON.stringify({t:"intent", action:"android.media.action.MEDIA_PLAY_FROM_SEARCH", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", target:"activity", extra:{query:searchString}, flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function playVreden() {//Play the track "Vreden" by Sara Parkman via spotify uri-link +let playVreden = function() {//Play the track "Vreden" by Sara Parkman via spotify uri-link Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:track:5QEFFJ5tAeRlVquCUNpAJY:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function playVredenAlternate() {//Play the track "Vreden" by Sara Parkman via spotify uri-link +let playVredenAlternate = function() {//Play the track "Vreden" by Sara Parkman via spotify uri-link Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:track:5QEFFJ5tAeRlVquCUNpAJY:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function searchPlayVreden() {//Play the track "Vreden" by Sara Parkman via search and play +let searchPlayVreden = function() {//Play the track "Vreden" by Sara Parkman via search and play Bluetooth.println(JSON.stringify({t:"intent", action:"android.media.action.MEDIA_PLAY_FROM_SEARCH", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", target:"activity", extra:{query:'artist:"Sara Parkman" track:"Vreden"'}, flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function openAlbum() {//Play EP "The Blue Room" by Coldplay +let openAlbum = function() {//Play EP "The Blue Room" by Coldplay Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:album:3MVb2CWB36x7VwYo5sZmf2", target:"activity", flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function searchPlayAlbum() {//Play EP "The Blue Room" by Coldplay via search and play +let searchPlayAlbum = function() {//Play EP "The Blue Room" by Coldplay via search and play Bluetooth.println(JSON.stringify({t:"intent", action:"android.media.action.MEDIA_PLAY_FROM_SEARCH", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", target:"activity", extra:{query:'album:"The blue room" artist:"Coldplay"', "android.intent.extra.focus":"vnd.android.cursor.item/album"}, flags:["FLAG_ACTIVITY_NEW_TASK"]})); -} +}; -function spotifyWidget(action) { +let spotifyWidget = function(action) { Bluetooth.println(JSON.stringify({t:"intent", action:("com.spotify.mobile.android.ui.widget."+action), package:"com.spotify.music", target:"broadcastreceiver"})); -} +}; -function gadgetbridgeWake() { +let gadgetbridgeWake = function() { Bluetooth.println(JSON.stringify({t:"intent", target:"activity", flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_CLEAR_TASK", "FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS", "FLAG_ACTIVITY_NO_ANIMATION"], package:"gadgetbridge", class:"nodomain.freeyourgadget.gadgetbridge.activities.WakeActivity"})); -} +}; -function spotifyPlaylistDW() { +let spotifyPlaylistDW = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZEVXcRfaeEbxXIgb:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM1() { +let spotifyPlaylistDM1 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E365VyzxE0mxF:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM2() { +let spotifyPlaylistDM2 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E38LZHLFnrM61:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM3() { +let spotifyPlaylistDM3 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E36RU87qzgBFP:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM4() { +let spotifyPlaylistDM4 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E396gGyCXEBFh:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM5() { +let spotifyPlaylistDM5 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E37a0Tt6CKJLP:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDM6() { +let spotifyPlaylistDM6 = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1E36UIQLQK79od:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistDD() { +let spotifyPlaylistDD = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZF1EfWFiI7QfIAKq:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; -function spotifyPlaylistRR() { +let spotifyPlaylistRR = function() { Bluetooth.println(JSON.stringify({t:"intent", action:"android.intent.action.VIEW", categories:["android.intent.category.DEFAULT"], package:"com.spotify.music", data:"spotify:user:spotify:playlist:37i9dQZEVXbs0XkE2V8sMO:play", target:"activity" , flags:["FLAG_ACTIVITY_NEW_TASK", "FLAG_ACTIVITY_NO_ANIMATION"/*, "FLAG_ACTIVITY_CLEAR_TOP", "FLAG_ACTIVITY_PREVIOUS_IS_TOP"*/]})); -} +}; // Spotify Remote Menu -var spotifyMenu = { - "" : { title : " ", +let spotifyMenu = { + "" : { title : " Menu ", back: backToGfx }, "Controls" : ()=>{E.showMenu(controlMenu);}, "Search and play" : ()=>{E.showMenu(searchMenu);}, @@ -234,8 +242,8 @@ var spotifyMenu = { }; -var controlMenu = { - "" : { title : " ", +let controlMenu = { + "" : { title : " Controls ", back: () => {if (backToMenu) E.showMenu(spotifyMenu); if (!backToMenu) backToGfx();} }, "Play" : ()=>{Bangle.musicControl("play");}, @@ -246,8 +254,8 @@ var controlMenu = { "Messages Music Controls" : ()=>{load("messagesmusic.app.js");}, }; -var searchMenu = { - "" : { title : " ", +let searchMenu = { + "" : { title : " Search ", back: () => {if (backToMenu) E.showMenu(spotifyMenu); if (!backToMenu) backToGfx();} }, "Search term w/o tags" : ()=>{simpleSearchTerm();}, @@ -258,8 +266,8 @@ var searchMenu = { "Execute search and play with tags" : ()=>{searchPlayWTags();}, }; -var savedMenu = { - "" : { title : " ", +let savedMenu = { + "" : { title : " Saved ", back: () => {if (backToMenu) E.showMenu(spotifyMenu); if (!backToMenu) backToGfx();} }, "Play Discover Weekly" : ()=>{spotifyPlaylistDW();}, @@ -278,4 +286,6 @@ var savedMenu = { Bangle.loadWidgets(); setUI(); +widgetUtils.hide(); gfx(); +} diff --git a/apps/spotrem/metadata.json b/apps/spotrem/metadata.json index a0261ba13..ac891f1cc 100644 --- a/apps/spotrem/metadata.json +++ b/apps/spotrem/metadata.json @@ -1,7 +1,7 @@ { "id": "spotrem", "name": "Remote for Spotify", - "version": "0.05", + "version": "0.06", "description": "Control spotify on your android device.", "readme": "README.md", "type": "app", From 684c54e884788b3ad897959cc6689e176d82af7e Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Mon, 5 Dec 2022 22:26:35 +0100 Subject: [PATCH 206/342] rebase on latest changes --- apps/swscroll/ChangeLog | 1 + apps/swscroll/boot.js | 94 ++++++++++++++++++++----------------- apps/swscroll/metadata.json | 2 +- 3 files changed, 52 insertions(+), 45 deletions(-) diff --git a/apps/swscroll/ChangeLog b/apps/swscroll/ChangeLog index c650baf72..c5fc9dcb4 100644 --- a/apps/swscroll/ChangeLog +++ b/apps/swscroll/ChangeLog @@ -1 +1,2 @@ 0.01: Inital release. +0.02: Rebasing on latest changes to showScroller_Q3 (https://github.com/espruino/Espruino/commit/2d3c34ef7c2b9fe2118e816aacd2e096adb99596). diff --git a/apps/swscroll/boot.js b/apps/swscroll/boot.js index fc5650cad..2b1b00de3 100644 --- a/apps/swscroll/boot.js +++ b/apps/swscroll/boot.js @@ -1,13 +1,14 @@ -E.showScroller = (function(options) { +E.showScroller = (function(options) { /* options = { h = height c = # of items scroll = initial scroll position scrollMin = minimum scroll amount (can be negative) draw = function(idx, rect) - select = function(idx) + remove = function() + select = function(idx, touch) } - + returns { draw = draw all drawItem(idx) = draw specific item @@ -15,46 +16,13 @@ E.showScroller = (function(options) { */ if (!options) return Bangle.setUI(); // remove existing handlers -var menuShowing = false; -var R = Bangle.appRect; -var Y = Bangle.appRect.y; -var n = Math.ceil(R.h/options.h); -var menuScrollMin = 0|options.scrollMin; -var menuScrollMax = options.h*options.c - R.h; -if (menuScrollMax { - g.reset().clearRect(R.x,R.y,R.x2,R.y2); - g.setClipRect(R.x,R.y,R.x2,R.y2); - var a = YtoIdx(R.y); - var b = Math.min(YtoIdx(R.y2),options.c-1); - for (var i=a;i<=b;i++) - options.draw(i, {x:R.x,y:idxToY(i),w:R.w,h:options.h}); - g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); -}, drawItem : i => { - var y = idxToY(i); - g.reset().setClipRect(R.x,y,R.x2,y+options.h); - options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); - g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); -}}; -var rScroll = s.scroll&~1; // rendered menu scroll (we only shift by 2 because of dither) -s.draw(); // draw the full scroller -g.flip(); // force an update now to make this snappier Bangle.setUI({ mode : "custom", back : options.back, - swipe : (hor,ver)=>{ + remove : options.remove, + swipe : (_,UD)=>{ pixels = 120; - var dy = ver*pixels; + var dy = UD*pixels; if (s.scroll - dy > menuScrollMax) dy = s.scroll - menuScrollMax-8; // Makes it so the last 'page' has the same position as previous pages. This should be done dynamically (change the static 8 to be a variable) so the offset is correct even when no widget field or title field is present. if (s.scroll - dy < menuScrollMin) @@ -66,7 +34,7 @@ Bangle.setUI({ if (!dy || options.c<=3) return; //options.c<=3 should maybe be dynamic, so 3 would be replaced by a variable dependent on R=Bangle.appRect. It's here so we don't try to scroll if all entries fit in the app rectangle. g.reset().setClipRect(R.x,R.y,R.x2,R.y2); g.scroll(0,dy); - var d = ver*pixels; + var d = UD*pixels; if (d < 0) { g.setClipRect(R.x,R.y2-(1-d),R.x2,R.y2); let i = YtoIdx(R.y2-(1-d)); @@ -92,9 +60,47 @@ Bangle.setUI({ }, touch : (_,e)=>{ if (e.y=0) && i=0) && i { + g.reset().clearRect(R.x,R.y,R.x2,R.y2); + g.setClipRect(R.x,R.y,R.x2,R.y2); + var a = YtoIdx(R.y); + var b = Math.min(YtoIdx(R.y2),options.c-1); + for (var i=a;i<=b;i++) + options.draw(i, {x:R.x,y:idxToY(i),w:R.w,h:options.h}); + g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); +}, drawItem : i => { + var y = idxToY(i); + g.reset().setClipRect(R.x,y,R.x2,y+options.h); + options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); + g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); +}}; +var rScroll = s.scroll&~1; // rendered menu scroll (we only shift by 2 because of dither) +s.draw(); // draw the full scroller +g.flip(); // force an update now to make this snappier return s; -}); +}) diff --git a/apps/swscroll/metadata.json b/apps/swscroll/metadata.json index cb345054e..4edbfa2ba 100644 --- a/apps/swscroll/metadata.json +++ b/apps/swscroll/metadata.json @@ -1,7 +1,7 @@ { "id": "swscroll", "name": "Swipe menus", - "version": "0.01", + "version": "0.02", "description": "Replace built in E.showScroller to act on swipe instead of drag. Navigate menus in discrete steps instead of a continuous motion.", "readme": "README.md", "icon": "app.png", From 341517881bd70657522385f49912ec8d0fd9cc22 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 6 Dec 2022 09:41:54 +0000 Subject: [PATCH 207/342] update docs to put the best solution at the top --- modules/README.md | 49 ++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/modules/README.md b/modules/README.md index 3f8e90b06..fcb403bd5 100644 --- a/modules/README.md +++ b/modules/README.md @@ -18,28 +18,6 @@ so you may see the error "Module not found" in the IDE when sendin To fix this you have three options: -### Host your own App Loader and upload from that - -This is reasonably easy to set up, but it's more difficult to make changes and upload: - -* Follow the steps here to set up your own App Loader: https://www.espruino.com/Bangle.js+App+Loader -* Make changes to that repository -* Refresh and upload your app from the app loader (you can have the IDE connected - at the same time so you can see any error messages) - -### Upload the module to the Bangle's internal storage - -This allows you to develop both the app and module very quickly, but the app is -uploaded in a slightly different way to what you'd get when you use the App Loader -or the method below: - -* Load the module's source file in the Web IDE -* Click the down-arrow below the upload button, then `Storage` -* Click `New File`, type `your_module_name` as the name (with no `.js` extension), click `Ok` -* Now Click the `Upload` icon. - -You can now upload the app direct from the IDE. You can even leave a second Web IDE window open -(one for the app, one for the module) to allow you to change the module. ### Change the Web IDE search path to include Bangle.js modules @@ -56,3 +34,30 @@ The next time you upload your app, the module will automatically be included. **Note:** You can optionally use `https://raw.githubusercontent.com/espruino/BangleApps/master/modules|https://www.espruino.com/modules` as the module URL to pull in modules direct from the development app loader (which could be slightly newer than the ones on https://banglejs.com/apps) + + +### Host your own App Loader and upload from that + +This is reasonably easy to set up, but it's more difficult to make changes and upload: + +* Follow the steps here to set up your own App Loader: https://www.espruino.com/Bangle.js+App+Loader +* Make changes to that repository +* Refresh and upload your app from the app loader (you can have the IDE connected + at the same time so you can see any error messages) + + +### Upload the module to the Bangle's internal storage + +This allows you to develop both the app and module very quickly, but the app is +uploaded in a slightly different way to what you'd get when you use the App Loader +or the method below: + +* Load the module's source file in the Web IDE +* Click the down-arrow below the upload button, then `Storage` +* Click `New File`, type `your_module_name` as the name (with no `.js` extension), click `Ok` +* Now Click the `Upload` icon. + +You can now upload the app direct from the IDE. You can even leave a second Web IDE window open +(one for the app, one for the module) to allow you to change the module. + + From 3e5c0538a9776014a7f99d8c3521d1372dde8a90 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 6 Dec 2022 10:25:32 +0000 Subject: [PATCH 208/342] Support for provides_widgets entry in metadata, and try and tag existing widgets Support for 'default' tag and add it to apps that we expect would be used by default with the Bangle split widalarm out of alarm fixes https://github.com/espruino/BangleApps/issues/2353 --- README.md | 5 ++++- apps/alarm/ChangeLog | 2 +- apps/alarm/metadata.json | 9 ++++----- apps/launch/metadata.json | 1 + apps/messagegui/metadata.json | 1 + apps/messageicons/metadata.json | 1 + apps/messages/metadata.json | 6 +++++- apps/sched/metadata.json | 2 ++ apps/widalarm/ChangeLog | 1 + apps/widalarm/app.png | Bin 0 -> 6229 bytes apps/widalarm/metadata.json | 15 +++++++++++++++ apps/{alarm => widalarm}/widget.js | 0 apps/widalarmeta/metadata.json | 1 + apps/widbat/metadata.json | 2 ++ apps/widbata/metadata.json | 1 + apps/widbatpc/metadata.json | 1 + apps/widbatv/metadata.json | 1 + apps/widbt/metadata.json | 2 ++ apps/widbt_notify/metadata.json | 3 ++- apps/widbthide/metadata.json | 1 + apps/widmessages/metadata.json | 2 ++ bin/sanitycheck.js | 6 +++--- core | 2 +- defaultapps_banglejs2.json | 2 +- 24 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 apps/widalarm/ChangeLog create mode 100644 apps/widalarm/app.png create mode 100644 apps/widalarm/metadata.json rename apps/{alarm => widalarm}/widget.js (100%) diff --git a/README.md b/README.md index 1058787bb..fed13a358 100644 --- a/README.md +++ b/README.md @@ -282,8 +282,11 @@ and which gives information about the app for the Launcher. "dependencies" : { "notify":"type" } // optional, app 'types' we depend on (see "type" above) "dependencies" : { "messages":"app" } // optional, depend on a specific app ID // for instance this will use notify/notifyfs is they exist, or will pull in 'notify' - "dependencies" : { "messageicons":"module" } // optional, depend on a specific library to be used with 'require' + "dependencies" : { "messageicons":"module" } // optional, depend on a specific library to be used with 'require' - see provides_modules + "dependencies" : { "message":"widget" } // optional, depend on a specific type of widget - see provides_widgets "provides_modules" : ["messageicons"] // optional, this app provides a module that can be used with 'require' + "provides_widgets" : ["battery"] // optional, this app provides a type of widget - 'alarm/battery/bluetooth/pedometer/message' + "default" : true, // set if an app is the default implementer of something (a widget/module/etc) "readme": "README.md", // if supplied, a link to a markdown-style text file // that contains more information about this app (usage, etc) // A 'Read more...' link will be added under the app diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 6ce6147ca..9994d33d9 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -36,4 +36,4 @@ 0.33: Allow hiding timers&alarms 0.34: Add "Confirm" option to alarm/timer edit menus 0.35: Add automatic translation of more strings - +0.36: alarm widget moved out of app diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index a02985851..dbf090774 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,17 +2,16 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.35", + "version": "0.36", "description": "Set alarms and timers on your Bangle", "icon": "app.png", - "tags": "tool,alarm,widget", + "tags": "tool,alarm", "supports": [ "BANGLEJS", "BANGLEJS2" ], "readme": "README.md", - "dependencies": { "scheduler":"type" }, + "dependencies": { "scheduler":"type", "alarm":"widget" }, "storage": [ { "name": "alarm.app.js", "url": "app.js" }, - { "name": "alarm.img", "url": "app-icon.js", "evaluate": true }, - { "name": "alarm.wid.js", "url": "widget.js" } + { "name": "alarm.img", "url": "app-icon.js", "evaluate": true } ], "screenshots": [ { "url": "screenshot-1.png" }, diff --git a/apps/launch/metadata.json b/apps/launch/metadata.json index 4d0270e37..85fcdd02f 100644 --- a/apps/launch/metadata.json +++ b/apps/launch/metadata.json @@ -7,6 +7,7 @@ "readme": "README.md", "icon": "app.png", "type": "launch", + "default": true, "tags": "tool,system,launcher", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index b3e70d5d4..f3798f645 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -9,6 +9,7 @@ "supports": ["BANGLEJS","BANGLEJS2"], "dependencies" : { "messageicons":"module" }, "provides_modules": ["messagegui"], + "default": true, "readme": "README.md", "storage": [ {"name":"messagegui","url":"lib.js"}, diff --git a/apps/messageicons/metadata.json b/apps/messageicons/metadata.json index b6ce34f88..b621c55b9 100644 --- a/apps/messageicons/metadata.json +++ b/apps/messageicons/metadata.json @@ -8,6 +8,7 @@ "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], "provides_modules" : ["messageicons"], + "default": true, "storage": [ {"name":"messageicons","url":"lib.js"} ] diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 8bcf3da25..27e771975 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -8,7 +8,11 @@ "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], "provides_modules" : ["messages"], - "dependencies" : { "messagegui":"module","messagewidget":"module" }, + "dependencies" : { + "messagegui":"module", + "message":"widget" + }, + "default": true, "readme": "README.md", "storage": [ {"name":"messages","url":"lib.js"}, diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index a457d0f44..a266d11f8 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -7,6 +7,8 @@ "type": "scheduler", "tags": "tool,system,alarm", "supports": ["BANGLEJS","BANGLEJS2"], + "provides_modules" : ["sched"], + "default" : true, "readme": "README.md", "storage": [ {"name":"sched.boot.js","url":"boot.js"}, diff --git a/apps/widalarm/ChangeLog b/apps/widalarm/ChangeLog new file mode 100644 index 000000000..63568a9bd --- /dev/null +++ b/apps/widalarm/ChangeLog @@ -0,0 +1 @@ +0.01: Moved out of 'alarm' app diff --git a/apps/widalarm/app.png b/apps/widalarm/app.png new file mode 100644 index 0000000000000000000000000000000000000000..a859dd2ef1768b0b260b996ef41920607c080913 GIT binary patch literal 6229 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 literal 0 HcmV?d00001 diff --git a/apps/widalarm/metadata.json b/apps/widalarm/metadata.json new file mode 100644 index 000000000..b91457138 --- /dev/null +++ b/apps/widalarm/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "widalarm", + "name": "Alarms Widget", + "version": "0.01", + "description": "Displays an alarm icon in the widgets bar if any alarm is active", + "icon": "app.png", + "type": "widget", + "tags": "tool,alarm,widget", + "supports": [ "BANGLEJS", "BANGLEJS2" ], + "provides_widgets" : ["alarm"], + "default" : true, + "storage": [ + { "name": "widalarm.wid.js", "url": "widget.js" } + ] +} diff --git a/apps/alarm/widget.js b/apps/widalarm/widget.js similarity index 100% rename from apps/alarm/widget.js rename to apps/widalarm/widget.js diff --git a/apps/widalarmeta/metadata.json b/apps/widalarmeta/metadata.json index b6d8bd62b..ef9f55ba8 100644 --- a/apps/widalarmeta/metadata.json +++ b/apps/widalarmeta/metadata.json @@ -8,6 +8,7 @@ "type": "widget", "tags": "widget", "supports": ["BANGLEJS","BANGLEJS2"], + "provides_widgets" : ["alarm"], "screenshots" : [ { "url":"screenshot.png" } ], "storage": [ {"name":"widalarmeta.wid.js","url":"widget.js"} diff --git a/apps/widbat/metadata.json b/apps/widbat/metadata.json index 0f040396f..993310eb2 100644 --- a/apps/widbat/metadata.json +++ b/apps/widbat/metadata.json @@ -6,6 +6,8 @@ "icon": "widget.png", "type": "widget", "tags": "widget,battery", + "provides_widgets" : ["battery"], + "default" : true, "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widbat.wid.js","url":"widget.js"} diff --git a/apps/widbata/metadata.json b/apps/widbata/metadata.json index 26968a7d7..ddc901e80 100644 --- a/apps/widbata/metadata.json +++ b/apps/widbata/metadata.json @@ -10,6 +10,7 @@ "readme": "README.md", "description": "Shows the current battery level status in the top right using the clocks colour theme", "tags": "widget,battery", + "provides_widgets" : ["battery"], "storage": [ {"name":"widbata.wid.js","url":"widbata.wid.js"} ] diff --git a/apps/widbatpc/metadata.json b/apps/widbatpc/metadata.json index 7da4e3e0c..953f8d345 100644 --- a/apps/widbatpc/metadata.json +++ b/apps/widbatpc/metadata.json @@ -7,6 +7,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,battery", + "provides_widgets" : ["battery"], "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "screenshots": [{"url":"widbatpc.full.jpg"},{"url":"widbatpc.part.jpg"}], diff --git a/apps/widbatv/metadata.json b/apps/widbatv/metadata.json index 37cf6197b..d4ef28315 100644 --- a/apps/widbatv/metadata.json +++ b/apps/widbatv/metadata.json @@ -6,6 +6,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,battery", + "provides_widgets" : ["battery"], "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widbatv.wid.js","url":"widget.js"} diff --git a/apps/widbt/metadata.json b/apps/widbt/metadata.json index e2d5082a5..1623db7a1 100644 --- a/apps/widbt/metadata.json +++ b/apps/widbt/metadata.json @@ -6,6 +6,8 @@ "icon": "widget.png", "type": "widget", "tags": "widget,bluetooth", + "provides_widgets" : ["bluetooth"], + "default" : true, "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widbt.wid.js","url":"widget.js"} diff --git a/apps/widbt_notify/metadata.json b/apps/widbt_notify/metadata.json index 36905a340..5e3f15af2 100644 --- a/apps/widbt_notify/metadata.json +++ b/apps/widbt_notify/metadata.json @@ -6,6 +6,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,bluetooth", + "provides_widgets" : ["bluetooth"], "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widbt_notify.wid.js","url":"widget.js"}, @@ -13,5 +14,5 @@ ], "data": [ {"name":"widbt_notify.json"} - ] + ] } diff --git a/apps/widbthide/metadata.json b/apps/widbthide/metadata.json index 59b13adb4..e3ac5cd54 100644 --- a/apps/widbthide/metadata.json +++ b/apps/widbthide/metadata.json @@ -6,6 +6,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,bluetooth", + "provides_widgets" : ["bluetooth"], "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widbthide.wid.js","url":"widget.js"} diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json index 0c3ac7e05..080e19273 100644 --- a/apps/widmessages/metadata.json +++ b/apps/widmessages/metadata.json @@ -10,6 +10,8 @@ "screenshots": [{"url": "screenshot.gif"}], "dependencies" : { "messageicons":"module" }, "provides_modules" : ["messagewidget"], + "provides_widgets" : ["message"], + "default" : true, "readme": "README.md", "storage": [ {"name":"messagewidget","url":"lib.js"}, diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 0a4765d9c..5af6f1aa1 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -76,7 +76,7 @@ const APP_KEYS = [ 'id', 'name', 'shortName', 'version', 'icon', 'screenshots', 'description', 'tags', 'type', 'sortorder', 'readme', 'custom', 'customConnect', 'interface', 'storage', 'data', 'supports', 'allow_emulator', - 'dependencies', 'provides_modules' + 'dependencies', 'provides_modules', 'provides_widgets', "default" ]; const STORAGE_KEYS = ['name', 'url', 'content', 'evaluate', 'noOverwite', 'supports', 'noOverwrite']; const DATA_KEYS = ['name', 'wildcard', 'storageFile', 'url', 'content', 'evaluate']; @@ -168,8 +168,8 @@ apps.forEach((app,appIdx) => { if (app.dependencies) { if (("object"==typeof app.dependencies) && !Array.isArray(app.dependencies)) { Object.keys(app.dependencies).forEach(dependency => { - if (!["type","app","module"].includes(app.dependencies[dependency])) - ERROR(`App ${app.id} 'dependencies' must all be tagged 'type/app/module' right now`, {file:metadataFile}); + if (!["type","app","module","widget"].includes(app.dependencies[dependency])) + ERROR(`App ${app.id} 'dependencies' must all be tagged 'type/app/module/widget' right now`, {file:metadataFile}); if (app.dependencies[dependency]=="type" && !METADATA_TYPES.includes(dependency)) ERROR(`App ${app.id} 'type' dependency must be one of `+METADATA_TYPES, {file:metadataFile}); }); diff --git a/core b/core index 3a953179b..2a89ea64f 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 3a953179b7bb9f574d4e77d5f34b6b7deee1e884 +Subproject commit 2a89ea64f7874b9264572f68836fe8ecd0a6b191 diff --git a/defaultapps_banglejs2.json b/defaultapps_banglejs2.json index 04bd44504..f96f81f60 100644 --- a/defaultapps_banglejs2.json +++ b/defaultapps_banglejs2.json @@ -1 +1 @@ -["boot","launch","antonclk","health","setting","about","widbat","widbt","widlock","widid"] +["boot","launch","antonclk","health","setting","about","alarm","widbat","widbt","widlock","widid"] From cee04a21bf06522f0cd03760f3d966d412ceb740 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 6 Dec 2022 11:45:50 +0100 Subject: [PATCH 209/342] sleepphasealarm: Do not run buzz() when 'js' is set --- apps/sleepphasealarm/app.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 90cd32c7e..bcb6ddac8 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -173,16 +173,17 @@ if (nextAlarmDate !== undefined) { setTimeout(load, 1000); } else if (measure && now >= minAlarm && swest === false) { addLog(now, "alarm"); + measure = false; if (nextAlarmConfig.js) { eval(nextAlarmConfig.js); // run nextAlarmConfig.js if set - } - buzz(); - measure = false; - if (config.settings.disableAlarm) { - // disable alarm for scheduler - nextAlarmConfig.last = now.getDate(); - require("Storage").writeJSON("sched.json", alarms); - } + } else { + buzz(); + if (config.settings.disableAlarm) { + // disable alarm for scheduler + nextAlarmConfig.last = now.getDate(); + require('Storage').writeJSON('sched.json', alarms); + } + } } }); }; From 224b4560cbf6ee73b4b7ebae7e2934542a609d81 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 6 Dec 2022 11:48:02 +0100 Subject: [PATCH 210/342] sleepphasealarm: format --- apps/sleepphasealarm/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index bcb6ddac8..ba8bff9b2 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -183,7 +183,7 @@ if (nextAlarmDate !== undefined) { nextAlarmConfig.last = now.getDate(); require('Storage').writeJSON('sched.json', alarms); } - } + } } }); }; From 02cdc9fc93062e1ab1e1ba5c9245cd930553f006 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 6 Dec 2022 12:20:52 +0100 Subject: [PATCH 211/342] remove only specific listeners --- apps/spotrem/ChangeLog | 2 ++ apps/spotrem/app.js | 19 +++++++++---------- apps/spotrem/metadata.json | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/spotrem/ChangeLog b/apps/spotrem/ChangeLog index f54b4a0fa..a92ed3de2 100644 --- a/apps/spotrem/ChangeLog +++ b/apps/spotrem/ChangeLog @@ -4,3 +4,5 @@ 0.04: New layout. 0.05: Add widgets field. Tweak layout. 0.06: Make compatible with Fastload Utils app. +0.07: Remove just the specific listeners to not interfere with Quick Launch +when fastloading. diff --git a/apps/spotrem/app.js b/apps/spotrem/app.js index d66b466d2..a0cba3a4d 100644 --- a/apps/spotrem/app.js +++ b/apps/spotrem/app.js @@ -57,8 +57,8 @@ let touchHandler = function(_, xy) { // doing ab-1 instead of a>b. if ((R.x-1 Date: Tue, 6 Dec 2022 12:43:32 +0100 Subject: [PATCH 212/342] remove only specific listeners --- apps/podadrem/ChangeLog | 2 ++ apps/podadrem/app.js | 16 +++++++--------- apps/podadrem/metadata.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/podadrem/ChangeLog b/apps/podadrem/ChangeLog index 837ef7941..3c68f15ac 100644 --- a/apps/podadrem/ChangeLog +++ b/apps/podadrem/ChangeLog @@ -5,3 +5,5 @@ Addict. 0.04: New layout. 0.05: Add widget field, tweak layout. 0.06: Add compatibility with Fastload Utils. +0.07: Remove just the specific listeners to not interfere with Quick Launch +when fastloading. diff --git a/apps/podadrem/app.js b/apps/podadrem/app.js index 0e32847ef..8e59a2464 100644 --- a/apps/podadrem/app.js +++ b/apps/podadrem/app.js @@ -116,11 +116,11 @@ let touchHandler = function(_, xy) { y = xy.y; len = (R.wb-1 instead of a>b. + // doing ab-1 instead of a>=b. if ((R.x-1 Date: Tue, 6 Dec 2022 12:50:23 +0100 Subject: [PATCH 213/342] remove unnecessary removeListener --- apps/spotrem/app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/spotrem/app.js b/apps/spotrem/app.js index a0cba3a4d..f9046c4a6 100644 --- a/apps/spotrem/app.js +++ b/apps/spotrem/app.js @@ -125,8 +125,6 @@ let backToGfx = function() { E.showMenu(); g.clear(); g.reset(); - Bangle.removeListener("touch", touchHandler); - Bangle.removeListener("swipe", swipeHandler); setUI(); gfx(); backToMenu = false; From 4b58d6a2e0067700dc22b3377558c4ce686e0cc9 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 6 Dec 2022 13:03:47 +0100 Subject: [PATCH 214/342] shorten prepended info re intents --- apps/podadrem/app.js | 67 +++----------------------------------------- 1 file changed, 4 insertions(+), 63 deletions(-) diff --git a/apps/podadrem/app.js b/apps/podadrem/app.js index 8e59a2464..9c9ed8b04 100644 --- a/apps/podadrem/app.js +++ b/apps/podadrem/app.js @@ -1,69 +1,10 @@ { /* -Bluetooth.println(JSON.stringify({t:"intent", action:"", flags:["flag1", "flag2",...], categories:["category1","category2",...], mimetype:"", data:"", package:"", class:"", target:"", extra:{someKey:"someValueOrString"}})); + Bluetooth.println(JSON.stringify({t:"intent", action:"", flags:["flag1", "flag2",...], categories:["category1","category2",...], mimetype:"", data:"", package:"", class:"", target:"", extra:{someKey:"someValueOrString"}})); -Podcast Addict is developed by Xavier Guillemane and can be downloaded on Google Play Store: https://play.google.com/store/apps/details?id=com.bambuna.podcastaddict&hl=en_US&gl=US - -Podcast Addict can be controlled through the sending of remote commands called 'Intents'. -Some 3rd parties apps specialized in task automation will then allow you to control Podcast Addict. For example, you will be able to wake up to the sound of your playlist or to start automatically playing when some NFC tag has been detected. -In Tasker, you just need to copy/paste one of the following intent in the task Action field ("Misc" action type then select "Send Itent") . -If you prefer Automate It, you can use the Podcast Addict plugin that will save you some configuration time (https://play.google.com/store/apps/details?id=com.smarterapps.podcastaddictplugin ) -Before using an intent make sure to set the following: -Package: com.bambuna.podcastaddict -Class (UPDATE intent only): com.bambuna.podcastaddict.receiver.PodcastAddictBroadcastReceiver -Class (every other intent): com.bambuna.podcastaddict.receiver.PodcastAddictPlayerReceiver -Here are the supported commands (Intents) : -com.bambuna.podcastaddict.service.player.toggle – Toggle the playlist -com.bambuna.podcastaddict.service.player.stop – Stop the player and release its resources -com.bambuna.podcastaddict.service.player.play – Start playing the playlist -com.bambuna.podcastaddict.service.player.pause – Pause the playlist -com.bambuna.podcastaddict.service.player.nexttrack – Start playing next track -com.bambuna.podcastaddict.service.player.previoustrack – Start playing previous track -com.bambuna.podcastaddict.service.player.jumpforward – Jump 30s forward -com.bambuna.podcastaddict.service.player.jumpbackward – Jump 15s backward -com.bambuna.podcastaddict.service.player.1xspeed - Disable the variable playback speed -com.bambuna.podcastaddict.service.player.1.5xspeed – Force the playback speed at 1.5x -com.bambuna.podcastaddict.service.player.2xspeed – Force the playback speed at 2.0x -com.bambuna.podcastaddict.service.player.stoptimer – Disable the timer -com.bambuna.podcastaddict.service.player.15mntimer – Set the timer at 15 minutes -com.bambuna.podcastaddict.service.player.30mntimer – Set the timer at 30 minutes -com.bambuna.podcastaddict.service.player.60mntimer – Set the timer at 1 hour -com.bambuna.podcastaddict.service.update – Trigger podcasts update -com.bambuna.podcastaddict.openmainscreen – Open the app on the Main screen -com.bambuna.podcastaddict.openplaylist – Open the app on the Playlist screen -com.bambuna.podcastaddict.openplayer – Open the app on the Player screen -com.bambuna.podcastaddict.opennewepisodes – Open the app on the New episodes screen -com.bambuna.podcastaddict.opendownloadedepisodes – Open the app on the Downloaded episodes screen -com.bambuna.podcastaddict.service.player.playfirstepisode – Start playing the first episode in the playlist -com.bambuna.podcastaddict.service.player.customspeed – Select playback speed -In order to use this intent you need to pass a float argument called "arg1". Valid values are within [0.1, 5.0] -com.bambuna.podcastaddict.service.player.customtimer – Start a custom timer -In order to use this intent you need to pass an int argument called "arg1" containing the number of minutes. Valid values are within [1, 1440] -com.bambuna.podcastaddict.service.player.deletecurrentskipnexttrack – Delete the current episode and skip to the next one. It behaves the same way as long pressing on the player >| button, but doesn't display any confirmation popup. -com.bambuna.podcastaddict.service.player.deletecurrentskipprevioustrack – Delete the current episode and skip to the previous one. It behaves the same way as long pressing on the player |< button, but doesn't display any confirmation popup. -com.bambuna.podcastaddict.service.player.boostVolume – Toggle the Volume Boost audio effect -You can pass a, optional boolean argument called "arg1" in order to create a ON or OFF button for the volume boost. Without this parameter the app will just toggle the current value -com.bambuna.podcastaddict.service.player.quickBookmark – Creates a bookmark at the current playback position so you can easily retrieve it later. -com.bambuna.podcastaddict.service.download.pause – Pause downloads -com.bambuna.podcastaddict.service.download.resume – Resume downloads -com.bambuna.podcastaddict.service. download.toggle – Toggle downloads -com.bambuna.podcastaddict.service.player.favorite – Mark the current episode playing as favorite. -com.bambuna.podcastaddict.openplaylist – Open the app on the Playlist screen -You can pass an optional string argument called "arg1" in order to select the playlist to open. Without this parameter the app will open the current playlist -Here's how it works: -##AUDIO## will open the Audio playlist screen -##VIDEO## will open the Video playlist screen -##RADIO## will open the Radio screen -Any other argument will be used as a CATEGORY name. The app will then open this category under the playlist CUSTOM tab -You can pass an optional boolean argument called "arg2" in order to select if the app UI should be opened. Without this parameter the playlist will be displayed -You can pass an optional boolean argument called "arg3" in order to select if the app should start playing the selected playlist. Without this parameter the playback won't start -Since v2020.3 -com.bambuna.podcastaddict.service.full_backup – Trigger a full backup of the app data (relies on the app automatic backup settings for the folder and the # of backup to keep) -This task takes a lot of resources and might take up to a minute to complete, so please avoid using the app at the same time -Since v2020.15 -com.bambuna.podcastaddict.service.player.toggletimer – This will toggle the Sleep Timer using the last duration and parameter used in the app. -Since v2020.16 -com.bambuna.podcastaddict.service.player.togglespeed – This will toggle the Playback speed for the episode currently playing (alternate between selected speed and 1.0x). + Podcast Addict is developed by Xavier Guillemane and can be downloaded on Google Play Store: https://play.google.com/store/apps/details?id=com.bambuna.podcastaddict&hl=en_US&gl=US + + How to use intents to control Podcast Addict: https://podcastaddict.com/faq/130 */ let R; From 8fca0579ce4c46df67175e1e1f379b610d2e4caa Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 6 Dec 2022 14:33:15 +0100 Subject: [PATCH 215/342] noteify: Remove duplicate alarm widget --- apps/noteify/ChangeLog | 1 + apps/noteify/metadata.json | 5 ++--- apps/noteify/widget.js | 8 -------- lang/de_DE.json | 4 ++-- 4 files changed, 5 insertions(+), 13 deletions(-) delete mode 100644 apps/noteify/widget.js diff --git a/apps/noteify/ChangeLog b/apps/noteify/ChangeLog index d7bc46dcd..a37a66731 100644 --- a/apps/noteify/ChangeLog +++ b/apps/noteify/ChangeLog @@ -1,2 +1,3 @@ 0.01: Initial version 0.02: Use default Bangle formatter for booleans +0.03: Drop duplicate alarm widget diff --git a/apps/noteify/metadata.json b/apps/noteify/metadata.json index fbd5a88f1..850628c46 100644 --- a/apps/noteify/metadata.json +++ b/apps/noteify/metadata.json @@ -1,7 +1,7 @@ { "id": "noteify", "name": "Noteify", - "version": "0.02", + "version": "0.03", "description": "Write notes using an onscreen keyboard and use them as custom messages for alarms or timers.", "icon": "app.png", "tags": "tool,alarm", @@ -9,8 +9,7 @@ "readme": "README.md", "storage": [ {"name":"noteify.app.js","url":"app.js"}, - {"name":"noteify.img","url":"app-icon.js","evaluate":true}, - {"name":"noteify.wid.js","url":"widget.js"} + {"name":"noteify.img","url":"app-icon.js","evaluate":true} ], "data": [{"name":"noteify.json"}], "dependencies": {"scheduler":"type","textinput":"type"}, diff --git a/apps/noteify/widget.js b/apps/noteify/widget.js deleted file mode 100644 index 052ac9ebd..000000000 --- a/apps/noteify/widget.js +++ /dev/null @@ -1,8 +0,0 @@ -WIDGETS["alarm"]={area:"tl",width:0,draw:function() { - if (this.width) g.reset().drawImage(atob("GBgBAAAAAAAAABgADhhwDDwwGP8YGf+YMf+MM//MM//MA//AA//AA//AA//AA//AA//AB//gD//wD//wAAAAADwAABgAAAAAAAAA"),this.x,this.y); - },reload:function() { - // don't include library here as we're trying to use as little RAM as possible - WIDGETS["alarm"].width = (require('Storage').readJSON('sched.json',1)||[]).some(alarm=>alarm.on&&(alarm.hidden!==false)) ? 24 : 0; - } -}; -WIDGETS["alarm"].reload(); diff --git a/lang/de_DE.json b/lang/de_DE.json index ef22b588f..84f29a6c2 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -20,7 +20,7 @@ "On": "Ein", "Off": "Aus", "Ok": "OK", - "New Timer": "Neuer Kurzzeitwecker", + "New Timer": "Neuer Timer", "(repeat)": "(Wiederholung)", "music": "Musik", "Keep Msgs": "Nachrichten behalten", @@ -148,7 +148,7 @@ "Whitelist": "Whitelist", "Select Clock": "Uhr auswählen", "Disable": "Deaktivieren", - "Timer": "Kurzzeitwecker", + "Timer": "Timer", "Error in settings": "Fehler in den Einstellungen", "Set Time": "Zeit einstellen", "ALARM": "ALARM", From 80ea9d910c669546199d0db98ab3a83cb5b87ee3 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 6 Dec 2022 17:02:44 +0100 Subject: [PATCH 216/342] adjust some sv_SE translations --- lang/sv_SE.json | 92 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/lang/sv_SE.json b/lang/sv_SE.json index 6e0f30fa4..2c2ff5acf 100644 --- a/lang/sv_SE.json +++ b/lang/sv_SE.json @@ -6,34 +6,34 @@ "Hours": "Timmar", "Minutes": "Minuter", "Enabled": "Aktiverad", - "New Alarm": "Ny alarm", + "New Alarm": "Nytt larm", "Save": "Spara", "Back": "Tillbaka", "Repeat": "Upprepning", "Delete": "Radera", - "ALARM!": "ALURH!", + "ALARM!": "LARM!", "Sleep": "Sömn", "circle 3": "cirkel 3", "circle 1": "cirkel 1", "music": "musik", "week": "vecka", "Keep Msgs": "Behåll meddelanden", - "Auto snooze": "Automatisk snooze", + "Auto snooze": "Auto-snooza", "step length": "steglängd", "Circle": "Cirkel", "data": "uppgifter", - "colorize icon": "färglägga ikonen", - "min. confidence": "Min. förtroende", - "show widgets": "visa widgets", + "colorize icon": "färglägg ikon", + "min. confidence": "min. konfidens", + "show widgets": "visa widgetar", "valid period": "giltig period", "Heartrate": "Hjärtfrekvens", - "distance goal": "mål för distans", + "distance goal": "distansmål", "circle 4": "cirkel 4", "circle count": "antal cirklar", "minimum": "minimum", "maximum": "maximal", "New Timer": "Ny timer", - "battery warn": "batteri varning", + "battery warn": "batterivarning", "heartrate": "hjärtfrekvens", "circle 2": "cirkel 2", "(repeat)": "(upprepning)", @@ -42,30 +42,30 @@ "No Messages": "Inga meddelanden", "Show clocks": "Visa klockor", "STEPS": "STEG", - "TAP right top/bottom": "TAP höger upp/ner", + "TAP right top/bottom": "KNACKA höger upp/ner", "View Message": "Visa meddelande", "Mark Unread": "Markera oläst", - "Are you sure": "Är du säker på att", + "Are you sure": "Är du säker", "Delete all messages": "Radera alla meddelanden", - "Record Run": "Rekordkörning", + "Record Run": "Spåra löprunda", "Unread timer": "Oläst timer", "Vibration": "Vibrationer", - "Utils": "Användaruppgifter", + "Utils": "Verktyg", "Quiet Mode": "Tyst läge", "Passkey BETA": "Passkey BETA", "Dark BW": "Mörk BW", - "BTNs 1:startlap 2:exit 3:reset": "BTN 1:startlap 2:exit 3:reset", - "start&lap/reset, BTN1: EXIT": "start&lap/återställning, BTN1: EXIT", + "BTNs 1:startlap 2:exit 3:reset": "BTN 1:starta varv 2:lämna 3:återställ", + "start&lap/reset, BTN1: EXIT": "starta&varv/återställ, BTN1: LÄMNA", "BLE": "BLE", "Programmable": "Programmerbar", - "Launcher Settings": "Inställningar för lanseringen", - "Vector font size": "Vektor teckensnittsstorlek", + "Launcher Settings": "Inställningar för launchern", + "Vector font size": "Storlek vektortypsnitt", "Font": "Typsnitt", "Yes\ndefinitely": "Ja\ndefinitivt", "App Source\nNot found": "App-källa\nEj funnen", - "Make Connectable": "Gör det möjligt att ansluta", + "Make Connectable": "Gör anslutningsbar", "HID": "HID", - "Bluetooth": "Bluetooth", + "Bluetooth": "Blåtand", "Apps": "Appar", "Piezo": "Piezo", "LCD": "LCD", @@ -73,46 +73,46 @@ "Light BW": "Ljus BW", "Background": "Bakgrund", "Remove": "Ta bort", - "Highlight BG": "Markera BG", + "Highlight BG": "Markering BG", "Customize": "Anpassa", - "Highlight FG": "Highlight FG", + "Highlight FG": "Markering FG", "Background 2": "Bakgrund 2", "LCD Brightness": "Ljusstyrka på LCD-skärmen", "Add Device": "Lägg till enhet", - "Wake on BTN1": "Vakna på BTN1", - "Wake on BTN2": "Vakna på BTN2", - "Twist Timeout": "Twist Timeout", + "Wake on BTN1": "Vakna av BTN1", + "Wake on BTN2": "Vakna av BTN2", + "Twist Timeout": "Vridning Timeout", "Wake on Touch": "Vakna vid beröring", "LCD Timeout": "LCD Timeout", "Foreground": "Förgrund", - "Connect device\nto add to\nwhitelist": "Anslut enhet\nför att lägga till\nvitlista", - "Wake on FaceUp": "Vakna på FaceUp", + "Connect device\nto add to\nwhitelist": "Anslut enhet\nför att lägga till\ni vitlistan", + "Wake on FaceUp": "Skärm upp väcker", "Twist Threshold": "Tröskelvärde för vridning", - "Wake on BTN3": "Wake på BTN3", + "Wake on BTN3": "Vakna av BTN3", "Clock Style": "Klockstil", "Time Zone": "Tidszon", "Twist Max Y": "Vridning Max Y", - "Stay Connectable": "Håll dig tillgänglig", - "This will remove everything": "Detta kommer att ta bort allt", + "Stay Connectable": "Håll anslutningsbar", + "This will remove everything": "Detta kommer ta bort allt", "Turn Off": "Stäng av", "Connectable": "Anslutningsbar", - "Flattening battery - this can take hours.\nLong-press button to cancel": "Platta batterier - detta kan ta flera timmar.\nTryck länge på knappen för att avbryta", - "Reset to Defaults": "Återställ till standardvärden", + "Flattening battery - this can take hours.\nLong-press button to cancel": "Töm batteri - detta kan ta flera timmar.\nTryck länge på knappen för att avbryta", + "Reset to Defaults": "Återställ standardvärden", "Utilities": "Verktyg", - "Flatten Battery": "Platta batterier", - "Debug Info": "Info om felsökning", - "Reset Settings": "Återställa inställningar", - "Wake on Twist": "Väckning på Twist", - "Compact Storage": "Kompakt förvaring", + "Flatten Battery": "Töm batteri", + "Debug Info": "Felsökningsinfo", + "Reset Settings": "Återställ inställningar", + "Wake on Twist": "Vakna av vridning", + "Compact Storage": "Komprimera lagring", "Log": "Logg", "Rewrite Settings": "Omskrivning av inställningar", - "Compacting...\nTakes approx\n1 minute": "Komprimering...\nTar ca.\n1 minut", + "Compacting...\nTakes approx\n1 minute": "Komprimerar...\nTar ca.\n1 minut", "Storage": "Lagring", "Second": "Andra", "App Settings": "App-inställningar", "Invalid settings": "Ogiltiga inställningar", - "Minute": "Protokoll", - "Sleep Phase Alarm": "Larm om sömnfas", + "Minute": "Minut", + "Sleep Phase Alarm": "Sömnfaslarm", "No app has settings": "Ingen app har inställningar", "Hour": "Timme", "No Clocks Found": "Inga klockor hittades", @@ -124,16 +124,16 @@ "TIMER": "TIMER", "on": "på", "OFF": "OFF", - "Side": "Sidan", + "Side": "Sida", "Sort Order": "Sortering", "Left": "Vänster", "Right": "Höger", "Reset All": "Återställ alla", - "Widgets": "Widgets", + "Widgets": "Widgetar", "goal": "mål", "Vibrate": "Vibrera", "Message": "Meddelande", - "Beep": "Piper", + "Beep": "Pip", "Disable": "Inaktivera", "Select Clock": "Välj klocka", "Locale": "Lokalisering", @@ -145,14 +145,14 @@ "Timer": "Timer", "BACK": "TILLBAKA", "Error in settings": "Fel i inställningarna", - "Whitelist": "Whitelist", - "ALARM": "ALARM", + "Whitelist": "Vitlista", + "ALARM": "LARM", "Hide": "Dölj", "Connected": "Ansluten", "Show": "Visa", "On": "På", "Ok": "Ok", - "No": "Ingen", + "No": "Nej", "Settings": "Inställningar", "steps": "steg", "back": "tillbaka", @@ -162,7 +162,7 @@ "Loading": "Laddar", "Music": "Musik", "color": "färg", - "off": "off", + "off": "av", "Off": "Av", "Theme": "Tema", "one": "ett", @@ -197,4 +197,4 @@ "ten to *$2": "tio i *$2", "five to *$2": "fem i *$2" } -} \ No newline at end of file +} From b29a2c4d0b9d10b4d66c41a402c051236ecc2f68 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Tue, 6 Dec 2022 23:12:14 +0000 Subject: [PATCH 217/342] Added simplestpp, basic clock with fast load and clock_info support --- apps/simplestpp/README.md | 54 ++++++++++++++++ apps/simplestpp/app.js | 108 ++++++++++++++++++++++++++++++++ apps/simplestpp/app.png | Bin 0 -> 994 bytes apps/simplestpp/icon.js | 1 + apps/simplestpp/metadata.json | 16 +++++ apps/simplestpp/screenshot1.png | Bin 0 -> 2411 bytes apps/simplestpp/screenshot2.png | Bin 0 -> 2444 bytes apps/simplestpp/screenshot3.png | Bin 0 -> 2622 bytes 8 files changed, 179 insertions(+) create mode 100644 apps/simplestpp/README.md create mode 100644 apps/simplestpp/app.js create mode 100644 apps/simplestpp/app.png create mode 100644 apps/simplestpp/icon.js create mode 100644 apps/simplestpp/metadata.json create mode 100644 apps/simplestpp/screenshot1.png create mode 100644 apps/simplestpp/screenshot2.png create mode 100644 apps/simplestpp/screenshot3.png diff --git a/apps/simplestpp/README.md b/apps/simplestpp/README.md new file mode 100644 index 000000000..4b459bda1 --- /dev/null +++ b/apps/simplestpp/README.md @@ -0,0 +1,54 @@ +# Simplest++ Clock + +The simplest working clock, with fast load and clock_info + +![](screenshot1.png) +![](screenshot2.png) +![](screenshot3.png) + + +Simplest++ has 1 clock info menu that is displayed as a single line at the bottom of the screen. + +This provides a working demo of how to use the clock_info modules. + + +## Usage + +* When the screen is unlocked, tap at the bottom of the csreen on the information text. + It should change color showing it is selected. + +* Swipe up or down to cycle through the info screens that can be displayed + when you have finished tap again towards the centre of the screen to unselect. + +* Swipe left or right to change the type of info screens displayed (by default + there is only one type of data so this will have no effect) + +* Settings are saved automatically and reloaded along with the clock. + +## About Clock Info's + +* The clock info modules enable all clocks to add the display of information to the clock face. + +* The default clock_info module provides a display of battery %, Steps, Heart Rate and Altitude. + +* Installing the [Sunrise ClockInfo](https://banglejs.com/apps/?id=clkinfosunrise) adds Sunrise and Sunset times into the list of info's. + + +## References + +* [What is Fast Load and how does it work](http://www.espruino.com/Bangle.js+Fast+Load) + +* [Clock Info Tutorial](http://www.espruino.com/Bangle.js+Clock+Info) + +* [How to load modules through the IDE](https://github.com/espruino/BangleApps/blob/master/modules/README.md) + + +## With Thanks + +* Gordon for support +* David Peer for his work on BW Clock + + +Written by: [Hugh Barney](https://github.com/hughbarney) For support +and discussion please post in the [Bangle JS +Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/simplestpp/app.js b/apps/simplestpp/app.js new file mode 100644 index 000000000..c07fdbcbb --- /dev/null +++ b/apps/simplestpp/app.js @@ -0,0 +1,108 @@ +/** + * + * Simplestpp Clock + * + * The entire clock code is contained within the block below this + * supports 'fast load' + * + * To add support for clock_info_supprt we add the code marked at [1] and [2] + * + */ + +{ + // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + + let draw = function() { + var date = new Date(); + var timeStr = require("locale").time(date,1); + var h = g.getHeight(); + var w = g.getWidth(); + + g.reset(); + g.setColor(g.theme.bg); + g.fillRect(Bangle.appRect); + + g.setFont('Vector', w/3); + g.setFontAlign(0, 0); + g.setColor(g.theme.fg); + g.drawString(timeStr, w/2, h/2); + clockInfoMenu.redraw(); // clock_info_support + + // schedule a draw for the next minute + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + }; + + /** + * clock_info_support + * this is the callback function that get invoked by clockInfoMenu.redraw(); + * + * We will display the image and text on the same line and centre the combined + * length of the image+text + * + * + */ + let clockInfoDraw = (itm, info, options) => { + + g.reset().setFont('Vector',24).setBgColor(options.bg).setColor(options.fg); + + //use info.text.toString(), steps does not have length defined + var text_w = g.stringWidth(info.text.toString()); + // gap between image and text + var gap = 10; + // width of the image and text combined + var w = gap + (info.img ? 24 :0) + text_w; + // different fg color if we tapped on the menu + if (options.focus) g.setColor(options.hl); + + // clear the whole info line + g.clearRect(0, options.y -1, g.getWidth(), options.y+24); + + // draw the image if we have one + if (info.img) { + // image start + var x = (g.getWidth() / 2) - (w/2); + g.drawImage(info.img, x, options.y); + // draw the text to the side of the image (left/centre alignment) + g.setFontAlign(-1,0).drawString(info.text, x + 23 + gap, options.y+12); + } else { + // text only option, not tested yet + g.setFontAlign(0,0).drawString(info.text, g.getWidth() / 2, options.y+12); + } + + }; + + // clock_info_support + // retrieve all the clock_info modules that are installed + let clockInfoItems = require("clock_info").load(); + + // clock_info_support + // setup the way we wish to interact with the menu + // the hl property defines the color the of the info when the menu is selected after tapping on it + let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:64, y:132, w:50, h:40, draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#0ff"} ); + + // timeout used to update every minute + var drawTimeout; + g.clear(); + + // Show launcher when middle button pressed, add updown button handlers + Bangle.setUI({ + mode : "clock", + remove : function() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + // remove info menu + clockInfoMenu.remove(); + delete clockInfoMenu; + } + }); + + // Load widgets + Bangle.loadWidgets(); + draw(); + setTimeout(Bangle.drawWidgets,0); +} // end of clock diff --git a/apps/simplestpp/app.png b/apps/simplestpp/app.png new file mode 100644 index 0000000000000000000000000000000000000000..814306471485b135eb105e2d63304b06565e4d7e GIT binary patch literal 994 zcmV<810DQ{P)D(Dg!Z*3O znLFp6^F8m~bKkk=at|HxP-=a{P$oUwaS#Wv2an<5RWjFc2^a7U&S4>w{Y_yM)A$N2 zXjj@TwD3!6tu$7ZS-~8RC0zqU6UXs;h0FrZ;0PXHhtO#H?`V=;tjzxnub|Oq?k4e5 z#qbw6v`NEFynxw?zIjY!VY&)KcnizP(06z$qy8!UkaREM4f*0z6Yp1)pTKY~h)N-0h3jV;ZY}D#w zhj{C4yx#5PNwF4}3})G^hp7sW+PhOzxmBL%k-)pD^@6t(mmk%PhvUkvve(__@6>uh zLy&Ld<&A_#m0#E#`+N=uV87sW1tXmVr8O@1X_*`&&z8I`Ja3J+x50F&1m`nY$ z#X!}8J*l4`7@h8MKJ~lT`twimnsT0wa>f8`6U+PR>OY3@j|h^S$n5|@ennb6#cuO} z$oOv5Q1Fg8+|#cCi?!I`D1kpBosR?op%=Yi0{YGPh{!CUY$j17qt6 zowIe*=@$jJ*-k>o>Iij#oDLKZ_edw9QBi1ZV{Zndxg2;}aJp=RBPCHKZi`ywRyow4 zPn=$=J7GRenCa1Yj;D(sx5Wvsxahu? z##YPBiri*1ZxH#eGRH(|@)=Pe+a)RoRa_M(sf!|?pOgO#o*fUSb`R^}U&vwyOs<=L Q@Bjb+07*qoM6N<$f{4=I_5c6? literal 0 HcmV?d00001 diff --git a/apps/simplestpp/icon.js b/apps/simplestpp/icon.js new file mode 100644 index 000000000..bec6c9752 --- /dev/null +++ b/apps/simplestpp/icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///E8MBqtVoALHBQIABBQ0FqgDBitQCwwEIFoISEgoxEiodFFAQEGCQoiFEgsBLQwHDgplHD4UUCYwIDBZY6DBYgsCBZQGEAgwLXLwhvFqALmirvDXIQLPI9ibja677MBZZgELwhnHA4sBHgY6DCYatCAAcVAhASGEgoiEAANVAhASCDwUVIIwTBAARlHgIKBMgwAV")) diff --git a/apps/simplestpp/metadata.json b/apps/simplestpp/metadata.json new file mode 100644 index 000000000..10f756e32 --- /dev/null +++ b/apps/simplestpp/metadata.json @@ -0,0 +1,16 @@ +{ + "id": "simplestpp", + "name": "Simplest++ Clock", + "version": "0.01", + "description": "The simplest working clock, with fast load and clock_info, acts as a tutorial piece", + "readme": "README.md", + "icon": "app.png", + "screenshots": [{"url":"screenshot3.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"simplestpp.app.js","url":"app.js"}, + {"name":"simplestpp.img","url":"icon.js","evaluate":true} + ] +} diff --git a/apps/simplestpp/screenshot1.png b/apps/simplestpp/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..94cb35cd604fd3648c679f135feb4df9101ee5d2 GIT binary patch literal 2411 zcmdT`dpOe#8=ha2ZK*~~4q?r_yzHx&P`3Ichmd30u#u9F$k1wtZI$wx-}AeEl`*IRM2;Ldy@9p~v>VEW0g>Z}S~lFJ z^Ye?DE6cIlMH?cmlUjFp&7GLw*wVFB@36kpdcb9*PWw;a!7O;+(9*rW{dvr>P?rEeeu7F}(#J9cGSB$9LBuXJJ%Jh`Wi<>v5 zUfV2Fp_D#sKDHSGJr3(B}}?q(eMgr0%U*%GXKv!DBwpA$n|@J=xJ z4d@jGpM#T`f1l!utOfa=O&V)CpPlPor=iCU9)x2T)`63at!oEtX)=falzI8H z@AYEL4ug|wVVc7mE;-i2c5SwN9}A#GPv#>vke zdC82%Me98s*PyjvN;+e>Ec=7bx}I6hDc(e$P2JhL^1rS6-^^~;+ycH9oY`)T7)#pC z@KKRgs`=I@?ezr^_wf#m>I(3NFr`y9aP)qc)L0V$ac*E+%NeA8RQAqgG8{ehWY^Vp zRU4`4Z!;AL{VH!F;toC$@;%*8Rj~;yW1wEE@)dustK~VPM6` z;d`bE@E+Box5+So`u|1v%2nFcoJoAIH_Yt36VX-rHewf@m8;le`f=>J%5L#g4t6f` zgC8L(#R!)up7ND%lerjSsga|!UR+JpRf@j6gQ5*iyb3qa#YaWxT7lt`>Marugwyce zG(yNIdg?wMhL6I04FzjiG{qi%&@cQNsH2dBv)Pwn)+WaGk;2{-vieE5DQ~mC{2cdX zXiMmT$*qByybhX5XmENy%K=G>+a-?9g3pPJ>~kNVrL%M<*D7duFkD+L&4j(vNvGR? zNkq-hwXka|D~-07CgBmZxK2)6+GH|>AhnJ-(Nr#}eteg`v+{i=ap9&?HO9$rG4-4W z)0Ob~Wq=D$j~mjyjTGyN8VYg^*VO>2lFTX0K<`U)e`%=aOv)l6{|76Bv<>*?bED%J zFE1+Ifu#pnC4BG*AXZ>jc(klTZaaKH662dJC!_>AC@Dbf80hLTx0ep58C6gY7Eh35olfZ$l+$2A{e zD=iPcIZ9dh2;f`Shk;=Ek)9JR7Dvh!5AMCixHS+ad{VsLUlJo#p48m#KxZuyR${J> zT8}M`Mej0PP-dB@J;(~FgK7s0P$Uy~4R9PY^&b)a87?v?d9V5WQ30twB8qy0ny*Un z4HVdmrVhXL10vp|g=r_3LIv7=1b4WP>QICyowfUA%mZ=7GeSm7eIC^D!px$iwhpjn z5K0;>-DUgn$6dSKSe#{Sm96p0gUGw|$K0#YqdPf+`c<|_(BAob&7gpcFg2?jcM5M~ zSHBJ>PI+Q(Kqx#jFw?6kb=Ush@-RDDk2jJ3Yw_ODQc}zLy5_7|rf|Zz*R4euEiG zY5=0#qp($O@X?0rfhYwy*~l|UZvF`Bk-gVofC=YuwLBOaDzNu#VW7Hm|B$Lp;OHRw z7&cL^F66=s;+95cJYNIWT7ydM3su)x8C#@8f5PFkzER&%Sg!aqXfB&^6?A4UA}<+?^AV2tj8>@_`@5BnFACd&qoxrR=)>;`yt4-;i$qqUvz= z(%JUD<=&to5*{3=?#mqlyA66!n1jl^&d!dwi<`T36vKMkO7e_u`v+GG>AmI)DkJ0H zqo02%Ak#|Pac=|V=luPYs{tpLOumagc#gM38^A`XH#Wvda{$3hZSFxAh9EUqiT{W3 zhizVY6S3>wdc|}6qV)OiDK;|})Zs4K%1O#-oYJ9Yt=NqNst>=uEAifZF`m=>^__cW zd3KuFw}-iFisZL;e}$(08hF+!oK;n>If`4-{}Su^lLi(oMen)NRm*_^dtUUupdwdw z!8je9-&yk}q5^y_or4Tfy~KywtkhUa(6VHim9n9dzX=to&`j@4a( z0hJGXEW|1{Qo2!2sGjROlx{CXX52bU0e5?QH1x--uU~ Ytg!jVig__2`S%2KvUjuN+Xi0w7v-!_{Qv*} literal 0 HcmV?d00001 diff --git a/apps/simplestpp/screenshot2.png b/apps/simplestpp/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..d24d55b029b7bbb2ba5f918188ab2df741526690 GIT binary patch literal 2444 zcmeHJ{X5eOAD&qm4vkt)Wtf-K(>2ReEDIY7qe5P1V&o-^@-j@`I^R>|UD75?JVJ#H z#WuCku5{{>jl7H^YbW89jb-JfH;;3j>-iU+>-pjN;d9?V+@Jft?(6f@r|_f~K}T!1 z76=5=@o;zX-Q&=LVchh(O4j%P5<=A* z^9h%q$cG1ARkoo=f(C^%?zl$bB=6^urIWG7TAV~=qrj3@n7kv?c69HSTsekmer!RR zBVfl%{cC10?W#rr3`IQp*0&7akG z!|xZ{N}=?(TK(I>_({8=WXXp=#W5s+%}=t5Elt`bzUxnL*}qF9N<`Y^#pzeg4U6h? zOvgoVdih+065kaqLEc-dm{UE-F{|&N7+9FtQ>9Q8oH^KxJwBpGb=_Q^pfr2-jVvqA zkoZ-F(ceN@7BMKRDk0->m*!{CT}CkHYB(j>*6VZlPB^X`Ds z1;$b;n0PS+ZR{~3)fi;WL&c$J)f#*mM)YJ*)a?j#-5RY{inuh?E}^?%lpi0pbC<=n<7A6t|1bVwmhcKJKHnU<2} z3MRf-&}W3Sc^tI}lPsV2m7Qo~+T~9Ht^K}eW6#l32O7o!p|orRVN01AiY^a+cJl9L zOB`$pVpLOp_N@fFR7G)_uU|)~Ct72`gb8bXqNk$eO&;jecSiytyp*E2F1_pr3B13$ z7$Qx6-X%J1HrudI7rEQ=J1Pd&j~(Wi?*s*ebcSro!}O;OVLLnkXJlFfOTAFAXW{cOL%^% z8Un*s9*WP~?j%cUJaPShS#+U%H%(HkUi+M@Mh-8Wy?sO`WVk@(-`oBW9?WNI0qRo{ zR7bjl{qhCRqcSG|on-9y@ICB`F1oEgk9T<=P1f^D0$GvwGDCA_ zufK=13H(Tq-eR0~RvCT2tcA9BC=c5uoOi3)vlla>F0yyi_f>&tX@rWWi!;H=l11OZ z-aakXbegGoSq2A=R7zj-FFUq^h}6vaek0pFAt9Ey%?W2O-UBvP(aT(kbz!qTVzjs# zeT&wE+`=`2XVU&415MMk_}U%Ry)`QdJ?zK_{}lK}m+kQiZ!eK1>xr+t8-r#WG{A#0 zaTC<4BH6p@$bSG?7IMUr8mqzpz(s8!tZRfle3uoJIb>y^dDr0*p$|W1%wc!;!%EVO1!-bvkGDBW+tTEio9YuAyyk_$IemipeTBr!AOv@K9fpXUky? zS_yPwr*?d<{+;hSyzxwLvMAHyY{l#rF8$~y3IvwHDf14r0(+0YkUV#mN$l{X9;gH9 zC=sOr5Es^>KAS3|bVAvN5HfqFQc^6e#H4ak{(Gh$YE~wS69F$xIGgVk$ivmkrR_-g GZ~q31IDNPP literal 0 HcmV?d00001 diff --git a/apps/simplestpp/screenshot3.png b/apps/simplestpp/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..af7ae7249bcc816643c766973237ca6472143124 GIT binary patch literal 2622 zcmdUx=|9wu7RUK!)R%OR2P930RsQ^Sjw!rgv89LXUg4;zNWwkQIZbN+Q3h)-mpkI=9pRktL^r;IsDys7{kC|GPo(-@T#ur*A zgP*Qb8B;Gn^mfCH8ueCXVYhZ*rhYi14sg#4m6n%Zb88@J;!B-z3LeABaOM6m)wnR+ z#*l}R%}@(f3ldYN_cmyIcg}?ejvZ1U+Q*k7E`~AQRg_=Hc1@rmP%0!98$D5 z#`&_m7!N4HKi~_k-xTTh{lfkMT1*@271sU&MKRsGTKeRlAPS(^Jxqxvoz6MxIumDS zpiQtUENboR5!E!B^@|YNRtS7}vNRpsLGROqwy)m|44@f#>8nVK4aBx9qqS0-uL!3gyK^98w~pWdTIfC2exL832&aO!dxmut&Gp$h?hOZ+*9KrO0*+q%lK+QIn_*MBM`{ z-f}L58nc0~=I|Qu|26iQbPY3Z-uLg>Pc)|ONlHew1G+xC1>(Si)CjuWLu2+H3-ft7 z2(XgR0pa!0x)O|37ayXO(Zqop(;1Zu_7|t}nn>_1-gcuoTcB~#-g1_X^!*|S)u}B< zyr(gr%dCEACh=hsQCOUMQ3X&*80gAF6v(D(0mYgY>0t&oA`Mq$juZ}?MBEoCUDgY# z2;x0nKpcqu0L_q{rMf4+)PHx$r5BDv^Npw`9u%6U>9s5V ziHL4XuGbKGcyi=fnOVl_mp(d?uGbd%CxpBMC&J@b1e!iaf9ytUSfO^#*_9xVJ)@9~ zS?64F+;6^>vWlgc7c;~amDahwpJ-~lV~espp{Y-D%Nk)yMi{FrwceFsjOdJV`Of=< zrpRPvZ+owRS34Y|1%o2TaZzvQ^{J8j7*6dbf(T5ywx-pkZ2h^CN`KzM=yIn<=3tT& z{@alkK#IbPg)>XTCmBC74(`{21-A0e{1F9UWltIh+SM_lVI{OrxGL`Sbk4ZwTM0n^ z)VZN{8uLmvw#wr*_l~#MIBrh$Re@&m<#NzsR1s$jcO0)=_<*HGJ;Iv9@V>l8NPg=S z!aF4kT<%J_+It@6CeMKGg3VFq+b7}cMTKf}@?2)4%*~bdDVMPW#vQiGWo2`FQw1nM z$`6r$PuZV;`Cv|Xu3y<)C^Q}C^jSu+UK3UOd!W7l=A|iLqGGl5<;`yn9@wRlKgRE_ z@nNzBP_;H+1~&Y+RkSk2KFC@8(77~R-edq7%5sd*9_~A+uJ$#uQl)C$#qfZ$)Aonn zCn#*MD4x4Y+b~IiAAfp*?c$=SB6)r*@^(nJb(#P6slT~kxy)+Eq4ixtm%vZ5U&o|4 zzp{3bcBBWus$W}Op;NFSV$N;!XdBAJG^J5VI`bOu>A)LG%e+3s1Id~E;dNc9Z9;sF z^T9OzRq*i?qJYcjFa?}>yDvObq>+vYA5)r=>Q62+wARJ5?u6kyse1T^9&2k`Npvco z#7%GA9g@>*0>C00pi@R8y)p)t@LnFVVw!VDPNTL(>3@10#yzNwi^oUw?!&Z86z*cSZHZu$IIV-d-#`<5!dZ)B_P$9{~x!hiJ1^ZCuYPwt|B#4Wc#q@(+)Dx6H=iu1t;Od9{YK9awY342hsnqn7~>fKl7JTty?^Bk{`D{Dxjx z5ZdBp3FQz(pu8oX>oZ9=HJz^2dUp|nD;b$EXk0XU-L-Lkm+=9yGXZ-Tn^nmcXo*0N|&%mcNW z$rX5JFG+;);AuAnjJskbwdQ6LN=??qmcJw++0a+~$uR zT;xV?OCT=4w5~re6LaFDyO(g!`Qk9D*HUHC2$st?c)}B{>aEF2zwdw>%Sz@hR=+#D zYSUhM4=n`|&zmuyE zCgM{47L^_kiNzQ=%2R=A`mZEf08yO&p4RsYtR(#P*uc&vsfX0xR9N#Djl;Afwmf)U mt3+UJSgN=~_5XTppA$@wb>`Tlh_fF;4pSp5! Date: Tue, 6 Dec 2022 23:19:28 +0000 Subject: [PATCH 218/342] Added simplestpp, updated icon --- apps/simplestpp/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/simplestpp/icon.js b/apps/simplestpp/icon.js index bec6c9752..92e0fa271 100644 --- a/apps/simplestpp/icon.js +++ b/apps/simplestpp/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEw4UA///E8MBqtVoALHBQIABBQ0FqgDBitQCwwEIFoISEgoxEiodFFAQEGCQoiFEgsBLQwHDgplHD4UUCYwIDBZY6DBYgsCBZQGEAgwLXLwhvFqALmirvDXIQLPI9ibja677MBZZgELwhnHA4sBHgY6DCYatCAAcVAhASGEgoiEAANVAhASCDwUVIIwTBAARlHgIKBMgwAV")) +require("heatshrink").decompress(atob("mEwwIROj/4Aof//4ECgfgg/AAoMPAQPwAQMcAQM4AQNwAQMOAQPgAQMHgEBDQUDwEBwAFBAYMDGQfAgwJCgFgAosMAocwAosYAocYApcwAocMAqUHO4PgAo4jWJqJrLQZaVFUIqtFXIrFGaIrdFdIr1FgEf/AFDABIA=")) From c5086ad9351d7f30ecc0302a6c6a3e917221d4bd Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Tue, 6 Dec 2022 23:28:06 +0000 Subject: [PATCH 219/342] Added simplestpp, updated icon --- apps/simplestpp/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/simplestpp/icon.js b/apps/simplestpp/icon.js index 92e0fa271..f8186ffce 100644 --- a/apps/simplestpp/icon.js +++ b/apps/simplestpp/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwIROj/4Aof//4ECgfgg/AAoMPAQPwAQMcAQM4AQNwAQMOAQPgAQMHgEBDQUDwEBwAFBAYMDGQfAgwJCgFgAosMAocwAosYAocYApcwAocMAqUHO4PgAo4jWJqJrLQZaVFUIqtFXIrFGaIrdFdIr1FgEf/AFDABIA=")) +require("heatshrink").decompress(atob("mEwwMB/4AW/ggDn/4Aocf+IQDx/zAofPArP+v4F+NgUfAo5N/U7QFDaIrdFdIr/PAA4=")) From 8f535ff067a3515dd410233868a8ef7095275092 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Tue, 6 Dec 2022 23:43:07 +0000 Subject: [PATCH 220/342] Added simplestpp, updated icon --- apps/simplestpp/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/simplestpp/icon.js b/apps/simplestpp/icon.js index f8186ffce..e4e40c82c 100644 --- a/apps/simplestpp/icon.js +++ b/apps/simplestpp/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwMB/4AW/ggDn/4Aocf+IQDx/zAofPArP+v4F+NgUfAo5N/U7QFDaIrdFdIr/PAA4=")) +require("heatshrink").decompress(atob("mEw4X/AAIHBqOM997IGkq1AKIltVqt4BQ0DBQIAB4ALFktVv/9qtYBYvVA4Ulq4KEgNVwAEBgVVoALDgtcAoc1qAFDitgAocJqguEGoowDgVWBYuVGoUBFwgwCHgUNGgUNuBCCAYY6CBYcJCYUlDYYLCgJxCmozCBYcCG4UVG4QLDgBgCBZeXBY/WBYcC1WtvWqGoILEVAIACJoILQgf/+tf/7jBBYg7JL66DLTZazLZZbjLfZcA6oLFq4EDio8CHQReCGgQwEmpCCHgVVFIUCVAQAD6plCkouEA4VVv/9qoPCAAcDZYa/BAAstBQN4BQwABlWoBRAAr")) From 9cd7106f38ebfe36dc6ff5b8446a81f1c784e5b7 Mon Sep 17 00:00:00 2001 From: Hank Date: Wed, 7 Dec 2022 10:27:29 +0100 Subject: [PATCH 221/342] Add Rotation on swipe Down --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/README.md | 1 + apps/hworldclock/app.js | 52 ++++++++++++++++++++++++++++++++++ apps/hworldclock/metadata.json | 2 +- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 8c1517842..158ea1c91 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -9,3 +9,4 @@ 0.23: Added note to configure position in "my location" if not done yet. Small fixes. 0.24: Added fast load 0.25: Minor code optimization +0.26: Swipe down to rotate 180° diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 25cc368ca..073a7c8a9 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -14,6 +14,7 @@ Provide names and the UTC offsets for up to three other timezones in the app sto The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. +Swipe down to rotate screen. So you can show the time to a friend real quick. ## Requests diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index c80b712da..c5e1942a5 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -7,6 +7,7 @@ var showSunInfo; var colorWhenDark; // ------- Settings file +const BANGLEJS2 = process.env.HWVERSION == 2; const big = g.getWidth()>200; // Font for primary time and date const primaryTimeFontSize = big?6:5; @@ -24,6 +25,7 @@ const xcol1 = 10; const xcol2 = g.getWidth() - xcol1; const font = "6x8"; +let drag; /* TODO: we could totally use 'Layout' here and avoid a whole bunch of hard-coded offsets */ @@ -317,6 +319,56 @@ Bangle.drawWidgets(); draw(); + +function initDragEvents() { + +if (BANGLEJS2) { + Bangle.on("drag", e => { + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + if (Math.abs(dx)>Math.abs(dy)+10) { + // horizontal + if (dx < dy) { + + } else { + + } + } else if (Math.abs(dy)>Math.abs(dx)+10) { + // vertical + if (dx < dy) { + g.clear().setRotation(2); + //console.log(" + draw(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + + } else { + g.clear().setRotation(0); + draw(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + } + } else { + //console.log("tap " + e.x + " " + e.y); + if (e.x > 145 && e.y > 145) { + + } + } + } + }); + } else { + //setWatch(addDrink, BTN1, { repeat: true, debounce:50 }); + //setWatch(removeDrink, BTN3, { repeat: true, debounce:50 }); + //setWatch(previousDrink, BTN4, { repeat: true, debounce:50 }); + //setWatch(nextDrink, BTN5, { repeat: true, debounce:50 }); + } +} + +initDragEvents(); + if (!Bangle.isLocked()) { // Initial state if (showSunInfo) { if (PosInterval != 0 && typeof PosInterval != 'undefined') clearInterval(PosInterval); diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index e26599373..7dba8f752 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.25", + "version": "0.26", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From 973b8e1565bc1183546fc6e5f6f22fe1eb03d38e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 7 Dec 2022 09:58:45 +0000 Subject: [PATCH 222/342] circlesclock 0.19: Remove old code and fixing clkinfo handling (fix HRM and other items that change) --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 693 +++----------------------------- apps/circlesclock/metadata.json | 2 +- apps/circlesclock/settings.js | 8 +- 4 files changed, 66 insertions(+), 638 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index 8ec578fb6..b1b5637ad 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -32,3 +32,4 @@ Use widget_utils if available 0.17: Load circles from clkinfo 0.18: Improved clkinfo handling and using it for the weather circle +0.19: Remove old code and fixing clkinfo handling (fix HRM and other items that change) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index ee6741398..11036dcfc 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -18,7 +18,6 @@ let settings = Object.assign( storage.readJSON("circlesclock.default.json", true) || {}, storage.readJSON(SETTINGS_FILE, true) || {} ); - //TODO deprecate this (and perhaps use in the clkinfo module) // Load step goal from health app and pedometer widget as fallback if (settings.stepGoal == undefined) { @@ -31,17 +30,7 @@ if (settings.stepGoal == undefined) { } } -let timerHrm; //TODO deprecate this let drawTimeout; - -/* - * Read location from myLocation app - */ -function getLocation() { - return storage.readJSON("mylocation.json", 1) || undefined; -} -let location = getLocation(); - let showWidgets = settings.showWidgets || false; let circleCount = settings.circleCount || 3; let showBigWeather = settings.showBigWeather || false; @@ -106,39 +95,9 @@ let circleItemNum = [ 2, // circle3 3, // circle4 ]; -let weatherCircleNum = 0; -let weatherCircleDataNum = 0; -let weatherCircleCondNum = 0; -let weatherCircleTempNum = 0; - -function hideWidgets() { - /* - * we are not drawing the widgets as we are taking over the whole screen - * so we will blank out the draw() functions of each widget and change the - * area to the top bar doesn't get cleared. - */ - if (WIDGETS && typeof WIDGETS === "object") { - for (let wd of WIDGETS) { - wd.draw = () => {}; - wd.area = ""; - } - } -} function draw() { - g.clear(true); - let widgetUtils; - - try { - widgetUtils = require("widget_utils"); - } catch (e) { - } - if (!showWidgets) { - if (widgetUtils) widgetUtils.hide(); else hideWidgets(); - } else { - if (widgetUtils) widgetUtils.show(); - Bangle.drawWidgets(); - } + g.reset().clearRect(Bangle.appRect); g.setColor(colorBg); g.fillRect(0, widgetOffset, w, h2 + 22); @@ -180,117 +139,18 @@ function draw() { if (icon) g.drawImage(icon, w - 48, h1, {scale:0.75}); } - drawCircle(1); - drawCircle(2); - drawCircle(3); - if (circleCount >= 4) drawCircle(4); + // FIXME do we really need to redraw circles every time? + for (var i=1;i<=circleCount;i++) + drawCircle(i); queueDraw(); } -function drawCircle(index) { - let type = settings['circle' + index]; - if (!type) type = defaultCircleTypes[index - 1]; - let w = getCircleXPosition(type); - - switch (type) { - case "weather": - drawWeather(w); - break; - case "sunprogress": - case "sunProgress": - drawSunProgress(w); - break; - //TODO those are going to be deprecated, keep for backwards compatibility for now - //ideally all data should come from some clkinfo - case "steps": - drawSteps(w); - break; - case "stepsDist": - drawStepsDistance(w); - break; - case "hr": - drawHeartRate(w); - break; - case "battery": - drawBattery(w); - break; - case "temperature": - drawTemperature(w); - break; - case "pressure": - drawPressure(w); - break; - case "altitude": - drawAltitude(w); - break; - //end deprecated - case "empty": - // we draw nothing here - return; - default: - drawClkInfo(index, w); - } -} - -// serves as cache for quicker lookup of circle positions -let circlePositionsCache = []; -/* - * Looks in the following order if a circle with the given type is somewhere visible/configured - * 1. circlePositionsCache - * 2. settings - * 3. defaultCircleTypes - * - * In case 2 and 3 the circlePositionsCache will be updated - */ -function getCirclePosition(type) { - if (circlePositionsCache[type] >= 0) { - return circlePositionsCache[type]; - } - for (let i = 1; i <= circleCount; i++) { - let setting = settings['circle' + i]; - if (setting == type) { - circlePositionsCache[type] = i - 1; - return i - 1; - } - } - for (let i = 0; i < defaultCircleTypes.length; i++) { - if (type == defaultCircleTypes[i] && (!settings || settings['circle' + (i + 1)] == undefined)) { - circlePositionsCache[type] = i; - return i; - } - } - return undefined; -} - -function getCircleXPosition(type) { - let circlePos = getCirclePosition(type); - if (circlePos != undefined) { - return circlePosX[circlePos]; - } - return undefined; -} - -function isCircleEnabled(type) { - return getCirclePosition(type) != undefined; -} - -function getCircleColor(type) { - let pos = getCirclePosition(type); - let color = settings["circle" + (pos + 1) + "color"]; +function getCircleColor(index) { + let color = settings["circle" + index + "color"]; if (color && color != "") return color; } -function getCircleIconColor(type, color, percent) { - let pos = getCirclePosition(type); - let colorizeIcon = settings["circle" + (pos + 1) + "colorizeIcon"] == true; - if (colorizeIcon) { - return getGradientColor(color, percent); - } else { - return ""; - } -} - function getGradientColor(color, percent) { if (isNaN(percent)) percent = 0; if (percent > 1) percent = 1; @@ -311,422 +171,15 @@ function getGradientColor(color, percent) { return color; } -function getImage(graphic, color) { - if (!color || color == "") { - return graphic; +function getCircleIconColor(index, color, percent) { + let colorizeIcon = settings["circle" + index + "colorizeIcon"] == true; + if (colorizeIcon) { + return getGradientColor(color, percent); } else { - return { - width: 16, - height: 16, - bpp: 1, - transparent: 0, - buffer: E.toArrayBuffer(graphic), - palette: new Uint16Array([colorBg, g.toColor(color)]) - }; + return ""; } } -function drawWeather(w) { - if (!w) w = getCircleXPosition("weather"); - let weatherInfo = menu[weatherCircleNum]; - let weatherCond = weatherCircleCondNum >= 0? weatherInfo.items[weatherCircleCondNum]: undefined; - let weatherData = weatherCircleDataNum >= 0? weatherInfo.items[weatherCircleDataNum]: undefined; - let weatherTemp = weatherCircleTempNum >= 0? weatherInfo.items[weatherCircleTempNum]: undefined; - let color = getCircleColor("weather"); - let percent = 0; - let data = settings.weatherCircleData; - let tempString = "?", icon = undefined; - let scale = 16/24; //our icons are 16x16 while clkinfo's are 24x24 - - if(weatherCond) { - weatherCond.show() - weatherCond.hide() - let data = weatherCond.get() - if(settings.legacyWeatherIcons) { //may disappear in future - icon = getWeatherIconByCode(data.v); - scale = 1; - } else - icon = data.img; - } - if(weatherTemp) { - weatherTemp.show() - weatherTemp.hide() - tempString = weatherTemp.get().text; - } - - drawCircleBackground(w); - - if(weatherData) { - weatherData.show(); - weatherData.hide(); - let data = weatherData.get(); - if(weatherData.hasRange) percent = (data.v-data.min) / (data.max-data.min); - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - writeCircleText(w, tempString); - - if(icon) { - g.setColor(getCircleIconColor("weather", color, percent)) - .drawImage(icon, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: scale}); - } else { - g.drawString("?", w, h3 + radiusOuter); - } -} -function drawWeatherOld(w) { - if (!w) w = getCircleXPosition("weather"); - let weather = getWeather(); - let tempString = weather ? locale.temp(weather.temp - 273.15) : undefined; - let code = weather ? weather.code : -1; - - drawCircleBackground(w); - - let color = getCircleColor("weather"); - let percent; - let data = settings.weatherCircleData; - switch (data) { - case "humidity": - let humidity = weather ? weather.hum : undefined; - if (humidity >= 0) { - percent = humidity / 100; - drawGauge(w, h3, percent, color); - } - break; - case "wind": - if (weather) { - let wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/); - if (wind[1] >= 0) { - if (wind[2] == "kmh") { - wind[1] = windAsBeaufort(wind[1]); - } - // wind goes from 0 to 12 (see https://en.wikipedia.org/wiki/Beaufort_scale) - percent = wind[1] / 12; - drawGauge(w, h3, percent, color); - } - } - break; - case "empty": - break; - } - - drawInnerCircleAndTriangle(w); - - writeCircleText(w, tempString ? tempString : "?"); - - if (code > 0) { - let icon = getWeatherIconByCode(code); - if (icon) g.drawImage(getImage(icon, getCircleIconColor("weather", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); - } else { - g.drawString("?", w, h3 + radiusOuter); - } -} - -function drawSunProgress(w) { - if (!w) w = getCircleXPosition("sunprogress"); - let percent = getSunProgress(); - - // sunset icons: - let sunSetDown = atob("EBCBAAAAAAABgAAAAAATyAZoBCB//gAAAAAGYAPAAYAAAAAA"); - let sunSetUp = atob("EBCBAAAAAAABgAAAAAATyAZoBCB//gAAAAABgAPABmAAAAAA"); - - drawCircleBackground(w); - - let color = getCircleColor("sunprogress"); - - drawGauge(w, h3, percent, color); - - drawInnerCircleAndTriangle(w); - - let icon = sunSetDown; - let text = "?"; - let times = getSunData(); - if (times != undefined) { - let sunRise = Math.round(times.sunrise.getTime() / 1000); - let sunSet = Math.round(times.sunset.getTime() / 1000); - if (!isDay()) { - // night - if (now > sunRise) { - // after sunRise - let upcomingSunRise = sunRise + 60 * 60 * 24; - text = formatSeconds(upcomingSunRise - now); - } else { - text = formatSeconds(sunRise - now); - } - icon = sunSetUp; - } else { - // day, approx sunrise tomorrow: - text = formatSeconds(sunSet - now); - icon = sunSetDown; - } - } - - writeCircleText(w, text); - - g.drawImage(getImage(icon, getCircleIconColor("sunprogress", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); -} - -/* - * Deprecated but nice as references for clkinfo - */ - -function drawSteps(w) { - if (!w) w = getCircleXPosition("steps"); - let steps = getSteps(); - - drawCircleBackground(w); - - let color = getCircleColor("steps"); - - let percent; - let stepGoal = settings.stepGoal; - if (stepGoal > 0) { - percent = steps / stepGoal; - if (stepGoal < steps) percent = 1; - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - writeCircleText(w, shortValue(steps)); - - g.drawImage(getImage(atob("EBCBAAAACAAcAB4AHgAeABwwADgGeAZ4AHgAMAAAAHAAIAAA"), getCircleIconColor("steps", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); -} - -function drawStepsDistance(w) { - if (!w) w = getCircleXPosition("stepsDistance"); - let steps = getSteps(); - let stepDistance = settings.stepLength; - let stepsDistance = Math.round(steps * stepDistance); - - drawCircleBackground(w); - - let color = getCircleColor("stepsDistance"); - - let percent; - let stepDistanceGoal = settings.stepDistanceGoal; - if (stepDistanceGoal > 0) { - percent = stepsDistance / stepDistanceGoal; - if (stepDistanceGoal < stepsDistance) percent = 1; - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - writeCircleText(w, shortValue(stepsDistance)); - - g.drawImage(getImage(atob("EBCBAAAACAAcAB4AHgAeABwwADgGeAZ4AHgAMAAAAHAAIAAA"), getCircleIconColor("stepsDistance", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); -} - -function drawHeartRate(w) { - if (!w) w = getCircleXPosition("hr"); - - let heartIcon = atob("EBCBAAAAAAAeeD/8P/x//n/+P/w//B/4D/AH4APAAYAAAAAA"); - - drawCircleBackground(w); - - let color = getCircleColor("hr"); - - let percent; - if (hrtValue != undefined) { - let minHR = settings.minHR; - let maxHR = settings.maxHR; - percent = (hrtValue - minHR) / (maxHR - minHR); - if (isNaN(percent)) percent = 0; - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - writeCircleText(w, hrtValue != undefined ? hrtValue : "-"); - - g.drawImage(getImage(heartIcon, getCircleIconColor("hr", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); -} - -function drawBattery(w) { - if (!w) w = getCircleXPosition("battery"); - let battery = E.getBattery(); - - let powerIcon = atob("EBCBAAAAA8ADwA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AH4AAA"); - - drawCircleBackground(w); - - let color = getCircleColor("battery"); - - let percent; - if (battery > 0) { - percent = battery / 100; - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - if (Bangle.isCharging()) { - color = colorGreen; - } else { - if (settings.batteryWarn != undefined && battery <= settings.batteryWarn) { - color = colorRed; - } - } - writeCircleText(w, battery + '%'); - - g.drawImage(getImage(powerIcon, getCircleIconColor("battery", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); -} -function drawTemperature(w) { - if (!w) w = getCircleXPosition("temperature"); - - getPressureValue("temperature").then((temperature) => { - drawCircleBackground(w); - - let color = getCircleColor("temperature"); - - let percent; - if (temperature) { - let min = -40; - let max = 85; - percent = (temperature - min) / (max - min); - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - if (temperature) - writeCircleText(w, locale.temp(temperature)); - - g.drawImage(getImage(atob("EBCBAAAAAYADwAJAAkADwAPAA8ADwAfgB+AH4AfgA8ABgAAA"), getCircleIconColor("temperature", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); - - }); -} - -function drawPressure(w) { - if (!w) w = getCircleXPosition("pressure"); - - getPressureValue("pressure").then((pressure) => { - drawCircleBackground(w); - - let color = getCircleColor("pressure"); - - let percent; - if (pressure && pressure > 0) { - let minPressure = 950; - let maxPressure = 1050; - percent = (pressure - minPressure) / (maxPressure - minPressure); - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - if (pressure) - writeCircleText(w, Math.round(pressure)); - - g.drawImage(getImage(atob("EBCBAAAAAYADwAJAAkADwAPAA8ADwAfgB+AH4AfgA8ABgAAA"), getCircleIconColor("pressure", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); - - }); -} - -function drawAltitude(w) { - if (!w) w = getCircleXPosition("altitude"); - - getPressureValue("altitude").then((altitude) => { - drawCircleBackground(w); - - let color = getCircleColor("altitude"); - - let percent; - if (altitude) { - let min = 0; - let max = 10000; - percent = (altitude - min) / (max - min); - drawGauge(w, h3, percent, color); - } - - drawInnerCircleAndTriangle(w); - - if (altitude) - writeCircleText(w, locale.distance(Math.round(altitude))); - - g.drawImage(getImage(atob("EBCBAAAAAYADwAJAAkADwAPAA8ADwAfgB+AH4AfgA8ABgAAA"), getCircleIconColor("altitude", color, percent)), w - iconOffset, h3 + radiusOuter - iconOffset); - - }); -} - -function shortValue(v) { - if (isNaN(v)) return '-'; - if (v <= 999) return v; - if (v >= 1000 && v < 10000) { - v = Math.floor(v / 100) * 100; - return (v / 1000).toFixed(1).replace(/\.0$/, '') + 'k'; - } - if (v >= 10000) { - v = Math.floor(v / 1000) * 1000; - return (v / 1000).toFixed(1).replace(/\.0$/, '') + 'k'; - } -} - -function getSteps() { - if (Bangle.getHealthStatus) { - return Bangle.getHealthStatus("day").steps; - } - if (WIDGETS && WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom.getSteps(); - } - return 0; -} - -function getPressureValue(type) { - return new Promise((resolve) => { - if (Bangle.getPressure) { - if (!pressureLocked) { - pressureLocked = true; - if (pressureCache && pressureCache[type]) { - resolve(pressureCache[type]); - } - Bangle.getPressure().then(function(d) { - pressureLocked = false; - if (d) { - pressureCache = d; - if (d[type]) { - resolve(d[type]); - } - } - }).catch(() => {}); - } else { - if (pressureCache && pressureCache[type]) { - resolve(pressureCache[type]); - } - } - } - }); -} - -/* - * end deprecated - */ - -var menu = null; -function reloadMenu() { - menu = clock_info.load(); - for(var i=1; i<5; i++) - if(settings['circle'+i].includes("/")) { - let parts = settings['circle'+i].split("/"); - let infoName = parts[0], itemName = parts[1]; - let infoNum = menu.findIndex(e=>e.name==infoName); - let itemNum = 0; //get first if dynamic - if(!menu[infoNum].dynamic) - itemNum = menu[infoNum].items.findIndex(it=>it.name==itemName); - circleInfoNum[i-1] = infoNum; - circleItemNum[i-1] = itemNum; - } else if(settings['circle'+i] == "weather") { - weatherCircleNum = menu.findIndex(e=>e.name.toLowerCase() == "weather"); - weatherCircleDataNum = menu[weatherCircleNum].items.findIndex(it=>it.name==settings.weatherCircleData); - weatherCircleCondNum = menu[weatherCircleNum].items.findIndex(it=>it.name=="condition"); - weatherCircleTempNum = menu[weatherCircleNum].items.findIndex(it=>it.name=="temperature"); - } -} -//reload periodically for changes? -reloadMenu(); - function drawEmpty(img, w, color) { drawGauge(w, h3, 0, color); drawInnerCircleAndTriangle(w); @@ -736,45 +189,32 @@ function drawEmpty(img, w, color) { .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } -function drawClkInfo(index, w) { +function drawCircle(index) { var info = menu[circleInfoNum[index-1]]; var type = settings['circle'+index]; - if (!w) w = getCircleXPosition(type); + var w = circlePosX[index-1]; drawCircleBackground(w); - const color = getCircleColor(type); - var item = info.items[circleItemNum[index-1]]; + const color = getCircleColor(index); + var item = info && info.items[circleItemNum[index-1]]; if(!info || !item) { drawEmpty(info? info.img : null, w, color); return; } - item.show(); - item.hide(); var data=item.get(); var img = data.img; var percent = 1; //fill up if no range - var txt = data.text; + var txt = ""+data.text; + if (txt.endsWith(" bpm")) txt=txt.slice(0,-4); // hack for heart rate - remove the 'bpm' text if(!img) img = info.img; if(item.hasRange) percent = (data.v-data.min) / (data.max-data.min); if(data.short) txt = data.short; drawGauge(w, h3, percent, color); drawInnerCircleAndTriangle(w); writeCircleText(w, txt); - g.setColor(getCircleIconColor(type, color, percent)) + g.setColor(getCircleIconColor(index, color, percent)) .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } -/* - * wind goes from 0 to 12 (see https://en.wikipedia.org/wiki/Beaufort_scale) - */ -function windAsBeaufort(windInKmh) { - let beaufort = [2, 6, 12, 20, 29, 39, 50, 62, 75, 89, 103, 118]; - let l = 0; - while (l < beaufort.length && beaufort[l] < windInKmh) { - l++; - } - return l; -} - /* * Choose weather icon to display based on weather conditition code @@ -795,7 +235,7 @@ function getWeatherIconByCode(code, big) { let weatherFoggy = big ? atob("QEDBAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAwADwADAAAAHgAPAAeAAAAfAA8AD4AAAA+ADwAfAAAAB8APAD4AAAAD4B+AfAAAAAHw//D4AAAAAPv//fAAAAAAf///4AAAAAA/4H/AAAAAAB+AH4AAAAAAPgAHwAAAAAA8AAPAAAAAAHwAA+AAAAAAeAAB4AAAAAB4AAHgAAAAAPAAAPAAAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AD///AADwAAAP//8AAeAAAA///wAB4AAAD///AAPgAAAAAAAAA8AAAAAAAAAHwAAAAAAAAB+AAAAAAAAAf8AAAAD///D/4AAAAP//8P3wAAAA///w8PgAAAD///CAfAAAAAAAAAA+AAAAAAAAAB8AAAAAAAAAD4AAAAAAAAAHgAAP//8PAAMAAA///w8AAAAAD///DwAAAAAP//8PAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAAADwAZgDDA4EGAcQAZAAgAAf74AAAAAd/4AAAAA"); let weatherStormy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4AAAAAAAfg+AAAAAAAAfHwAAAAAAAA+eAAAAAAAAB54AAAAD/AAHvAAAAAf4AAP8AAAAB/gAA/wAAAAP8AAD/AAAAA/gAAP8AAAAH+AAA/wAAAAfwAAD3gAAAD/AAAeeAAAAP4AAB58AAAB/AAAPj4AAAH8AAB8H4AAA/gAAfgP//+D//D/8Af//4f/4P/gA///B//B/8AAf/8P/8P+AAAAAAAPgAAAAAAAAB8AAAAAAAAAHwAAAAAAAAA+AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB4AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAYAH4AwwOBBgGEAOQMJAgjmOGcgAgACAAAAAAAAA"); let unknown = big ? atob("QEDBAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAH//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAA/AAD4AAAAAD4H4HwAAAAAfB/4PgAAAAB8P/weAAAAAHg//h4AAAAA+Hw+HwAAAAD4eB8PAAAAAP/wDw8AAAAA//APDwAAAAD/8A8PAAAAAH/gDw8AAAAAAAAfDwAAAAAAAH4fAAAAAAAB/B4AAAAAAAf4HgAAAAAAD/A+AAAAAAAfwHwAAAAAAD8A+AAAAAAAPgH4AAAAAAB8B/AAAAAAAHgf4AAAAAAA+H+AAAAAAADwfwAAAAAAAPD8AAAAAAAA8PAAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAADw8AAAAAAAAPDwAAAAAAAA8PAAAAAAAADw8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : undefined; - + switch (codeGroup) { case 2: return weatherStormy; @@ -823,7 +263,9 @@ function getWeatherIconByCode(code, big) { case 8: switch (code) { case 800: - return isDay() ? weatherSunny : weatherMoon; + var hr = (new Date()).getHours(); + var isDay = (hr>6) && (hr<=18); // fixme we don't want to include ALL of suncalc just to choose one icon + return isDay ? weatherSunny : weatherMoon; case 801: return weatherPartlyCloudy; case 802: @@ -836,16 +278,6 @@ function getWeatherIconByCode(code, big) { } } - -function isDay() { - let times = getSunData(); - if (times == undefined) return true; - let sunRise = Math.round(times.sunrise.getTime() / 1000); - let sunSet = Math.round(times.sunset.getTime() / 1000); - - return (now > sunRise && now < sunSet); -} - function formatSeconds(s) { if (s > 60 * 60) { // hours return Math.round(s / (60 * 60)) + "h"; @@ -856,45 +288,6 @@ function formatSeconds(s) { return "<1m"; } -function getSunData() { - if (location != undefined && location.lat != undefined) { - let SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); - // get today's sunlight times for lat/lon - return SunCalc ? SunCalc.getTimes(new Date(), location.lat, location.lon) : undefined; - } - return undefined; -} - -/* - * Calculated progress of the sun between sunrise and sunset in percent - * - * Taken from rebble app and modified - */ -function getSunProgress() { - let times = getSunData(); - if (times == undefined) return 0; - let sunRise = Math.round(times.sunrise.getTime() / 1000); - let sunSet = Math.round(times.sunset.getTime() / 1000); - - if (isDay()) { - // during day - let dayLength = sunSet - sunRise; - if (now > sunRise) { - return (now - sunRise) / dayLength; - } else { - return (sunRise - now) / dayLength; - } - } else { - // during night - if (now < sunRise) { - let prevSunSet = sunSet - 60 * 60 * 24; - return 1 - (sunRise - now) / (sunRise - prevSunSet); - } else { - let upcomingSunRise = sunRise + 60 * 60 * 24; - return (upcomingSunRise - now) / (upcomingSunRise - sunSet); - } - } -} /* * Draws the background and the grey circle @@ -961,18 +354,54 @@ function getWeather() { return jsonWeather && jsonWeather.weather ? jsonWeather.weather : undefined; } + +var menu = clock_info.load(); +for(var i=1; i<5; i++) { + var circleType = settings['circle'+i]; + if(circleType.includes("/")) { + let parts = circleType.split("/"); + let infoName = parts[0], itemName = parts[1]; + let infoNum = menu.findIndex(e=>e.name==infoName); + if (infoNum<0) infoNum=0; // not found! + let itemNum = 0; //get first if dynamic + if(!menu[infoNum].dynamic) + itemNum = menu[infoNum].items.findIndex(it=>it.name==itemName); + if (itemNum<0) itemNum=0; + circleInfoNum[i-1] = infoNum; + circleItemNum[i-1] = itemNum; + let menuItem = menu[infoNum].items[itemNum]; + if (menuItem) { + (function(i){ + menuItem.on('redraw', function() { + drawCircle(i); + }); + })(i); + menuItem.show(); + } + } else { // empty? + circleInfoNum[i-1] = -1; + circleItemNum[i-1] = -1; + } +} + Bangle.setUI({ mode : "clock", - remove : function() { + /*remove : function() { + THIS CLOCK IS NOT YET ABLE TO UNLOAD ALL OF ITSELF. + DO NOT UNCOMMENT THIS WITOUT FIXING IT + OR THERE WILL BE HUGE MEMORY LEAKS // Called to unload all of the clock app if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - + // must call clkinfo.hide here for any showing clkinfo delete Graphics.prototype.setFontRobotoRegular50NumericOnly; delete Graphics.prototype.setFontRobotoRegular21; - }}); + }*/ +}); Bangle.loadWidgets(); +if (!showWidgets) require("widget_utils").hide(); +else Bangle.drawWidgets(); // schedule a draw for the next second or minute function queueDraw() { diff --git a/apps/circlesclock/metadata.json b/apps/circlesclock/metadata.json index fb743ae4c..3b436a032 100644 --- a/apps/circlesclock/metadata.json +++ b/apps/circlesclock/metadata.json @@ -1,7 +1,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.18", + "version":"0.19", "description": "A clock with three or four circles for different data at the bottom in a probably familiar style", "icon": "app.png", "screenshots": [{"url":"screenshot-dark.png"}, {"url":"screenshot-light.png"}, {"url":"screenshot-dark-4.png"}, {"url":"screenshot-light-4.png"}], diff --git a/apps/circlesclock/settings.js b/apps/circlesclock/settings.js index 2ab655f01..2e9506a98 100644 --- a/apps/circlesclock/settings.js +++ b/apps/circlesclock/settings.js @@ -12,17 +12,15 @@ storage.write(SETTINGS_FILE, settings); } - //const valuesCircleTypes = ["empty", "steps", "stepsDist", "hr", "battery", "weather", "sunprogress", "temperature", "pressure", "altitude", "timer"]; - //const namesCircleTypes = ["empty", "steps", "distance", "heart", "battery", "weather", "sun", "temperature", "pressure", "altitude", "timer"]; - var valuesCircleTypes = ["empty","weather", "sunprogress"]; - var namesCircleTypes = ["empty","weather", "sun"]; + var valuesCircleTypes = ["empty"]; + var namesCircleTypes = ["empty"]; clock_info.load().forEach(e=>{ if(e.dynamic) { valuesCircleTypes = valuesCircleTypes.concat([e.name+"/"]); namesCircleTypes = namesCircleTypes.concat([e.name]); } else { let values = e.items.map(i=>e.name+"/"+i.name); - let names =e.name=="Bangle" ? e.items.map(i=>i.name) : values; + let names = e.name=="Bangle" ? e.items.map(i=>i.name) : values; valuesCircleTypes = valuesCircleTypes.concat(values); namesCircleTypes = namesCircleTypes.concat(names); } From 416d5d0fff6e02d6f4c80e54df7555f3381237e0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 7 Dec 2022 10:54:34 +0000 Subject: [PATCH 223/342] Remove settings for what is displayed and instead allow circles to be changed by swiping --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/README.md | 20 ++++-- apps/circlesclock/app.js | 109 ++++++++++----------------------- apps/circlesclock/default.json | 4 -- apps/circlesclock/settings.js | 21 ------- 5 files changed, 50 insertions(+), 105 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index b1b5637ad..9e36f67ba 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -33,3 +33,4 @@ 0.17: Load circles from clkinfo 0.18: Improved clkinfo handling and using it for the weather circle 0.19: Remove old code and fixing clkinfo handling (fix HRM and other items that change) + Remove settings for what is displayed and instead allow circles to be changed by swiping diff --git a/apps/circlesclock/README.md b/apps/circlesclock/README.md index 8c8fbe4ae..7f6a2585c 100644 --- a/apps/circlesclock/README.md +++ b/apps/circlesclock/README.md @@ -5,6 +5,7 @@ A clock with three or four circles for different data at the bottom in a probabl By default the time, date and day of week is shown. It can show the following information (this can be configured): + * Steps * Steps distance * Heart rate (automatically updates when screen is on and unlocked) @@ -14,15 +15,24 @@ It can show the following information (this can be configured): * Temperature inside circle * Condition as icon below circle * Big weather icon next to clock - * Time and progress until next sunrise or sunset (requires [my location app](https://banglejs.com/apps/#mylocation)) - * Temperature, air pressure or altitude from internal pressure sensor + * Altitude from internal pressure sensor + * Active alarms (if `Alarm` app installed) + * Sunrise or sunset (if `Sunrise Clockinfo` app installed) +To change what is shown: -The color of each circle can be configured. The following colors are available: +* Unlock the watch +* Tap on the circle to change (a border is drawn around it) +* Swipe up/down to change the guage within the given group +* Swipe left/right to change the group (eg. between standard Bangle.js and Alarms/etc) + +Data is provided by ['Clock Info'](http://www.espruino.com/Bangle.js+Clock+Info) +so any apps that implement this feature can add extra information to be displayed. + +The color of each circle can be configured from `Settings -> Apps -> Circles Clock`. The following colors are available: * Basic colors (red, green, blue, yellow, magenta, cyan, black, white) * Color depending on value (green -> red, red -> green) - ## Screenshots ![Screenshot dark theme](screenshot-dark.png) ![Screenshot light theme](screenshot-light.png) @@ -38,5 +48,5 @@ The color of each circle can be configured. The following colors are available: Marco ([myxor](https://github.com/myxor)) ## Icons -Most of the icons are taken from [materialdesignicons](https://materialdesignicons.com) under Apache License 2.0 except the big weather icons which are from +Most of the icons are taken from [materialdesignicons](https://materialdesignicons.com) under Apache License 2.0 except the big weather icons which are from [icons8](https://icons8.com/icon/set/weather/small--static--black) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 11036dcfc..efd0b0aa6 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -41,11 +41,6 @@ let now = Math.round(new Date().getTime() / 1000); // layout values: let colorFg = g.theme.dark ? '#fff' : '#000'; let colorBg = g.theme.dark ? '#000' : '#fff'; -let colorGrey = '#808080'; -let colorRed = '#ff0000'; -let colorGreen = '#008000'; -let colorBlue = '#0000ff'; -let colorYellow = '#ffff00'; let widgetOffset = showWidgets ? 24 : 0; let dowOffset = circleCount == 3 ? 20 : 22; // dow offset relative to date let h = g.getHeight() - widgetOffset; @@ -53,7 +48,7 @@ let w = g.getWidth(); let hOffset = (circleCount == 3 ? 34 : 30) - widgetOffset; let h1 = Math.round(1 * h / 5 - hOffset); let h2 = Math.round(3 * h / 5 - hOffset); -let h3 = Math.round(8 * h / 8 - hOffset - 3); // circle y position +let h3 = Math.round(8 * h / 8 - hOffset - 3); // circle middle y position /* * circle x positions @@ -76,28 +71,17 @@ let circlePosX = [ ]; let radiusOuter = circleCount == 3 ? 25 : 20; +let radiusBorder = radiusOuter+3; // absolute border of circles let radiusInner = circleCount == 3 ? 20 : 15; let circleFontSmall = circleCount == 3 ? "Vector:14" : "Vector:10"; let circleFont = circleCount == 3 ? "Vector:15" : "Vector:11"; let circleFontBig = circleCount == 3 ? "Vector:16" : "Vector:12"; let iconOffset = circleCount == 3 ? 6 : 8; -let defaultCircleTypes = ["Bangle/Steps", "Bangle/HRM", "Bangle/Battery", "weather"]; -let circleInfoNum = [ - 0, // circle1 - 0, // circle2 - 0, // circle3 - 0, // circle4 -]; -let circleItemNum = [ - 0, // circle1 - 1, // circle2 - 2, // circle3 - 3, // circle4 -]; function draw() { - g.reset().clearRect(Bangle.appRect); + let R = Bangle.appRect; + g.reset().clearRect(R.x,R.y, R.x2, h3-(radiusBorder+1)); g.setColor(colorBg); g.fillRect(0, widgetOffset, w, h2 + 22); @@ -139,16 +123,13 @@ function draw() { if (icon) g.drawImage(icon, w - 48, h1, {scale:0.75}); } - // FIXME do we really need to redraw circles every time? - for (var i=1;i<=circleCount;i++) - drawCircle(i); - queueDraw(); } function getCircleColor(index) { let color = settings["circle" + index + "color"]; if (color && color != "") return color; + return g.theme.fg; } function getGradientColor(color, percent) { @@ -176,7 +157,7 @@ function getCircleIconColor(index, color, percent) { if (colorizeIcon) { return getGradientColor(color, percent); } else { - return ""; + return g.theme.fg; } } @@ -189,23 +170,15 @@ function drawEmpty(img, w, color) { .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } -function drawCircle(index) { - var info = menu[circleInfoNum[index-1]]; - var type = settings['circle'+index]; +function drawCircle(index, item, data) { var w = circlePosX[index-1]; drawCircleBackground(w); const color = getCircleColor(index); - var item = info && info.items[circleItemNum[index-1]]; - if(!info || !item) { - drawEmpty(info? info.img : null, w, color); - return; - } - var data=item.get(); + //drawEmpty(info? info.img : null, w, color); var img = data.img; var percent = 1; //fill up if no range var txt = ""+data.text; if (txt.endsWith(" bpm")) txt=txt.slice(0,-4); // hack for heart rate - remove the 'bpm' text - if(!img) img = info.img; if(item.hasRange) percent = (data.v-data.min) / (data.max-data.min); if(data.short) txt = data.short; drawGauge(w, h3, percent, color); @@ -293,12 +266,11 @@ function formatSeconds(s) { * Draws the background and the grey circle */ function drawCircleBackground(w) { - g.clearRect(w - radiusOuter - 3, h3 - radiusOuter - 3, w + radiusOuter + 3, h3 + radiusOuter + 3); // Draw rectangle background: g.setColor(colorBg); - g.fillRect(w - radiusOuter - 3, h3 - radiusOuter - 3, w + radiusOuter + 3, h3 + radiusOuter + 3); + g.fillRect(w - radiusBorder, h3 - radiusBorder, w + radiusBorder, g.getHeight()-1); // Draw grey background circle: - g.setColor(colorGrey); + g.setColor('#808080'); // grey g.fillCircle(w, h3, radiusOuter); } @@ -310,10 +282,6 @@ function drawInnerCircleAndTriangle(w) { g.fillPoly([w, h3, w - 15, h3 + radiusOuter + 5, w + 15, h3 + radiusOuter + 5]); } -function radians(a) { - return a * Math.PI / 180; -} - /* * This draws the actual gauge consisting out of lots of little filled circles */ @@ -332,10 +300,12 @@ function drawGauge(cx, cy, percent, color) { color = getGradientColor(color, percent); g.setColor(color); + // FIXME: this one loop takes 0.25 sec EACH TIME the function is called for (let i = startRotation; i > endRotation - size; i -= size) { - x = cx + radius * Math.sin(radians(i)); - y = cy + radius * Math.cos(radians(i)); - g.fillCircle(x, y, size); + let r = i * Math.PI / 180; // radians + g.fillCircle( + cx + radius * Math.sin(r), + cy + radius * Math.cos(r), size); } } @@ -354,35 +324,7 @@ function getWeather() { return jsonWeather && jsonWeather.weather ? jsonWeather.weather : undefined; } - -var menu = clock_info.load(); -for(var i=1; i<5; i++) { - var circleType = settings['circle'+i]; - if(circleType.includes("/")) { - let parts = circleType.split("/"); - let infoName = parts[0], itemName = parts[1]; - let infoNum = menu.findIndex(e=>e.name==infoName); - if (infoNum<0) infoNum=0; // not found! - let itemNum = 0; //get first if dynamic - if(!menu[infoNum].dynamic) - itemNum = menu[infoNum].items.findIndex(it=>it.name==itemName); - if (itemNum<0) itemNum=0; - circleInfoNum[i-1] = infoNum; - circleItemNum[i-1] = itemNum; - let menuItem = menu[infoNum].items[itemNum]; - if (menuItem) { - (function(i){ - menuItem.on('redraw', function() { - drawCircle(i); - }); - })(i); - menuItem.show(); - } - } else { // empty? - circleInfoNum[i-1] = -1; - circleItemNum[i-1] = -1; - } -} +g.clear(1); // clear the whole screen Bangle.setUI({ mode : "clock", @@ -393,12 +335,29 @@ Bangle.setUI({ // Called to unload all of the clock app if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - // must call clkinfo.hide here for any showing clkinfo + for(var i=1;i<=circleCount; i++) + clockInfoMenu[i].remove(); delete Graphics.prototype.setFontRobotoRegular50NumericOnly; delete Graphics.prototype.setFontRobotoRegular21; }*/ }); +let clockInfoDraw = (itm, info, options) => { + //print("Draw",itm.name,options); + drawCircle(options.circlePosition, itm, info); + if (options.focus) g.reset().drawRect(options.x, options.y, options.x+options.w-2, options.y+options.h-1) +}; +let clockInfoItems = require("clock_info").load(); +let clockInfoMenu = []; +for(var i=0;i{ - if(e.dynamic) { - valuesCircleTypes = valuesCircleTypes.concat([e.name+"/"]); - namesCircleTypes = namesCircleTypes.concat([e.name]); - } else { - let values = e.items.map(i=>e.name+"/"+i.name); - let names = e.name=="Bangle" ? e.items.map(i=>i.name) : values; - valuesCircleTypes = valuesCircleTypes.concat(values); - namesCircleTypes = namesCircleTypes.concat(names); - } - }) - - const valuesColors = ["", "#ff0000", "#00ff00", "#0000ff", "#ffff00", "#ff00ff", "#00ffff", "#fff", "#000", "green-red", "red-green", "fg"]; const namesColors = ["default", "red", "green", "blue", "yellow", "magenta", @@ -103,12 +88,6 @@ const menu = { '': { 'title': /*LANG*/'Circle ' + circleId }, /*LANG*/'< Back': ()=>showMainMenu(), - /*LANG*/'data': { - value: valuesCircleTypes.indexOf(settings[circleName]), - min: 0, max: valuesCircleTypes.length - 1, - format: v => namesCircleTypes[v], - onchange: x => save(circleName, valuesCircleTypes[x]), - }, /*LANG*/'color': { value: valuesColors.indexOf(settings[colorKey]) || 0, min: 0, max: valuesColors.length - 1, From 383f18f92facbf8a4ea44bad2f8ea9ce0f763f6a Mon Sep 17 00:00:00 2001 From: Hank Date: Wed, 7 Dec 2022 12:18:14 +0100 Subject: [PATCH 224/342] Tidy up --- apps/hworldclock/ChangeLog | 2 +- apps/hworldclock/README.md | 2 +- apps/hworldclock/app.js | 17 +++++++---------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 158ea1c91..7b97ce527 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -9,4 +9,4 @@ 0.23: Added note to configure position in "my location" if not done yet. Small fixes. 0.24: Added fast load 0.25: Minor code optimization -0.26: Swipe down to rotate 180° +0.26: BJS2: Swipe down to rotate 180 degree diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 073a7c8a9..5a1bcc7f0 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -14,7 +14,7 @@ Provide names and the UTC offsets for up to three other timezones in the app sto The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. -Swipe down to rotate screen. So you can show the time to a friend real quick. +BangleJS2: Swipe down to rotate screen. So you can show the time to a friend real quick. ## Requests diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index c5e1942a5..fd9b9270f 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -332,19 +332,17 @@ if (BANGLEJS2) { if (Math.abs(dx)>Math.abs(dy)+10) { // horizontal if (dx < dy) { - + // for later purpose } else { - + // for later purpose } } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical if (dx < dy) { g.clear().setRotation(2); - //console.log(" draw(); Bangle.loadWidgets(); Bangle.drawWidgets(); - } else { g.clear().setRotation(0); draw(); @@ -354,16 +352,16 @@ if (BANGLEJS2) { } else { //console.log("tap " + e.x + " " + e.y); if (e.x > 145 && e.y > 145) { - + // for later purpose } } } }); } else { - //setWatch(addDrink, BTN1, { repeat: true, debounce:50 }); - //setWatch(removeDrink, BTN3, { repeat: true, debounce:50 }); - //setWatch(previousDrink, BTN4, { repeat: true, debounce:50 }); - //setWatch(nextDrink, BTN5, { repeat: true, debounce:50 }); + //setWatch(xxx, BTN1, { repeat: true, debounce:50 }); // maybe adding this later + //setWatch(xxx, BTN3, { repeat: true, debounce:50 }); + //setWatch(xxx, BTN4, { repeat: true, debounce:50 }); + //setWatch(xxx, BTN5, { repeat: true, debounce:50 }); } } @@ -402,7 +400,6 @@ if (!Bangle.isLocked()) { // Initial state updatePos(); } draw(); // draw immediately, queue redraw - } From 3cf55b6649dd09d08278e1fb86e1fc747b7d2d2f Mon Sep 17 00:00:00 2001 From: Hank Date: Wed, 7 Dec 2022 14:12:53 +0100 Subject: [PATCH 225/342] Changed direction --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/README.md | 2 +- apps/hworldclock/app.js | 6 +++--- apps/hworldclock/metadata.json | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 7b97ce527..22be10e2d 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -10,3 +10,4 @@ 0.24: Added fast load 0.25: Minor code optimization 0.26: BJS2: Swipe down to rotate 180 degree +0.27: BJS2: Changed swipe down to swipe up diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 5a1bcc7f0..905e9987b 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -14,7 +14,7 @@ Provide names and the UTC offsets for up to three other timezones in the app sto The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. -BangleJS2: Swipe down to rotate screen. So you can show the time to a friend real quick. +BangleJS2: Swipe up to rotate screen. So you can show the time to a friend real quick. ## Requests diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index fd9b9270f..e5f782244 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -338,13 +338,13 @@ if (BANGLEJS2) { } } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical - if (dx < dy) { - g.clear().setRotation(2); + if (dx < dy) { //down + g.clear().setRotation(0); draw(); Bangle.loadWidgets(); Bangle.drawWidgets(); } else { - g.clear().setRotation(0); + g.clear().setRotation(2); draw(); Bangle.loadWidgets(); Bangle.drawWidgets(); diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 7dba8f752..97a7963a5 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.26", + "version": "0.27", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From bdaa9661cd900b7bc0ba8bdc6db9db056a1a0285 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Wed, 7 Dec 2022 21:18:35 +0100 Subject: [PATCH 226/342] messages: erase messages file instead of writing empty [] for #2370 --- apps/messages/ChangeLog | 1 + apps/messages/lib.js | 3 ++- apps/messages/metadata.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 3df056d62..c9ff39bc4 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1,2 +1,3 @@ 0.55: Moved messages library into standalone library 0.56: Fix handling of music messages +0.57: Optimize saving empty message list diff --git a/apps/messages/lib.js b/apps/messages/lib.js index e5c81f3fd..1679d8296 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -135,7 +135,8 @@ exports.toggleWidget = function(show) { * @param {array} messages Messages to save */ exports.write = function(messages) { - require("Storage").writeJSON("messages.json", messages.map(m => { + if (!messages.length) require("Storage").erase("messages.json"); + else require("Storage").writeJSON("messages.json", messages.map(m => { // we never want to save saved/handled status to file; delete m.saved; delete m.handled; diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 27e771975..e424c3eed 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.56", + "version": "0.57", "description": "Library to handle, load and store message events received from Android/iOS", "icon": "app.png", "type": "module", From 8e5489486ed902077f5802768045442e85a3b8c9 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Wed, 7 Dec 2022 21:56:07 +0100 Subject: [PATCH 227/342] messagegui: don't write to flash so often fixes #2370 --- apps/messagegui/ChangeLog | 2 ++ apps/messagegui/app.js | 17 ++++++++--------- apps/messagegui/lib.js | 27 +++++++++++++++++++++++---- apps/messagegui/metadata.json | 2 +- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 854979d18..3e18b9885 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -79,3 +79,5 @@ Move widget to widmessage 0.56: Fix handling of music messages 0.57: Fix "unread Timeout" = off (previously defaulted to 60s) +0.58: Fast load messages without writing to flash + Don't write messages to flash until the app closes diff --git a/apps/messagegui/app.js b/apps/messagegui/app.js index f6f7779eb..0f3d90a9d 100644 --- a/apps/messagegui/app.js +++ b/apps/messagegui/app.js @@ -48,6 +48,11 @@ to the clock. */ var unreadTimeout; /// List of all our messages var MESSAGES = require("messages").getMessages(); +if (Bangle.MESSAGES) { + // fast loading messages + Bangle.MESSAGES.forEach(m => require("messages").apply(m, MESSAGES)); + delete Bangle.MESSAGES; +} var onMessagesModified = function(type,msg) { if (msg.handled) return; @@ -105,7 +110,6 @@ function showMapMessage(msg) { layout.render(); function back() { // mark as not new and return to menu msg.new = false; - saveMessages(); layout = undefined; checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:0}); } @@ -140,7 +144,6 @@ function showMusicMessage(msg) { openMusic = false; var wasNew = msg.new; msg.new = false; - saveMessages(); layout = undefined; if (wasNew) checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:0,openMusic:0}); else checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); @@ -223,24 +226,20 @@ function showMessageSettings(msg) { }, /*LANG*/"Delete" : () => { MESSAGES = MESSAGES.filter(m=>m.id!=msg.id); - saveMessages(); checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); }, /*LANG*/"Mark Unread" : () => { msg.new = true; - saveMessages(); checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); }, /*LANG*/"Mark all read" : () => { MESSAGES.forEach(msg => msg.new = false); - saveMessages(); checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); }, /*LANG*/"Delete all messages" : () => { E.showPrompt(/*LANG*/"Are you sure?", {title:/*LANG*/"Delete All Messages"}).then(isYes => { if (isYes) { MESSAGES = []; - saveMessages(); } checkMessages({clockIfNoMsg:0,clockIfAllRead:0,showMsgIfUnread:0,openMusic:0}); }); @@ -295,7 +294,7 @@ function showMessage(msgid) { } function goBack() { layout = undefined; - msg.new = false; saveMessages(); // read mail + msg.new = false; // read mail cancelReloadTimeout(); // don't auto-reload to clock now checkMessages({clockIfNoMsg:1,clockIfAllRead:0,showMsgIfUnread:0,openMusic:openMusic}); } @@ -303,7 +302,7 @@ function showMessage(msgid) { ]; if (msg.positive) { buttons.push({type:"btn", src:atob("GRSBAAAAAYAAAcAAAeAAAfAAAfAAAfAAAfAAAfAAAfBgAfA4AfAeAfAPgfAD4fAA+fAAP/AAD/AAA/AAAPAAADAAAA=="), cb:()=>{ - msg.new = false; saveMessages(); + msg.new = false; cancelReloadTimeout(); // don't auto-reload to clock now Bangle.messageResponse(msg,true); checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:openMusic}); @@ -312,7 +311,7 @@ function showMessage(msgid) { if (msg.negative) { if (buttons.length) buttons.push({width:32}); // nasty hack... buttons.push({type:"btn", src:atob("FhaBADAAMeAB78AP/4B/fwP4/h/B/P4D//AH/4AP/AAf4AB/gAP/AB/+AP/8B/P4P4fx/A/v4B//AD94AHjAAMA="), cb:()=>{ - msg.new = false; saveMessages(); + msg.new = false; cancelReloadTimeout(); // don't auto-reload to clock now Bangle.messageResponse(msg,false); checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:openMusic}); diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index e45e6e5a0..4e1e7e11d 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -18,9 +18,22 @@ exports.listener = function(type, msg) { if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true; else return; } - require("messages").save(msg); + if (Bangle.load === load) { + // no fast loading: store message to flash + require("messages").save(msg); + } else { + if (!Bangle.MESSAGES) Bangle.MESSAGES = []; + Bangle.MESSAGES.push(msg); + } + const saveToFlash = () => { + // save messages from RAM to flash after all, if we decide not to launch app + if (!Bangle.MESSAGES) return; + Bangle.MESSAGES.forEach(m => require("messages").save(m)); + delete Bangle.MESSAGES; + } msg.handled = true; if ((msg.t!=="add" || !msg.new) && (type!=="music")) { // music always has t:"modify" + saveToFlash(); return; } @@ -35,7 +48,11 @@ exports.listener = function(type, msg) { exports.messageTimeout = setTimeout(function() { delete exports.messageTimeout; if (type!=="music") { - if (!loadMessages) return require("messages").buzz(msg.src); // no opening the app, just buzz + if (!loadMessages) { + // not opening the app, just buzz + saveToFlash(); + return require("messages").buzz(msg.src); + } if (!quiet && unlockWatch) { Bangle.setLocked(false); Bangle.setLCDPower(1); // turn screen on @@ -51,9 +68,11 @@ exports.listener = function(type, msg) { */ exports.open = function(msg) { if (msg && msg.id && !msg.show) { - // store which message to load msg.show = 1; - require("messages").save(msg, {force: 1}); + if (Bangle.load === load) { + // no fast loading: store message to load in flash + require("messages").save(msg, {force: 1}); + } } Bangle.load((msg && msg.new && msg.id!=="music") ? "messagegui.new.js" : "messagegui.app.js"); diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index f3798f645..ad7a87675 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,7 +1,7 @@ { "id": "messagegui", "name": "Message UI", - "version": "0.57", + "version": "0.58", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From e2b34fdd0f58f22abd531278fa38241a2cdf2a5f Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 8 Dec 2022 16:23:53 +0100 Subject: [PATCH 228/342] Reverted changes to implementation of 0.25 --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/README.md | 2 -- apps/hworldclock/app.js | 51 +--------------------------------- apps/hworldclock/metadata.json | 2 +- 4 files changed, 3 insertions(+), 53 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 22be10e2d..c029b432f 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -11,3 +11,4 @@ 0.25: Minor code optimization 0.26: BJS2: Swipe down to rotate 180 degree 0.27: BJS2: Changed swipe down to swipe up +0.28: Reverted changes to implementation of 0.25 diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 905e9987b..93780bc2d 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -14,8 +14,6 @@ Provide names and the UTC offsets for up to three other timezones in the app sto The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. -BangleJS2: Swipe up to rotate screen. So you can show the time to a friend real quick. - ## Requests Please use [the Espruino Forum](http://forum.espruino.com/microcosms/1424/) if you have feature requests or notice bugs. diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index e5f782244..c80b712da 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -7,7 +7,6 @@ var showSunInfo; var colorWhenDark; // ------- Settings file -const BANGLEJS2 = process.env.HWVERSION == 2; const big = g.getWidth()>200; // Font for primary time and date const primaryTimeFontSize = big?6:5; @@ -25,7 +24,6 @@ const xcol1 = 10; const xcol2 = g.getWidth() - xcol1; const font = "6x8"; -let drag; /* TODO: we could totally use 'Layout' here and avoid a whole bunch of hard-coded offsets */ @@ -319,54 +317,6 @@ Bangle.drawWidgets(); draw(); - -function initDragEvents() { - -if (BANGLEJS2) { - Bangle.on("drag", e => { - if (!drag) { // start dragging - drag = {x: e.x, y: e.y}; - } else if (!e.b) { // released - const dx = e.x-drag.x, dy = e.y-drag.y; - drag = null; - if (Math.abs(dx)>Math.abs(dy)+10) { - // horizontal - if (dx < dy) { - // for later purpose - } else { - // for later purpose - } - } else if (Math.abs(dy)>Math.abs(dx)+10) { - // vertical - if (dx < dy) { //down - g.clear().setRotation(0); - draw(); - Bangle.loadWidgets(); - Bangle.drawWidgets(); - } else { - g.clear().setRotation(2); - draw(); - Bangle.loadWidgets(); - Bangle.drawWidgets(); - } - } else { - //console.log("tap " + e.x + " " + e.y); - if (e.x > 145 && e.y > 145) { - // for later purpose - } - } - } - }); - } else { - //setWatch(xxx, BTN1, { repeat: true, debounce:50 }); // maybe adding this later - //setWatch(xxx, BTN3, { repeat: true, debounce:50 }); - //setWatch(xxx, BTN4, { repeat: true, debounce:50 }); - //setWatch(xxx, BTN5, { repeat: true, debounce:50 }); - } -} - -initDragEvents(); - if (!Bangle.isLocked()) { // Initial state if (showSunInfo) { if (PosInterval != 0 && typeof PosInterval != 'undefined') clearInterval(PosInterval); @@ -400,6 +350,7 @@ if (!Bangle.isLocked()) { // Initial state updatePos(); } draw(); // draw immediately, queue redraw + } diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 97a7963a5..587c05067 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.27", + "version": "0.28", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From 55ca187d5dc91ee52d57aa42f5d6a07c5bb20b0a Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Thu, 8 Dec 2022 20:12:47 +0000 Subject: [PATCH 229/342] Lato version of Simplepp Clock --- apps/lato/README.md | 54 +++++++++++++++ apps/lato/app.js | 138 +++++++++++++++++++++++++++++++++++++ apps/lato/app.png | Bin 0 -> 1139 bytes apps/lato/icon.js | 1 + apps/lato/metadata.json | 16 +++++ apps/lato/screenshot1..png | Bin 0 -> 2666 bytes apps/lato/screenshot2.png | Bin 0 -> 2741 bytes apps/lato/screenshot3.png | Bin 0 -> 2723 bytes 8 files changed, 209 insertions(+) create mode 100644 apps/lato/README.md create mode 100644 apps/lato/app.js create mode 100644 apps/lato/app.png create mode 100644 apps/lato/icon.js create mode 100644 apps/lato/metadata.json create mode 100644 apps/lato/screenshot1..png create mode 100644 apps/lato/screenshot2.png create mode 100644 apps/lato/screenshot3.png diff --git a/apps/lato/README.md b/apps/lato/README.md new file mode 100644 index 000000000..556ee6fbc --- /dev/null +++ b/apps/lato/README.md @@ -0,0 +1,54 @@ +# Lato + +A simple clock with the Lato font, with fast load and clock_info + +![](screenshot1.png) +![](screenshot2.png) +![](screenshot3.png) + +This clock is a Lato version of Simplest++. Simplest++ provided the +smallest example of a clock that supports 'fast load' and 'clock +info'. Lato takes this one step further and adds the lovely Lato +font. The clock is derived from Simplest++ and inspired by the +Pastel Clock. + +## Usage + +* When the screen is unlocked, tap at the bottom of the csreen on the information text. + It should change color showing it is selected. + +* Swipe up or down to cycle through the info screens that can be displayed + when you have finished tap again towards the centre of the screen to unselect. + +* Swipe left or right to change the type of info screens displayed (by default + there is only one type of data so this will have no effect) + +* Settings are saved automatically and reloaded along with the clock. + +## About Clock Info's + +* The clock info modules enable all clocks to add the display of information to the clock face. + +* The default clock_info module provides a display of battery %, Steps, Heart Rate and Altitude. + +* Installing the [Sunrise ClockInfo](https://banglejs.com/apps/?id=clkinfosunrise) adds Sunrise and Sunset times into the list of info's. + + +## References + +* [What is Fast Load and how does it work](http://www.espruino.com/Bangle.js+Fast+Load) + +* [Clock Info Tutorial](http://www.espruino.com/Bangle.js+Clock+Info) + +* [How to load modules through the IDE](https://github.com/espruino/BangleApps/blob/master/modules/README.md) + + +## With Thanks + +* Gordon for support +* David Peer for his work on BW Clock + + +Written by: [Hugh Barney](https://github.com/hughbarney) For support +and discussion please post in the [Bangle JS +Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/lato/app.js b/apps/lato/app.js new file mode 100644 index 000000000..6045d7f17 --- /dev/null +++ b/apps/lato/app.js @@ -0,0 +1,138 @@ +/** + * + * Lato Clock + * + * The entire clock code is contained within the block below this + * supports 'fast load' + * + * To add support for clock_info_supprt we add the code marked at [1] and [2] + * + */ + +Graphics.prototype.setFontLato = function(scale) { + // Actual height 50 (54 - 5) + this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('ADkD8AHFg/wA4sP/AHVD44HHgPALD0OA40+F43+H4wHGn/8A4v/L4sH/5PFj//CxkD/6eFCw9/GooWHh//wAWLgP/TgoWHn5rFCw41BMYqCHaRDKGgzLYKAJgFv//LIhQBAAI7DWgIABU4adBAAJTDn4HCVAaOCQQhvDAYQuBDYaxBgJEDh4HBgYzDPgUDIYYECA5DUDgIHBg4HEEgIHfF44/EA45HDL4xvHP46PHT5CvHX47PDGYcDb4zvHf5AA/AA9wA4yoDZYq/DXAgHDXYQHEXYQHEj4HHXYQHDn6UCA4d/e4sAXYYHCd4gHCXwbADA86DFA/4HGAGA3Db40HA4UDe40Hc4YHCh7nDA4UfA4X/A4U/A4b/Cv7vGX4UB/A+CZ4YaCgf9A4sH+IHCHwfjA4JWDj/DA4s/wYHFv4kCA4f+A4pKBA4sD/AHCG4R9BA4YCBj/gA4s/4AECN4R5BA4f/gf/Mgn///+A4wZBA4d//6JBA4c/VATHEVASUEEwIHEAAbnDAGbyCAAg+DgKwDA4S4DLQSlCSYQHCn4HDFAV/bAX/4ADFCYgbCh4zHZ4SlBR4iSEA46XCe4QHCDgJWCngHOnwHGvwHRG4iFBI4ppBA4f4OIRnCN4MD9+AO4f///v8CHCDoP/54CBS4f/44CBU4f/wYHBX4f/EQLHDh6gB/6jDZQaTDAEUcA40/A4xODYoYHGgYHGh4HGNIIuG74uGz4uGj4uF/gHFh/4A4sf+AHFn/AA4q0BA4kBVgIHEFwIHFFwIHFj7jBA4guBA4rjCA4YuCA4guCA4r0BAATgBA75SEa4wHvAEEBA40DUYIAEg4HDgZ0Bh67BXAQHCZYJMBA4UHA4KPCA4SXEAgQHL4IEBgIHC/AMCgP4CQUDFgIHoIQY3DA4wCEDggHFO4YHB/iHDCQX+gE/S4IHCOIP/U4IHCv6CBA4k/A4K1CEQKpBEIIHDh//HILSDTQK+CAAd/f64Amn4GFgLxCAAZfBSIIADN4heDP4YeDR4Z5CEwN/U4IABg4NBj6ADEwLHDIoQtBVgQuCHoIHDFwIHBe4QLB/14A4kH/i1BeQQuB/AHFn/wA4pLBA4guBwAHELoMAA4o9BA4Q3BgYFBJ4gCCA4pqBvxvDf4T2Bh4HCIIc/R4MCKISfBS4aQCU4gHDX4ioBY4paBNwQAD/6uDAAUOf4wAjO4QHNdQYHYmAHGW4gUEA4kPA4z7BA4v/A4qYBY4QHCh63CA4c/V4QHDV4Y6DV4YHCDwYHDDwYHDv7ODA4MBZwgHBcwL1DA4MfdogHBDwgHB+LtFgf3DwhMCDwgHCDwhcFA4geEA4IeFA4IeFd5AArj77EsCgB/gGCg5QBOQkf/6oB/77D//DA4JrCv//44HB4DkC//n/E/MgIcCRIMPA4X8RIUHegQCBFoL8DA4cBA4QaBv4HGvwHBTgMHHQM+HgIHhF44HFJ5RfGN45/Bz6NBP4SPHT4XnT4ivHX47PHgCQCb4bvIAHxdBMgRfD/58CKgf/WgIADP4JlFR4J1ET4QHCiACBQwQEBuC/CDIIHBX4QtBn+Aa4sfZ4bvCh+Ah4HGUAUHA4d/AgIHEa4QHDwJyCA4eDKIQHDx5pCA4bPDG4c/RIRPCjwuCA4aJBUwZnCRAcBP4SgE/+D/7+ET4ImDA4jIEX4KvFh7HGgbXGgF+f6oAggZeBSgShEb4RYCagQHGh5iDA5QXEE443HADoA=='))), + 46, + atob("DhglJSUlJSUlJSUlEA=="), + 64+(scale<<8)+(1<<16) + ); + return this; +} + + +Graphics.prototype.setFontLatoSmall = function(scale) { + // Actual height 25 (24 - 0) + this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('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'))), + 32, + atob("BQkKDw8UEgYICAoPBQkFCQ8PDw8PDw8PDw8GBg8PDwoVERAREw8OEhMICxENFxMUDxQQDQ8SERkQEBAICQgPCggNDgwODQgNDgYGDQYVDg4ODgoLCQ4NEw0NDAgICA8AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAADAAFCQ8PDw8IDQgUCQwPABQICg8ICAgOEQcICAoMEhISChERERERERcRDw8PDwgICAgUExQUFBQUDxQSEhISEA8PDQ0NDQ0NFAwNDQ0NBgYGBg4ODg4ODg4PDg4ODg4NDg0="), + 25+(scale<<8)+(1<<16) + ); + return this; +} + + + +{ + // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + + let draw = function() { + var date = new Date(); + var timeStr = require("locale").time(date,1); + var h = g.getHeight(); + var w = g.getWidth(); + + g.reset(); + g.setColor(g.theme.bg); + g.fillRect(Bangle.appRect); + + //g.setFont('Vector', w/3); + g.setFontLato(); + g.setFontAlign(0, 0); + g.setColor(g.theme.fg); + g.drawString(timeStr, w/2, h/2); + clockInfoMenu.redraw(); // clock_info_support + + // schedule a draw for the next minute + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + }; + + /** + * clock_info_support + * this is the callback function that get invoked by clockInfoMenu.redraw(); + * + * We will display the image and text on the same line and centre the combined + * length of the image+text + * + * + */ + let clockInfoDraw = (itm, info, options) => { + //g.reset().setFont('Vector',24).setBgColor(options.bg).setColor(options.fg); + g.reset().setFontLatoSmall(); + g.setBgColor(options.bg).setColor(options.fg); + + //use info.text.toString(), steps does not have length defined + var text_w = g.stringWidth(info.text.toString()); + // gap between image and text + var gap = 10; + // width of the image and text combined + var w = gap + (info.img ? 24 :0) + text_w; + // different fg color if we tapped on the menu + if (options.focus) g.setColor(options.hl); + + // clear the whole info line, allow additional 2 pixels in case LatoFont overflows area + g.clearRect(0, options.y -2, g.getWidth(), options.y+ 23 + 2); + + // draw the image if we have one + if (info.img) { + // image start + var x = (g.getWidth() / 2) - (w/2); + g.drawImage(info.img, x, options.y); + // draw the text to the side of the image (left/centre alignment) + g.setFontAlign(-1,0).drawString(info.text, x + 23 + gap, options.y+12); + } else { + // text only option, not tested yet + g.setFontAlign(0,0).drawString(info.text, g.getWidth() / 2, options.y+12); + } + + }; + + // clock_info_support + // retrieve all the clock_info modules that are installed + let clockInfoItems = require("clock_info").load(); + + // clock_info_support + // setup the way we wish to interact with the menu + // the hl property defines the color the of the info when the menu is selected after tapping on it + let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:64, y:132, w:50, h:40, draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#0ff"} ); + + // timeout used to update every minute + var drawTimeout; + g.clear(); + + // Show launcher when middle button pressed, add updown button handlers + Bangle.setUI({ + mode : "clock", + remove : function() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + // remove info menu + clockInfoMenu.remove(); + delete clockInfoMenu; + // delete the custom fonts + delete Graphics.prototype.setFontLato; + delete Graphics.prototype.setFontLatoSmall; + } + }); + + // Load widgets + Bangle.loadWidgets(); + draw(); + setTimeout(Bangle.drawWidgets,0); +} // end of clock diff --git a/apps/lato/app.png b/apps/lato/app.png new file mode 100644 index 0000000000000000000000000000000000000000..02a4031a3555201deaa5c5cc5a37aba65189d090 GIT binary patch literal 1139 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 A&j0`b literal 0 HcmV?d00001 diff --git a/apps/lato/screenshot2.png b/apps/lato/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..f40495c79a26a8cfb53c699f536072adaf38e8eb GIT binary patch literal 2741 zcmdUx`BxHX7sr)B1#QN}T~SNG4FwY|cdcAdTb*1Ga!gH|+ymTA@XfK*G&c&@3TrI) z&_PX;92XLo%t^BpcP+&baVxD}-ap{|^*!gk=REhG=id9A`^$Yk=X>ki8P}g>HDo0u zBz|_oI(dp?!+#D)TI}mt3;yCDN%V9*AyGF3{UjkF8|CJ7{6f6{TG>c!rR4#q(H}oX z=%ZF1G`)bL%6x@$2@!Z&J*w+9{ne`2_B-qdZgYpWAuM&b= z2RdZ7f&cg_Sn39(INUiL8as0;dQe$%!Jzm7oQl~rXCWlN6+EO}KJRHD3C_-c(?SEn zqq)xv3=1hh7q{OD9so$oWn7_>yCZ;6X5DOdr5%HXdK60&n8dr8LP%OS&ixC z$f`&_&+#hLG4hMmVUW#|f)|Q#orHj}e@!e@cdzL+_9%25-0pP_V-FY>pM1jRNMmjd z-(h8OK-`<%=f5j|aUvR8ow%==t!IblRUp4@xsZqC`$tPI2A{>El42O58oTpSF8MVp zSI6FC8`X{&&+vw8OWTEJs*ED8diL)Cd`VDw=XT%`9Tj?`Zd&bf={M;=ja0{87yw)s z21#kPO3Gc05VfA(nVW2dQH`D_`X@o&X!m^#xf$J*;MKS%3c%m}`0T2yRSAkT5RFApX*G@(G%sImPIaWiYuCIPD-e0tW7BDKS=dj}lV^ltwU zJA<8NI_K0_g`IJ^H!%4Tr?J)z*>&iOqm3upHv~U{#FOk<*Zj8ORGA+kXc5V_nwdCu zi%?m#VWw@WgN`OsZPUDRi`d7z6rx`~njE!WUgBjRIs9y#1C8R*Ewrbo75}6#mIt#5 zRUGjZ*|6~Kw|b7?7(*U+vm2uJph-hyp1_zoh8g}90_NYpoYMG`Z=BQApW%YIH6#i* zVD`@E99(%(aTTW;Zc!h;?+PwWU;JcL)*E6?uwaJo_kl{KlohVwMpv#SHDZY4Lbbh+ zZnd=-0j6*Q1}sncJV^;t3sV^M=AzUB)0-%|`}efxeP`uIP(lamL4`h~ubhH=2KW)Zqnn6p)WfY$2Az_z(b5W|gFr@xM+sB6WOw*MMhq_=(; zdd^#=z0%HLH0QMz1ZNu)(bN%q{EdIiLJck7Tw(>O5p%ciwOZE5q5rOq|GWj%E|Y}y zYym>BzK0#&JaCPx%5qOmrA|Z{!y9(;(ORidRAhNeb>v%bnI;sJJo82_T@$LTsI@#e zlvqIFJ>40*4Mn?b_*ERPNcwULnp*!$^5*LW1u1IkU+fRe7h8IlHd`%JXJh8>g~=vw z9y*rT+>{PYS^T3vprc>I?Ivk9&z$q#Rm32i$=_`Q;MqnzRs8aW1!&^t<8C5ym~Vm^ z54_&BJg&N11@l&tRfsp48_|-qf+blW-k`+6eL_BiyS}&P`G2if!qs!$$;W6(xe(tM zm|$4cc86maFuw}ux86}lqlb})M;a>w>wdy*y$+LW-!Tof<0M25;=kU!;TmK{oS0I4 z_2|8==YEo0yJMhAxDq!JQAB@^YH1$A<_r+>NduI(o~J|0J*v!FGtw2yhPb2RS47f8HWv`HUg9ZKz(%H-lkGC|lG-3D2k40ei? ze`nyYJ7qzm;Oa^Ij3VXgt5zU=!S`j4-K7A_x%lclu_iD(mtNxG2pC?heajJR0`;n{LGcbRZ;V|H20-o|xG=jU zmI%azFbgwD@G0r1(M0iYXl-xSpi_W)KY6wMx3TN;_pL(lHqu7PVjU{s=6uGf?nFS^ FzX7Jd162S3 literal 0 HcmV?d00001 diff --git a/apps/lato/screenshot3.png b/apps/lato/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf135a60bdeb64bea4957f56bbd923fd9ebe87c GIT binary patch literal 2723 zcmdT``#%#38=sxk*`kw8ZYOuWyj@ENG{1H z%VI8*r9(ALDnn&w$FL9^ayz*k@1OAg^nTtSp6B~{et16LU!L#x`DXd~p!V+haSs3h z*z4u#=D&mN{}g!lPH*5&gzbP5*&pQ!cr4VJ1_1Wpz1&U&CWXzFe!N;`ud?gi_V%C+ zlj9>(-Tg+i_dqSL`CxCgt5&ipB{em5bA9}Kpe9`5D!GlxecA~zIBXPJ0sw}$T{GGC zmN?&NroU(yP8sQR7B9%bA>@^DR8PQLB6JO!16w`-?ts#cFik@a(W1#WKoU zp<*&M1y+G3ZL+K4yAEcp{Lz>ZqL1Q9$*+p>UIh7tVw}`$DvD%?_{({0m2*bEreZK9 zf(8lBCrB%~zP;Hd)Q;Pfm+}r+h-pdcyEE9`M(z+5Xv<^$>QXEBXVu@g_!Dro$(AP=!c

cQOwCI~PFrxa zEfk{q(c}a7uPr>;oxv{<^r=Vx$|pWEbP=~^FoiV%k}=YFv$#XALtLlT!29m2APlcE zz7DC~rzm^%Hih8p(&I{?r!8-~+`KnRwRv8wtTbs>Qjx*ePVOsZ0Jf_y2paF?p8`

>P) zP5S>JRUD(PZZWDBACl0uzWUtmmfLc3Aic2Xo6NVJfa+eElH(pmG~{hqh*ISoyri-p zeJP@W0A=?Ejjca=5V;!n)aN{1of0V`X^wm#99>7o5q}#QuMGo-NFN-j?K3Yq$>a-m z+hmm+$`MAE2xAy(J#j**(V3@aYEIIxA-jU((e)NAuR0?i?X!CD4M+ zIETe@L>L+x`T{t=`AP8lz#+0#aBDUp)Rf)SDp(rEumrcd1wqi~g=CM;=hK4fi{Wq} zYN9_ry=lL07g}jvHE241G@)G^JA^pMhRY9J<*Mi|FabpO4}!C%RGZeo_Xpu@BYAt8 zdRDUjCu@Rpbi!0UEr+q}d;uqP2&566idvM$7R;?>QXkv1$1iuglM=2EL<>$ksW&M@ct}=L z7R{|a_5{YNvb8~m%MOe(ieouil%wq8ZOhqwLCtY}fbdt{IX=3(Y!VEeB-r^shfw#K zq4dId`&#mj-){2g9*r->X1G^IEEg0#YEJT6PPUFI;izLx#j2YolcG;Vwk_{mZJt1iF*1DiOnCc5(Z9s1m;`riNTME z9ntY)0?vB9y#jU`^i_L%%_(`|oUC-25QSI8;92WjIe&IbCJUBBfsTop&LUN*Bs7KIM*vis##-y$-tN zLpaA-H{@F%ilyFR{X>@%sSfE0ba#otU*Hyr|9q5!l^|i)Vthey&w2Y$TTaZzOYps2>d-|_&Cq0X1aS%} zMSp2G>KWAIIt3Ivx=J_$9mToaRY{e`)8Me#kBzIcp;k(SQpbOI5io>bnW-~M z!Z8RTzT}lO?>MRDGY@V$y)ZLwojmiv}45eNf7b>Wbxk_MV(ZS^_*ja;kMNqe< zMutymYwPF2T4uQ?p55l{h>a92EJR@L2_5lxapD#iI+B81)*u~Zz{@NYgU2FsI#Ll! zj`k}_bhohBG3g<5#oxcPf5OTxVe`D_%2J-#>u-r;gj@J$y4K-7l8%t|U<|ssjVAF??h7CHYK}KBBVEehMEff#2zHo_jx(IiQ+E;f?$j<2zodyk?dd8Ln&OaW?D} zL4Kx!qimUp8OBCX+P;*nm1}`@IznMff!ZQ(HyQ4c#oI^GmQRGR5yqe6S5{<2pZRrQ zff_}f;BJ3}1lItPu=CbH;y~l9ttKu{eLCN&H#hOC-%Y-zdeB@%;T?2bKKb0T)~v7* ze*LRqu5m^rL%M{VZXEmc?npf{CRHzQnDHi^$SUb%09K6|NWTtD@ zC#rko+qM3w&kZj^ZrF*BV_i~aR6!bXOwD|FpXiF92$~WVOs>DC8nj0_yj#*_?W|D=MicYU6orSoDzTyE^D6x<`|^$jcYmQwUt1~lV10sJHHx~AVL_Y z@gvP3|4Ih{>Gy>tkvsRO0;hVYx=5h!ahz-bu&Bc14R|LYq}xXqLR}=*`Jf+90H`QG zV!t&I9D0-CVhlD=fM-}Z4*<2-4|V~h1kyWEdZhQiBHaRV-;9MsKM^0;Nu2;McOSRM Iu7vb|09r^G=>Px# literal 0 HcmV?d00001 From 605f87bb8f07b543c19132bd29e0fd2a8542a691 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 8 Dec 2022 21:57:54 +0100 Subject: [PATCH 230/342] widmsggrid: provides a "message" widget --- apps/widmsggrid/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/widmsggrid/metadata.json b/apps/widmsggrid/metadata.json index 68c2c3771..ad0f33e82 100644 --- a/apps/widmsggrid/metadata.json +++ b/apps/widmsggrid/metadata.json @@ -9,6 +9,7 @@ "supports": ["BANGLEJS","BANGLEJS2"], "dependencies" : { "messages":"module" }, "provides_modules" : ["messagewidget"], + "provides_widgets" : ["message"], "readme": "README.md", "storage": [ {"name":"messagewidget","url":"lib.js"}, From ec410fdac7186baede89f0f9b36b7462472fb275 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 8 Dec 2022 22:33:04 +0100 Subject: [PATCH 231/342] Message widgets: we don't need a library --- apps/messages/ChangeLog | 1 + apps/messages/lib.js | 7 ++++--- apps/messages/metadata.json | 2 +- apps/widmessages/ChangeLog | 3 ++- apps/widmessages/lib.js | 8 -------- apps/widmessages/metadata.json | 4 +--- apps/widmessages/widget.js | 7 ++++++- apps/widmsggrid/ChangeLog | 3 ++- apps/widmsggrid/lib.js | 8 -------- apps/widmsggrid/metadata.json | 4 +--- apps/widmsggrid/widget.js | 9 ++++++--- bin/sanitycheck.js | 1 - 12 files changed, 24 insertions(+), 33 deletions(-) delete mode 100644 apps/widmessages/lib.js delete mode 100644 apps/widmsggrid/lib.js diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index c9ff39bc4..7d3414c1a 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1,3 +1,4 @@ 0.55: Moved messages library into standalone library 0.56: Fix handling of music messages 0.57: Optimize saving empty message list +0.58: show/hide "messages" widget directly, instead of through library stub diff --git a/apps/messages/lib.js b/apps/messages/lib.js index 1679d8296..a710c81c4 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -125,9 +125,10 @@ exports.openGUI = function(msg) { * @param {boolean} show */ exports.toggleWidget = function(show) { - if (!require("Storage").read("messagewidget")) return; // "messagewidget" module is missing! - if (show) require("messagewidget").show(); - else require("messagewidget").hide(); + if (!global.WIDGETS || !WIDGETS["messages"]) return; // widget is missing! + const method = WIDGETS["messages"][show ? "show" : "hide"]; + /* if (typeof(method)!=="function") return; // widget must always have show()+hide(), fail hard rather than hide problems */ + method.apply(WIDGETS["messages"]); }; /** diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index e424c3eed..9c7c8b49e 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.57", + "version": "0.58", "description": "Library to handle, load and store message events received from Android/iOS", "icon": "app.png", "type": "module", diff --git a/apps/widmessages/ChangeLog b/apps/widmessages/ChangeLog index 3a41005e9..bd329aa5a 100644 --- a/apps/widmessages/ChangeLog +++ b/apps/widmessages/ChangeLog @@ -1 +1,2 @@ -0.01: Moved messages widget into standalone widget app \ No newline at end of file +0.01: Moved messages widget into standalone widget app +0.02: Remove library stub diff --git a/apps/widmessages/lib.js b/apps/widmessages/lib.js deleted file mode 100644 index 897611ad1..000000000 --- a/apps/widmessages/lib.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.hide = function() { - if (!global.WIDGETS||!WIDGETS["messages"]) return; - WIDGETS["messages"].hide(); -} -exports.show = function() { - if (!global.WIDGETS||!WIDGETS["messages"]) return; - WIDGETS["messages"].show(); -} \ No newline at end of file diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json index 080e19273..a8a23df19 100644 --- a/apps/widmessages/metadata.json +++ b/apps/widmessages/metadata.json @@ -1,7 +1,7 @@ { "id": "widmessages", "name": "Message Widget", - "version": "0.01", + "version": "0.02", "description": "Widget showing new messages", "icon": "app.png", "type": "widget", @@ -9,12 +9,10 @@ "supports": ["BANGLEJS","BANGLEJS2"], "screenshots": [{"url": "screenshot.gif"}], "dependencies" : { "messageicons":"module" }, - "provides_modules" : ["messagewidget"], "provides_widgets" : ["message"], "default" : true, "readme": "README.md", "storage": [ - {"name":"messagewidget","url":"lib.js"}, {"name":"widmessages.wid.js","url":"widget.js"} ] } diff --git a/apps/widmessages/widget.js b/apps/widmessages/widget.js index 2ee11b690..764494638 100644 --- a/apps/widmessages/widget.js +++ b/apps/widmessages/widget.js @@ -7,6 +7,9 @@ .filter((msg, i, arr) => arr.findIndex(nmsg => msg.src == nmsg.src) == i); } + // NOTE when adding a custom "essages" widget: + // the name still needs to be "messages": the library calls WIDGETS["messages'].hide()/show() + // see e.g. widmsggrid WIDGETS["messages"] = { area: "tl", width: 0, srcs: [], draw: function(recall) { // If we had a setTimeout queued from the last time we were called, remove it @@ -54,7 +57,9 @@ var w = WIDGETS["messages"]; if (!w || !w.width || c.xw.x+w.width || c.yw.y+24) return; require("messages").openGUI(); - }, hide() { + }, + // hide() and show() are required by the "message" library! + hide() { this.hidden=true; if (this.width) { // hide widget diff --git a/apps/widmsggrid/ChangeLog b/apps/widmsggrid/ChangeLog index 9612da729..9be40817a 100644 --- a/apps/widmsggrid/ChangeLog +++ b/apps/widmsggrid/ChangeLog @@ -1,3 +1,4 @@ 0.01: New widget! 0.02: Adjust to message icons moving to messageicons lib -0.03: Use new message library \ No newline at end of file +0.03: Use new message library +0.04: Remove library stub \ No newline at end of file diff --git a/apps/widmsggrid/lib.js b/apps/widmsggrid/lib.js deleted file mode 100644 index 430577209..000000000 --- a/apps/widmsggrid/lib.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.hide = function() { - if (!global.WIDGETS||!WIDGETS["msggrid"]) return; - WIDGETS["msggrid"].hide(); -} -exports.show = function() { - if (!global.WIDGETS||!WIDGETS["msggrid"]) return; - WIDGETS["msggrid"].show(); -} \ No newline at end of file diff --git a/apps/widmsggrid/metadata.json b/apps/widmsggrid/metadata.json index ad0f33e82..17d3573ad 100644 --- a/apps/widmsggrid/metadata.json +++ b/apps/widmsggrid/metadata.json @@ -1,18 +1,16 @@ { "id": "widmsggrid", "name": "Messages Grid Widget", - "version": "0.03", + "version": "0.04", "description": "Widget that displays notification icons in a grid", "icon": "widget.png", "type": "widget", "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], "dependencies" : { "messages":"module" }, - "provides_modules" : ["messagewidget"], "provides_widgets" : ["message"], "readme": "README.md", "storage": [ - {"name":"messagewidget","url":"lib.js"}, {"name":"widmsggrid.wid.js","url":"widget.js"} ], "screenshots": [{"url":"screenshot.png"}] diff --git a/apps/widmsggrid/widget.js b/apps/widmsggrid/widget.js index 786f590b5..6a5b175ac 100644 --- a/apps/widmsggrid/widget.js +++ b/apps/widmsggrid/widget.js @@ -6,7 +6,8 @@ showRead: !!settings.showRead, }; delete settings; - WIDGETS["msggrid"] = { + // widget name needs to be "messages": the library calls WIDGETS["messages'].hide()/show() + WIDGETS["messages"] = { area: "tl", width: 0, flash: s.flash, showRead: s.showRead, @@ -57,7 +58,9 @@ .drawString(w.total, w.x + w.width - 1, w.y + 24, w.total > 9); } if (w.flash && w.status === "new") w.t = setTimeout(w.draw, 1000); // schedule redraw while blinking - }, show: function (m) { + }, + // show() and hide() are required by the "message" library! + show: function (m) { delete w.hidden; w.width = 24; w.srcs = require("messages").getMessages(m) @@ -94,6 +97,6 @@ } }; delete s; - const w = WIDGETS["msggrid"]; + const w = WIDGETS["messages"]; Bangle.on("message", w.listener); })(); diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 5af6f1aa1..22c792e6f 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -93,7 +93,6 @@ const INTERNAL_FILES_IN_APP_TYPE = { // list of app types and files they SHOULD /* These are warnings we know about but don't want in our output */ var KNOWN_WARNINGS = [ "App gpsrec data file wildcard .gpsrc? does not include app ID", -"App widmessages storage file messagewidget is also listed as storage file for app widmsggrid", ]; function globToRegex(pattern) { From 2becb161bbf29c8edf437f96e5f175d07969c624 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 8 Dec 2022 22:43:13 +0100 Subject: [PATCH 232/342] widmsggrid: update README --- apps/widmsggrid/README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/apps/widmsggrid/README.md b/apps/widmsggrid/README.md index 274858d66..36aad20e2 100644 --- a/apps/widmsggrid/README.md +++ b/apps/widmsggrid/README.md @@ -12,12 +12,7 @@ Example: one SMS, one Signal, and two WhatsApp messages: ![screenshot](screenshot.png) ## Installation -This widget needs the [`messages`](/?id=messages) app to handle notifications. - -You probably want to disable the default widget, to do so: -1. Open `Settings` -2. Navigate to `Apps`>`Messages` -3. Scroll down to the `Widget messages` entry, and change it to `Hide` +There can only be one messages widget, so you should uninstall the default "Message Widget". ## Settings You can change settings by going to the global `Settings` app, then `App Settings` From 5a519e372da882aeb1858af651d6602df02e8b2f Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 8 Dec 2022 23:12:30 +0100 Subject: [PATCH 233/342] remove remnant of merge conflict --- apps/weather/ChangeLog | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index 359cb8635..f1d001c81 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -19,4 +19,3 @@ 0.20: Added weather condition with temperature to clkinfo. 0.21: Updated clkinfo icon. 0.22: Automatic translation of strings, some left untranslated. ->>>>>>> b37fcacd1 (weather - autotranslate strings) From c483cbc06746f7c11731347a5bf0946b015ba917 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Thu, 8 Dec 2022 17:48:56 -0500 Subject: [PATCH 234/342] lib.js support timezone - toLocalISOString Test scenario: E.setTimeZone(-8); date = new Date("2022-12-05T23:00"); date.toLocalISOString(); // -> "2022-12-05T23:00:00.000-0800" getActiveAlarms([{on: true, t: 0, dow: 0b1111111, date: "2022-12-05"}], date); //should be marked as active, but isn't getActiveAlarms([{on: true, t: 0, dow: 0b1111111, date: "2022-12-06"}], date); //should not be marked as active, but it is because it is already "tomorrow" in UTC --- apps/sched/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 74018dcde..c8961b9e3 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -21,7 +21,7 @@ exports.getActiveAlarms = function (alarms, time) { && (a.last != time.getDate()) // not already fired today && (a.t < currentTime) && (a.dow >> time.getDay() & 1) // is allowed on this day of the week - && (!a.date || a.date == time.toISOString().substr(0, 10)) // is allowed on this date + && (!a.date || a.date == time.toLocalISOString().substr(0, 10)) // is allowed on this date ) .sort((a, b) => a.t - b.t); } @@ -46,7 +46,7 @@ exports.getTimeToAlarm = function(alarm, time) { if (!alarm) return undefined; if (!time) time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000); - var active = alarm.on && (alarm.dow>>((time.getDay()+(alarm.t>((time.getDay()+(alarm.t Date: Thu, 8 Dec 2022 17:50:46 -0500 Subject: [PATCH 235/342] boot.js toLocalISOString --- apps/sched/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/boot.js b/apps/sched/boot.js index 98bb0ff7d..c1bb1fc66 100644 --- a/apps/sched/boot.js +++ b/apps/sched/boot.js @@ -13,7 +13,7 @@ && (a.last != d) // not already fired today && (a.t + 60000 > currentTime) // is not in the past by >1 minute && (a.dow >> time.getDay() & 1) // is allowed on this day of the week - && (!a.date || a.date == time.toISOString().substr(0, 10)) // is allowed on this date + && (!a.date || a.date == time.toLocalISOString().substr(0, 10)) // is allowed on this date ); if (active.length) { active = active.sort((a,b)=>a.t-b.t); // sort by time From aa1e485db8dbd1483db4928a9934189a5dca9dcb Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 08:34:50 +0000 Subject: [PATCH 236/342] 0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) --- apps/messagegui/ChangeLog | 1 + apps/messagegui/lib.js | 5 ++++- apps/messagegui/metadata.json | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 3e18b9885..3f5ff70fd 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -81,3 +81,4 @@ 0.57: Fix "unread Timeout" = off (previously defaulted to 60s) 0.58: Fast load messages without writing to flash Don't write messages to flash until the app closes +0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index 4e1e7e11d..f9919c01c 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -18,8 +18,11 @@ exports.listener = function(type, msg) { if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true; else return; } - if (Bangle.load === load) { + if (Bangle.load === load || !Bangle.uiRemove) { // no fast loading: store message to flash + /* FIXME: Maybe we need a better way of deciding if an app will + be fast loaded than just hard-coding a Bangle.uiRemove check. + Bangle.load could return a bool (as the load doesn't happen immediately). */ require("messages").save(msg); } else { if (!Bangle.MESSAGES) Bangle.MESSAGES = []; diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index ad7a87675..3ed22d356 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,7 +1,8 @@ { "id": "messagegui", "name": "Message UI", - "version": "0.58", + "sortName": "Messages", + "version": "0.59", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From 7b18f54a76e9265c648ef7aab826a2fa83db73ac Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 08:44:11 +0000 Subject: [PATCH 237/342] oops --- apps/messagegui/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 3ed22d356..80b362551 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -1,7 +1,7 @@ { "id": "messagegui", "name": "Message UI", - "sortName": "Messages", + "shortName": "Messages", "version": "0.59", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", From 00a022c7c1102ab6bb22b0a78f28a71a01e7f3da Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 09:49:33 +0000 Subject: [PATCH 238/342] Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps --- apps/astrocalc/ChangeLog | 1 + apps/astrocalc/astrocalc-app.js | 4 +- apps/astrocalc/metadata.json | 3 +- apps/astrocalc/suncalc.js | 328 -------------------------- apps/daisy/ChangeLog | 1 + apps/daisy/app.js | 20 +- apps/daisy/metadata.json | 2 +- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/app.js | 60 +++-- apps/hworldclock/hsuncalc.js | 298 ----------------------- apps/hworldclock/metadata.json | 9 +- apps/pastel/ChangeLog | 1 + apps/pastel/metadata.json | 2 +- apps/pastel/pastel.app.js | 22 +- apps/rebble/ChangeLog | 7 +- apps/rebble/metadata.json | 5 +- apps/rebble/rebble.app.js | 30 +-- apps/rebble/suncalc.js | 143 ----------- apps/sunclock/ChangeLog | 2 + apps/sunclock/app.js | 20 +- apps/sunclock/metadata.json | 5 +- apps/timerclk/ChangeLog | 1 + apps/timerclk/app.js | 6 +- apps/timerclk/metadata.json | 4 +- {apps/sunclock => modules}/suncalc.js | 83 +++++-- 25 files changed, 171 insertions(+), 887 deletions(-) delete mode 100644 apps/astrocalc/suncalc.js delete mode 100644 apps/hworldclock/hsuncalc.js delete mode 100644 apps/rebble/suncalc.js create mode 100644 apps/sunclock/ChangeLog rename {apps/sunclock => modules}/suncalc.js (76%) diff --git a/apps/astrocalc/ChangeLog b/apps/astrocalc/ChangeLog index 60ef5da0a..746ab2162 100644 --- a/apps/astrocalc/ChangeLog +++ b/apps/astrocalc/ChangeLog @@ -1,2 +1,3 @@ 0.01: Create astrocalc app 0.02: Store last GPS lock, can be used instead of waiting for new GPS on start +0.03: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/astrocalc/astrocalc-app.js b/apps/astrocalc/astrocalc-app.js index 4e7aa0b40..46fb855ec 100644 --- a/apps/astrocalc/astrocalc-app.js +++ b/apps/astrocalc/astrocalc-app.js @@ -9,7 +9,7 @@ * Calculate the Sun and Moon positions based on watch GPS and display graphically */ -const SunCalc = require("suncalc.js"); +const SunCalc = require("suncalc"); // from modules folder const storage = require("Storage"); const LAST_GPS_FILE = "astrocalc.gps.json"; let lastGPS = (storage.readJSON(LAST_GPS_FILE, 1) || null); @@ -385,4 +385,4 @@ function init() { } let m; -init(); \ No newline at end of file +init(); diff --git a/apps/astrocalc/metadata.json b/apps/astrocalc/metadata.json index 384c7fa1e..d77474700 100644 --- a/apps/astrocalc/metadata.json +++ b/apps/astrocalc/metadata.json @@ -1,7 +1,7 @@ { "id": "astrocalc", "name": "Astrocalc", - "version": "0.02", + "version": "0.03", "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.", "icon": "astrocalc.png", "tags": "app,sun,moon,cycles,tool,outdoors", @@ -9,7 +9,6 @@ "allow_emulator": true, "storage": [ {"name":"astrocalc.app.js","url":"astrocalc-app.js"}, - {"name":"suncalc.js","url":"suncalc.js"}, {"name":"astrocalc.img","url":"astrocalc-icon.js","evaluate":true}, {"name":"first-quarter.img","url":"first-quarter-icon.js","evaluate":true}, {"name":"last-quarter.img","url":"last-quarter-icon.js","evaluate":true}, diff --git a/apps/astrocalc/suncalc.js b/apps/astrocalc/suncalc.js deleted file mode 100644 index e2beaedca..000000000 --- a/apps/astrocalc/suncalc.js +++ /dev/null @@ -1,328 +0,0 @@ -/* - (c) 2011-2015, Vladimir Agafonkin - SunCalc is a JavaScript library for calculating sun/moon position and light phases. - https://github.com/mourner/suncalc -*/ - -(function () { 'use strict'; - - // shortcuts for easier to read formulas - - var PI = Math.PI, - sin = Math.sin, - cos = Math.cos, - tan = Math.tan, - asin = Math.asin, - atan = Math.atan2, - acos = Math.acos, - rad = PI / 180; - - // sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas - - - // date/time constants and conversions - - var dayMs = 1000 * 60 * 60 * 24, - J1970 = 2440588, - J2000 = 2451545; - - function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } - function fromJulian(j) { return (j + 0.5 - J1970) * dayMs; } - function toDays(date) { return toJulian(date) - J2000; } - - - // general calculations for position - - var e = rad * 23.4397; // obliquity of the Earth - - function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); } - function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } - - function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); } - function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); } - - function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; } - - function astroRefraction(h) { - if (h < 0) // the following formula works for positive altitudes only. - h = 0; // if h = -0.08901179 a div/0 would occur. - - // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad: - return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179)); - } - - // general sun calculations - - function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } - - function eclipticLongitude(M) { - - var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center - P = rad * 102.9372; // perihelion of the Earth - - return M + C + P + PI; - } - - function sunCoords(d) { - - var M = solarMeanAnomaly(d), - L = eclipticLongitude(M); - - return { - dec: declination(L, 0), - ra: rightAscension(L, 0) - }; - } - - - var SunCalc = {}; - - - // calculates sun position for a given date and latitude/longitude - - SunCalc.getPosition = function (date, lat, lng) { - - var lw = rad * -lng, - phi = rad * lat, - d = toDays(date), - - c = sunCoords(d), - H = siderealTime(d, lw) - c.ra; - - return { - azimuth: azimuth(H, phi, c.dec), - altitude: altitude(H, phi, c.dec) - }; - }; - - - // sun times configuration (angle, morning name, evening name) - - var times = SunCalc.times = [ - [-0.833, 'sunrise', 'sunset' ], - [ -0.3, 'sunriseEnd', 'sunsetStart' ], - [ -6, 'dawn', 'dusk' ], - [ -12, 'nauticalDawn', 'nauticalDusk'], - [ -18, 'nightEnd', 'night' ], - [ 6, 'goldenHourEnd', 'goldenHour' ] - ]; - - // adds a custom time to the times config - - SunCalc.addTime = function (angle, riseName, setName) { - times.push([angle, riseName, setName]); - }; - - - // calculations for sun times - - var J0 = 0.0009; - - function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } - - function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } - function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } - - function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } - function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } - - // returns set time for the given sun altitude - function getSetJ(h, lw, phi, dec, n, M, L) { - - var w = hourAngle(h, phi, dec), - a = approxTransit(w, lw, n); - return solarTransitJ(a, M, L); - } - - - // calculates sun times for a given date, latitude/longitude, and, optionally, - // the observer height (in meters) relative to the horizon - - SunCalc.getTimes = function (date, lat, lng, height) { - - height = height || 0; - - var lw = rad * -lng, - phi = rad * lat, - - dh = observerAngle(height), - - d = toDays(date), - n = julianCycle(d, lw), - ds = approxTransit(0, lw, n), - - M = solarMeanAnomaly(ds), - L = eclipticLongitude(M), - dec = declination(L, 0), - - Jnoon = solarTransitJ(ds, M, L), - - i, len, time, h0, Jset, Jrise; - - - var result = { - solarNoon: new Date(fromJulian(Jnoon)), - nadir: new Date(fromJulian(Jnoon - 0.5)) - }; - - for (i = 0, len = times.length; i < len; i += 1) { - time = times[i]; - h0 = (time[0] + dh) * rad; - - Jset = getSetJ(h0, lw, phi, dec, n, M, L); - Jrise = Jnoon - (Jset - Jnoon); - - result[time[1]] = new Date(fromJulian(Jrise) - (dayMs / 2)); - result[time[2]] = new Date(fromJulian(Jset) + (dayMs / 2)); - } - - return result; - }; - - - // moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas - - function moonCoords(d) { // geocentric ecliptic coordinates of the moon - - var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude - M = rad * (134.963 + 13.064993 * d), // mean anomaly - F = rad * (93.272 + 13.229350 * d), // mean distance - - l = L + rad * 6.289 * sin(M), // longitude - b = rad * 5.128 * sin(F), // latitude - dt = 385001 - 20905 * cos(M); // distance to the moon in km - - return { - ra: rightAscension(l, b), - dec: declination(l, b), - dist: dt - }; - } - - SunCalc.getMoonPosition = function (date, lat, lng) { - - var lw = rad * -lng, - phi = rad * lat, - d = toDays(date), - - c = moonCoords(d), - H = siderealTime(d, lw) - c.ra, - h = altitude(H, phi, c.dec), - // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H)); - - h = h + astroRefraction(h); // altitude correction for refraction - - return { - azimuth: azimuth(H, phi, c.dec), - altitude: h, - distance: c.dist, - parallacticAngle: pa - }; - }; - - - // calculations for illumination parameters of the moon, - // based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and - // Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - - // Function updated from gist: https://gist.github.com/endel/dfe6bb2fbe679781948c - - SunCalc.getMoonIllumination = function (date) { - let month = date.getMonth(); - let year = date.getFullYear(); - let day = date.getDate(); - - let c = 0; - let e = 0; - let jd = 0; - let b = 0; - - if (month < 3) { - year--; - month += 12; - } - - ++month; - c = 365.25 * year; - e = 30.6 * month; - jd = c + e + day - 694039.09; // jd is total days elapsed - jd /= 29.5305882; // divide by the moon cycle - b = parseInt(jd); // int(jd) -> b, take integer part of jd - jd -= b; // subtract integer part to leave fractional part of original jd - b = Math.round(jd * 8); // scale fraction from 0-8 and round - - if (b >= 8) b = 0; // 0 and 8 are the same so turn 8 into 0 - - return {phase: b}; - }; - - - function hoursLater(date, h) { - return new Date(date.valueOf() + h * dayMs / 24); - } - - // calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article - - SunCalc.getMoonTimes = function (date, lat, lng, inUTC) { - var t = date; - if (inUTC) t.setUTCHours(0, 0, 0, 0); - else t.setHours(0, 0, 0, 0); - - var hc = 0.133 * rad, - h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc, - h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx; - - // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set) - for (var i = 1; i <= 24; i += 2) { - h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc; - h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc; - - a = (h0 + h2) / 2 - h1; - b = (h2 - h0) / 2; - xe = -b / (2 * a); - ye = (a * xe + b) * xe + h1; - d = b * b - 4 * a * h1; - roots = 0; - - if (d >= 0) { - dx = Math.sqrt(d) / (Math.abs(a) * 2); - x1 = xe - dx; - x2 = xe + dx; - if (Math.abs(x1) <= 1) roots++; - if (Math.abs(x2) <= 1) roots++; - if (x1 < -1) x1 = x2; - } - - if (roots === 1) { - if (h0 < 0) rise = i + x1; - else set = i + x1; - - } else if (roots === 2) { - rise = i + (ye < 0 ? x2 : x1); - set = i + (ye < 0 ? x1 : x2); - } - - if (rise && set) break; - - h0 = h2; - } - - var result = {}; - - if (rise) result.rise = hoursLater(t, rise); - if (set) result.set = hoursLater(t, set); - - if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; - - return result; - }; - - - // export as Node module / AMD module / browser variable - if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc; - else if (typeof define === 'function' && define.amd) define(SunCalc); - else global.SunCalc = SunCalc; - -}()); diff --git a/apps/daisy/ChangeLog b/apps/daisy/ChangeLog index b13ce261b..61a09a18d 100644 --- a/apps/daisy/ChangeLog +++ b/apps/daisy/ChangeLog @@ -6,3 +6,4 @@ 0.06: better contrast for light theme, use fg color instead of dithered for ring 0.07: Use default Bangle formatter for booleans 0.08: fix idle timer always getting set to true +0.09: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/daisy/app.js b/apps/daisy/app.js index 848cd1801..c99b19228 100644 --- a/apps/daisy/app.js +++ b/apps/daisy/app.js @@ -1,4 +1,4 @@ -var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); +var SunCalc = require("suncalc"); // from modules folder const storage = require('Storage'); const locale = require("locale"); const SETTINGS_FILE = "daisy.json"; @@ -70,7 +70,7 @@ function getSteps() { try { return Bangle.getHealthStatus("day").steps; } catch (e) { - if (WIDGETS.wpedom !== undefined) + if (WIDGETS.wpedom !== undefined) return WIDGETS.wpedom.getSteps(); else return 0; @@ -151,7 +151,7 @@ function prevInfo() { function clearInfo() { g.setColor(g.theme.bg); //g.setColor(g.theme.fg); - g.fillRect((w/2) - infoWidth, infoLine - infoHeight, (w/2) + infoWidth, infoLine + infoHeight); + g.fillRect((w/2) - infoWidth, infoLine - infoHeight, (w/2) + infoWidth, infoLine + infoHeight); } function drawInfo() { @@ -202,7 +202,7 @@ function drawClock() { var mm = da[4].substr(3,2); var steps = getSteps(); var p_steps = Math.round(100*(steps/10000)); - + g.reset(); g.setColor(g.theme.bg); g.fillRect(0, 0, w, h); @@ -218,7 +218,7 @@ function drawClock() { g.drawString(mm, (w/2) + 1, h/2); drawInfo(); - + // recalc sunrise / sunset every hour if (drawCount % 60 == 0) updateSunRiseSunSet(new Date(), location.lat, location.lon); @@ -254,7 +254,7 @@ function resetHrm() { Bangle.on('HRM', function(hrm) { hrmCurrent = hrm.bpm; hrmConfidence = hrm.confidence; - log_debug("HRM=" + hrm.bpm + " (" + hrm.confidence + ")"); + log_debug("HRM=" + hrm.bpm + " (" + hrm.confidence + ")"); if (infoMode == "ID_HRM" ) drawHrm(); }); @@ -360,7 +360,7 @@ function getGaugeImage(p) { palette : pal2, buffer : require("heatshrink").decompress(atob("AH4A/AH4AChWq1WpqtUFUgpBFYYABoApggQqDFYlVqBVjFYxZfFQorGLLrWCFZbgbVguoBQcFLD8qFQYMHiosDKzoOJFgZYYKwYPLFgZWawARMLDJWCawgAJcAZWYCZ6FCLCkKFQOgCZ8BFYNUFaZWSLAlAQShWQLAiESQQRtTLAKESFQOoFacFQiSCCwArTgCESQSyEUlTZTboyCnQiSCYQiSCYQiSCZQgdAVxwqYQgSwMVwOoFbMFWBquaWCArBVzKwDbRoqaWATcKbQKuaWAbcKbQKuaWAbcKVzqwNFYIqcWATaKVziwDbhDaebhjaebhgrBbTrcCFZDafbheqFcTcHbT7cDFY0CbT7cDqArxhWqwArfgFVqgrHFUDcBFY0qFcdVFY2oFcMFFY2qFclAFYugFcMBFYsCFctQFYuAFcMAFYsKFctUFYoqigEVFeEqFctVFYmoFccFFYmqFc1AcIdQFccBFf4rbGAoAhKQYr/Fa8FFc9UFYYqkgEVFf4r/FYwDDAEZTDFf4r/Ff4rbqorooArBqArlgIr/Ff4r/Ff4r/Ff4r/Ff4r/Ff4r/Ff4rbqgrlgorCioroAYIr/Ff4r/FbYDDAEZTDFf4r/FYtAFclVFYUBFc9QFf4rZAgoAgKQor/FbFUFccFFYkVFcwFDioFEAD4lFGIorgPogrtWoYAfqorEgIrlqArFAwgAdEg4rlPgqKFADrUHcQorfA4sVA4wAbEY4zHFbh7GRY4AbaY7jBqAqfERArrMBAAZUxNVbkEVFZAJBFcJhRAC6lJFYLcebQIrIBRTaXJhIrhUhLcfD5YLBbjtVFZTceZ5jceJRpkLVyaiLWDpJNFYKwaUIIrMSIKwaDhw6OVx50NFYKwZDZ6waOaCTBQjBGBZZw8CQi4ZBOR6EYeySEYQSCEaQSITDH6BvGIaKEWQSSEEbqQVVQgRYSKwLGUQgRCQKwTFUC4RYQKwSCTDAhEONQTwULAqcNCARWVLAhGMB55YPDhQqDKy4dFFhAMMLCzgFawZWbEI4AIGogAYFZtAFbgsMFTyyGVkBZOKr7gJazoA/AHIA=")) }; - + // p90 if (p >= 90 && p < 100) return { width : 176, height : 176, bpp : 2, @@ -410,7 +410,7 @@ function BUTTON(name,x,y,w,h,c,f,tx) { // if pressed the callback BUTTON.prototype.check = function(x,y) { //console.log(this.name + ":check() x=" + x + " y=" + y +"\n"); - + if (x>= this.x && x<= (this.x + this.w) && y>= this.y && y<= (this.y + this.h)) { log_debug(this.name + ":callback\n"); this.callback(); @@ -472,7 +472,7 @@ function checkIdle() { warned = false; return; } - + let hour = (new Date()).getHours(); let active = (hour >= 9 && hour < 21); //let active = true; @@ -501,7 +501,7 @@ function buzzer(n) { if (n-- < 1) return; Bangle.buzz(250); - + if (buzzTimeout) clearTimeout(buzzTimeout); buzzTimeout = setTimeout(function() { buzzTimeout = undefined; diff --git a/apps/daisy/metadata.json b/apps/daisy/metadata.json index c6cc93620..0bad50151 100644 --- a/apps/daisy/metadata.json +++ b/apps/daisy/metadata.json @@ -1,6 +1,6 @@ { "id": "daisy", "name": "Daisy", - "version":"0.08", + "version":"0.09", "dependencies": {"mylocation":"app"}, "description": "A beautiful digital clock with large ring guage, idle timer and a cyclic information line that includes, day, date, steps, battery, sunrise and sunset times", "icon": "app.png", diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index c029b432f..13e3fa809 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -12,3 +12,4 @@ 0.26: BJS2: Swipe down to rotate 180 degree 0.27: BJS2: Changed swipe down to swipe up 0.28: Reverted changes to implementation of 0.25 +0.29: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index c80b712da..6bd30be8e 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -15,7 +15,7 @@ require("Font5x9Numeric7Seg").add(Graphics); require("FontTeletext10x18Ascii").add(Graphics); // Font for single secondary time -const secondaryTimeFontSize = 4; +const secondaryTimeFontSize = 4; const secondaryTimeZoneFontSize = 2; // Font / columns for multiple secondary times @@ -39,14 +39,14 @@ const yposWorld = big ? 170 : 120; const OFFSET_TIME_ZONE = 0; const OFFSET_HOURS = 1; -var PosInterval = 0; +var PosInterval = 0; var offsets = require("Storage").readJSON("hworldclock.settings.json") || []; //=======Sun setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ -SunCalc = require("hsuncalc.js"); +SunCalc = require("suncalc"); // from modules folder const LOCATION_FILE = "mylocation.json"; var rise = "read"; var set = "..."; @@ -87,7 +87,7 @@ const mockOffsets = { //offsets = mockOffsets.fourOffsets; // should render in columns // END TESTING CODE - + // Load settings function loadMySettings() { @@ -141,11 +141,9 @@ function getCurrentTimeFromOffset(dt, offset) { function updatePos() { coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":0,"lon":0,"location":"-"}; //{"lat":53.3,"lon":10.1,"location":"Pattensen"}; if (coord.lat != 0 && coord.lon != 0) { - //pos = SunCalc.getPosition(Date.now(), coord.lat, coord.lon); times = SunCalc.getTimes(Date.now(), coord.lat, coord.lon); rise = "^" + times.sunrise.toString().split(" ")[4].substr(0,5); set = "v" + times.sunset.toString().split(" ")[4].substr(0,5); - //noonpos = SunCalc.getPosition(times.solarNoon, coord.lat, coord.lon); } else { rise = null; set = null; @@ -179,7 +177,7 @@ function drawSeconds() { //console.log(seconds); if (Bangle.isLocked() && secondsMode != "always") seconds = seconds.slice(0, -1) + ':::'; // we use :: as the font does not have an x //console.log(seconds); - g.drawString(`${seconds}`, xyCenterSeconds, yposTime+14, true); + g.drawString(`${seconds}`, xyCenterSeconds, yposTime+14, true); queueDrawSeconds(); } @@ -196,18 +194,18 @@ function draw() { let time = da[4].split(":"); let hours = time[0], minutes = time[1]; - - + + if (_12hour){ //do 12 hour stuff if (hours > 12) { ampm = "PM"; - hours = hours - 12; - if (hours < 10) hours = doublenum(hours); + hours = hours - 12; + if (hours < 10) hours = doublenum(hours); } else { - ampm = "AM"; - } - } + ampm = "AM"; + } + } //g.setFont(font, primaryTimeFontSize); g.setFont("5x9Numeric7Seg",primaryTimeFontSize); @@ -221,18 +219,18 @@ function draw() { g.setColor(g.theme.fg); } g.drawString(`${hours}:${minutes}`, xyCenter-10, yposTime, true); - + // am / PM ? if (_12hour){ //do 12 hour stuff //let ampm = require("locale").medidian(new Date()); Not working g.setFont("Vector", 17); g.drawString(ampm, xyCenterSeconds, yAmPm, true); - } + } if (secondsMode != "none") drawSeconds(); // To make sure... - - // draw Day, name of month, Date + + // draw Day, name of month, Date //DATE let localDate = require("locale").date(new Date(), 1); localDate = localDate.substring(0, localDate.length - 5); @@ -251,7 +249,7 @@ function draw() { if (offsets.length === 1) { - let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; + let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; // For a single secondary timezone, draw it bigger and drop time zone to second line const xOffset = 30; g.setFont(font, secondaryTimeFontSize).drawString(`${hours}:${minutes}`, xyCenter, yposTime2, true); @@ -277,7 +275,7 @@ function draw() { g.setFontAlign(-1, 0).setFont("Vector",12).drawString(`${rise}`, 10, 3 + yposWorld + 3 * 15, true); // draw rise g.setFontAlign(1, 0).drawString(`${set}`, xcol2, 3 + yposWorld + 3 * 15, true); // draw set } else { - g.setFontAlign(-1, 0).setFont("Vector",11).drawString("set city in \'my location\' app!", 10, 3 + yposWorld + 3 * 15, true); + g.setFontAlign(-1, 0).setFont("Vector",11).drawString("set city in \'my location\' app!", 10, 3 + yposWorld + 3 * 15, true); } } //debug settings @@ -287,7 +285,7 @@ function draw() { //g.drawString(colorWhenDark, xcol2, 3 + yposWorld + 3 * 15, true); queueDraw(); - + if (secondsMode != "none") queueDrawSeconds(); } @@ -307,7 +305,7 @@ Bangle.setUI({ if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; + drawTimeout = undefined; }}); Bangle.loadWidgets(); Bangle.drawWidgets(); @@ -328,15 +326,15 @@ if (!Bangle.isLocked()) { // Initial state if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; - } + } if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; draw(); // draw immediately, queue redraw - + }else{ if (secondsMode == "always") secondsTimeout = 1000; if (secondsMode == "when unlocked") secondsTimeout = 10 * 1000; - + if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; @@ -350,9 +348,9 @@ if (!Bangle.isLocked()) { // Initial state updatePos(); } draw(); // draw immediately, queue redraw - + } - + Bangle.on('lock',on=>{ if (!on) { // UNlocked @@ -366,7 +364,7 @@ Bangle.on('lock',on=>{ if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; - } + } if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; @@ -375,7 +373,7 @@ Bangle.on('lock',on=>{ if (secondsMode == "always") secondsTimeout = 1000; if (secondsMode == "when unlocked") secondsTimeout = 10 * 1000; - + if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; @@ -388,7 +386,7 @@ Bangle.on('lock',on=>{ PosInterval = setInterval(updatePos, 60*60E3); // refesh every 60 mins updatePos(); } - draw(); // draw immediately, queue redraw + draw(); // draw immediately, queue redraw } }); -} \ No newline at end of file +} diff --git a/apps/hworldclock/hsuncalc.js b/apps/hworldclock/hsuncalc.js deleted file mode 100644 index b1af0a0d9..000000000 --- a/apps/hworldclock/hsuncalc.js +++ /dev/null @@ -1,298 +0,0 @@ -/* Module suncalc.js - (c) 2011-2015, Vladimir Agafonkin - SunCalc is a JavaScript library for calculating sun/moon position and light phases. - https://github.com/mourner/suncalc - -PB: Usage: -E.setTimeZone(2); // 1 = MEZ, 2 = MESZ -SunCalc = require("suncalc.js"); -pos = SunCalc.getPosition(Date.now(), 53.3, 10.1); -times = SunCalc.getTimes(Date.now(), 53.3, 10.1); -rise = times.sunrise; // Date object -rise_str = rise.getHours() + ':' + rise.getMinutes(); //hh:mm -*/ -var exports={}; - -// shortcuts for easier to read formulas - -var PI = Math.PI, - sin = Math.sin, - cos = Math.cos, - tan = Math.tan, - asin = Math.asin, - atan = Math.atan2, - acos = Math.acos, - rad = PI / 180; - -// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas - -// date/time constants and conversions - -var dayMs = 1000 * 60 * 60 * 24, - J1970 = 2440588, - J2000 = 2451545; - -function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } -function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } // PB: onece removed + 0.5; included it again 4 Jan 2021 -function toDays(date) { return toJulian(date) - J2000; } - - -// general calculations for position - -var e = rad * 23.4397; // obliquity of the Earth - -function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); } -function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } - -function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); } -function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); } - -function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; } - -function astroRefraction(h) { - if (h < 0) // the following formula works for positive altitudes only. - h = 0; // if h = -0.08901179 a div/0 would occur. - - // formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad: - return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179)); -} - -// general sun calculations - -function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } - -function eclipticLongitude(M) { - - var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center - P = rad * 102.9372; // perihelion of the Earth - - return M + C + P + PI; -} - -function sunCoords(d) { - - var M = solarMeanAnomaly(d), - L = eclipticLongitude(M); - - return { - dec: declination(L, 0), - ra: rightAscension(L, 0) - }; -} - -// calculates sun position for a given date and latitude/longitude - -exports.getPosition = function (date, lat, lng) { - - var lw = rad * -lng, - phi = rad * lat, - d = toDays(date), - - c = sunCoords(d), - H = siderealTime(d, lw) - c.ra; - - return { - azimuth: Math.round((azimuth(H, phi, c.dec) / rad + 180) % 360), // PB: converted to deg - altitude: Math.round( altitude(H, phi, c.dec) / rad) // PB: converted to deg - }; -}; - - -// sun times configuration (angle, morning name, evening name) - -var times = [ - [-0.833, 'sunrise', 'sunset' ] -]; - -// calculations for sun times -var J0 = 0.0009; - -function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } - -function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } -function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } - -function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } -function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } - -// returns set time for the given sun altitude -function getSetJ(h, lw, phi, dec, n, M, L) { - - var w = hourAngle(h, phi, dec), - a = approxTransit(w, lw, n); - return solarTransitJ(a, M, L); -} - - -// calculates sun times for a given date, latitude/longitude, and, optionally, -// the observer height (in meters) relative to the horizon - -exports.getTimes = function (date, lat, lng, height) { - - height = height || 0; - - var lw = rad * -lng, - phi = rad * lat, - - dh = observerAngle(height), - - d = toDays(date), - n = julianCycle(d, lw), - ds = approxTransit(0, lw, n), - - M = solarMeanAnomaly(ds), - L = eclipticLongitude(M), - dec = declination(L, 0), - - Jnoon = solarTransitJ(ds, M, L), - - i, len, time, h0, Jset, Jrise; - - - var result = { - solarNoon: fromJulian(Jnoon), - nadir: fromJulian(Jnoon - 0.5) - }; - - for (i = 0, len = times.length; i < len; i += 1) { - time = times[i]; - h0 = (time[0] + dh) * rad; - - Jset = getSetJ(h0, lw, phi, dec, n, M, L); - Jrise = Jnoon - (Jset - Jnoon); - - result[time[1]] = fromJulian(Jrise); - result[time[2]] = fromJulian(Jset); - } - - return result; -}; - - -// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas - -function moonCoords(d) { // geocentric ecliptic coordinates of the moon - - var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude - M = rad * (134.963 + 13.064993 * d), // mean anomaly - F = rad * (93.272 + 13.229350 * d), // mean distance - - l = L + rad * 6.289 * sin(M), // longitude - b = rad * 5.128 * sin(F), // latitude - dt = 385001 - 20905 * cos(M); // distance to the moon in km - - return { - ra: rightAscension(l, b), - dec: declination(l, b), - dist: dt - }; -} - -getMoonPosition = function (date, lat, lng) { - - var lw = rad * -lng, - phi = rad * lat, - d = toDays(date), - - c = moonCoords(d), - H = siderealTime(d, lw) - c.ra, - h = altitude(H, phi, c.dec), - // formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H)); - - h = h + astroRefraction(h); // altitude correction for refraction - - return { - azimuth: azimuth(H, phi, c.dec), - altitude: h, - distance: c.dist, - parallacticAngle: pa - }; -}; - - -// calculations for illumination parameters of the moon, -// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and -// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. - -getMoonIllumination = function (date) { - - var d = toDays(date || new Date()), - s = sunCoords(d), - m = moonCoords(d), - - sdist = 149598000, // distance from Earth to Sun in km - - phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)), - inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)), - angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - - cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra)); - - return { - fraction: (1 + cos(inc)) / 2, - phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI, - angle: angle - }; -}; - - -function hoursLater(date, h) { - return new Date(date.valueOf() + h * dayMs / 24); -} - -// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article - -getMoonTimes = function (date, lat, lng, inUTC) { - var t = new Date(date); - if (inUTC) t.setUTCHours(0, 0, 0, 0); - else t.setHours(0, 0, 0, 0); - - var hc = 0.133 * rad, - h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc, - h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx; - - // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set) - for (var i = 1; i <= 24; i += 2) { - h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc; - h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc; - - a = (h0 + h2) / 2 - h1; - b = (h2 - h0) / 2; - xe = -b / (2 * a); - ye = (a * xe + b) * xe + h1; - d = b * b - 4 * a * h1; - roots = 0; - - if (d >= 0) { - dx = Math.sqrt(d) / (Math.abs(a) * 2); - x1 = xe - dx; - x2 = xe + dx; - if (Math.abs(x1) <= 1) roots++; - if (Math.abs(x2) <= 1) roots++; - if (x1 < -1) x1 = x2; - } - - if (roots === 1) { - if (h0 < 0) rise = i + x1; - else set = i + x1; - - } else if (roots === 2) { - rise = i + (ye < 0 ? x2 : x1); - set = i + (ye < 0 ? x1 : x2); - } - - if (rise && set) break; - - h0 = h2; - } - - var result = {}; - - if (rise) result.rise = hoursLater(t, rise); - if (set) result.set = hoursLater(t, set); - - if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; - - return result; -}; \ No newline at end of file diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 587c05067..3b633ead7 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.28", + "version": "0.29", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", @@ -15,11 +15,10 @@ "storage": [ {"name":"hworldclock.app.js","url":"app.js"}, {"name":"hworldclock.img","url":"hworldclock-icon.js","evaluate":true}, - {"name":"hworldclock.settings.js","url":"settings.js"}, - {"name":"hsuncalc.js","url":"hsuncalc.js"} + {"name":"hworldclock.settings.js","url":"settings.js"} ], "data": [ {"name":"hworldclock.settings.json"}, - {"name":"hworldclock.json"} + {"name":"hworldclock.json"} ] -} \ No newline at end of file +} diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index 28dcc0c28..02cef7774 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -19,3 +19,4 @@ 0.16: make check_idle boolean setting work properly with new B2 menu 0.17: Use default Bangle formatter for booleans 0.18: fix idle option always getting defaulted to true +0.19: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/pastel/metadata.json b/apps/pastel/metadata.json index 860ed833b..cf4bbbe9b 100644 --- a/apps/pastel/metadata.json +++ b/apps/pastel/metadata.json @@ -2,7 +2,7 @@ "id": "pastel", "name": "Pastel Clock", "shortName": "Pastel", - "version": "0.18", + "version": "0.19", "description": "A Configurable clock with custom fonts, background and weather display. Has a cyclic information line that includes, day, date, battery, sunrise and sunset times", "icon": "pastel.png", "dependencies": {"mylocation":"app","weather":"app"}, diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index 05c0e2367..bc41588d8 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -1,4 +1,4 @@ -var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); +var SunCalc = require("suncalc"); // from modules folder require("f_latosmall").add(Graphics); const storage = require('Storage'); const locale = require("locale"); @@ -85,7 +85,7 @@ function getSteps() { try { return Bangle.getHealthStatus("day").steps; } catch (e) { - if (WIDGETS.wpedom !== undefined) + if (WIDGETS.wpedom !== undefined) return WIDGETS.wpedom.getSteps(); else return '???'; @@ -181,12 +181,12 @@ function drawClock() { var d = new Date(); var da = d.toString().split(" "); var time = da[4].substr(0,5); - + var hh = da[4].substr(0,2); var mm = da[4].substr(3,2); var day = da[0]; var month_day = da[1] + " " + da[2]; - + // fix hh for 12hr clock var h2 = "0" + parseInt(hh) % 12 || 12; if (parseInt(hh) > 12) @@ -215,12 +215,12 @@ function drawClock() { g.reset(); g.setColor(g.theme.bg); g.fillRect(Bangle.appRect); - + // draw a grid like graph paper if (settings.grid && process.env.HWVERSION !=1) { g.setColor("#0f0"); for (var gx=20; gx <= w; gx += 20) - g.drawLine(gx, 30, gx, h - 24); + g.drawLine(gx, 30, gx, h - 24); for (var gy=30; gy <= h - 24; gy += 20) g.drawLine(0, gy, w, gy); } @@ -238,7 +238,7 @@ function drawClock() { g.drawString( (w_wind.split(' ').slice(0, 2).join(' ')), (w/2) + 6, 24 + ((y - 24)/2)); // display first 2 words of the wind string eg '4 mph' } - + if (settings.font == "Architect") g.setFontArchitect(); else if (settings.font == "GochiHand") @@ -253,7 +253,7 @@ function drawClock() { g.setFontSpecialElite(); else g.setFontLato(); - + g.setFontAlign(1,-1); // right aligned g.drawString(hh, x - 6, y); g.setFontAlign(-1,-1); // left aligned @@ -310,7 +310,7 @@ function BUTTON(name,x,y,w,h,c,f,tx) { // if pressed the callback BUTTON.prototype.check = function(x,y) { //console.log(this.name + ":check() x=" + x + " y=" + y +"\n"); - + if (x>= this.x && x<= (this.x + this.w) && y>= this.y && y<= (this.y + this.h)) { log_debug(this.name + ":callback\n"); this.callback(); @@ -366,7 +366,7 @@ function checkIdle() { warned = false; return; } - + let hour = (new Date()).getHours(); let active = (hour >= 9 && hour < 21); //let active = true; @@ -397,7 +397,7 @@ function buzzer(n) { if (n-- < 1) return; Bangle.buzz(250); - + if (buzzTimeout) clearTimeout(buzzTimeout); buzzTimeout = setTimeout(function() { buzzTimeout = undefined; diff --git a/apps/rebble/ChangeLog b/apps/rebble/ChangeLog index c009a4ec1..78ba0c5da 100644 --- a/apps/rebble/ChangeLog +++ b/apps/rebble/ChangeLog @@ -9,7 +9,8 @@ 0.09: fix battery icon size 0.10: Tell clock widgets to hide. 0.11: fix issue https://github.com/espruino/BangleApps/issues/2128 (#2128) ( settings undefined ) -0.12: implemented widget_utils +0.12: implemented widget_utils 0.13: convert var/function into let -0.14: cleanup code and fix fastload issue -0.15: fix draw before widget hide \ No newline at end of file +0.14: cleanup code and fix fastload issue +0.15: fix draw before widget hide +0.16: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/rebble/metadata.json b/apps/rebble/metadata.json index 7042fcb95..c380204a4 100644 --- a/apps/rebble/metadata.json +++ b/apps/rebble/metadata.json @@ -2,7 +2,7 @@ "id": "rebble", "name": "Rebble Clock", "shortName": "Rebble", - "version": "0.15", + "version": "0.16", "description": "A Pebble style clock, with configurable background, three sidebars including steps, day, date, sunrise, sunset, long live the rebellion", "readme": "README.md", "icon": "rebble.png", @@ -14,7 +14,6 @@ "storage": [ {"name":"rebble.app.js","url":"rebble.app.js"}, {"name":"rebble.settings.js","url":"rebble.settings.js"}, - {"name":"rebble.img","url":"rebble.icon.js","evaluate":true}, - {"name":"suncalc","url":"suncalc.js"} + {"name":"rebble.img","url":"rebble.icon.js","evaluate":true} ] } diff --git a/apps/rebble/rebble.app.js b/apps/rebble/rebble.app.js index fd0c8f7f9..445c30125 100644 --- a/apps/rebble/rebble.app.js +++ b/apps/rebble/rebble.app.js @@ -11,7 +11,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { { - let SunCalc = require("suncalc"); + let SunCalc = require("suncalc"); // from modules folder const SETTINGS_FILE = "rebble.json"; const LOCATION_FILE = "mylocation.json"; const GLOBAL_SETTINGS = "setting.json"; @@ -49,7 +49,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { } if(settings.sideTap!=0) - sideBar=parseInt(settings.sideTap)-1; //tab to + sideBar=parseInt(settings.sideTap)-1; //tab to is12Hour = (require("Storage").readJSON(GLOBAL_SETTINGS, 1) || {})["12hour"] || false; } @@ -110,15 +110,15 @@ Graphics.prototype.setFontKdamThmor = function(scale) { let date = new Date(); let hh = date.getHours(); let mm = date.getMinutes(); - + hh = formatHours(hh); mm = zeroPad(mm,2); - + //const t = 6; if (drawCount % 60 == 0) updateSunRiseSunSet(location.lat, location.lon); - + g.reset(); g.setColor(g.theme.bg); g.fillRect(0, 0, w2, h); @@ -143,7 +143,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { drawSideBar3(); break; } - + drawCount++; queueDraw(); } @@ -154,14 +154,14 @@ Graphics.prototype.setFontKdamThmor = function(scale) { let dd=date.getDate(); let mm=require("date_utils").month(date.getMonth()+1,1).toUpperCase(); - + drawBattery(w2 + (w-w2-wb)/2, h/10, wb, 17); setTextColor(); g.setFont('Vector', 20); g.setFontAlign(0, -1); g.drawString(E.getBattery() + '%', w3, (h/10) + 17 + 7); - + drawDateAndCalendar(w3, h/2, dy, dd, mm); } @@ -250,7 +250,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { } } - + // format steps so they fit in the place let formatSteps=function() { let s = Bangle.getHealthStatus("day").steps; @@ -292,8 +292,8 @@ Graphics.prototype.setFontKdamThmor = function(scale) { - let chargingListener= function(charging) { - + let chargingListener= function(charging) { + //redraw the sidebar ( with the battery ) switch(sideBar) { case 0: @@ -304,7 +304,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { break; } } - + let deleteAll=function() { // Called to unload all of the clock app @@ -320,7 +320,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { log_debug("starting.."); loadSettings(); loadLocation(); - + if(settings.autoCycle || settings.sideTap==0) { Bangle.setUI({ @@ -332,7 +332,7 @@ Graphics.prototype.setFontKdamThmor = function(scale) { if (btn>0) nextSidebar(); draw(); }); - + } else{ Bangle.setUI({ @@ -354,4 +354,4 @@ Graphics.prototype.setFontKdamThmor = function(scale) { main(); -} \ No newline at end of file +} diff --git a/apps/rebble/suncalc.js b/apps/rebble/suncalc.js deleted file mode 100644 index d86f039c5..000000000 --- a/apps/rebble/suncalc.js +++ /dev/null @@ -1,143 +0,0 @@ -/* - (c) 2011-2015, Vladimir Agafonkin - SunCalc is a JavaScript library for calculating sun/moon position and light phases. - https://github.com/mourner/suncalc - - edit for banglejs -*/ - -(function () { 'use strict'; - -// shortcuts for easier to read formulas - -var PI = Math.PI, - sin = Math.sin, - cos = Math.cos, - tan = Math.tan, - asin = Math.asin, - atan = Math.atan2, - acos = Math.acos, - rad = PI / 180; - -// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas - - -// date/time constants and conversions - -var dayMs = 1000 * 60 * 60 * 24, - J1970 = 2440588, - J2000 = 2451545; - -function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } -function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } -function toDays(date) { return toJulian(date) - J2000; } - - -// general calculations for position - -var e = rad * 23.4397; // obliquity of the Earth - -function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); } - - -// general sun calculations - -function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); } - -function eclipticLongitude(M) { - - var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center - P = rad * 102.9372; // perihelion of the Earth - - return M + C + P + PI; -} - -var SunCalc = {}; - - -// sun times configuration (angle, morning name, evening name) - -var times = SunCalc.times = [ - [-0.833, 'sunrise', 'sunset' ], - [ -0.3, 'sunriseEnd', 'sunsetStart' ], - [ -6, 'dawn', 'dusk' ], - [ -12, 'nauticalDawn', 'nauticalDusk'], - [ -18, 'nightEnd', 'night' ], - [ 6, 'goldenHourEnd', 'goldenHour' ] -]; - - - -// calculations for sun times - -var J0 = 0.0009; - -function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } - -function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; } -function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); } - -function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); } -function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; } - -// returns set time for the given sun altitude -function getSetJ(h, lw, phi, dec, n, M, L) { - - var w = hourAngle(h, phi, dec), - a = approxTransit(w, lw, n); - return solarTransitJ(a, M, L); -} - - -// calculates sun times for a given date, latitude/longitude, and, optionally, -// the observer height (in meters) relative to the horizon - -SunCalc.getTimes = function (date, lat, lng, height) { - - height = height || 0; - - var lw = rad * -lng, - phi = rad * lat, - - dh = observerAngle(height), - - d = toDays(date), - n = julianCycle(d, lw), - ds = approxTransit(0, lw, n), - - M = solarMeanAnomaly(ds), - L = eclipticLongitude(M), - dec = declination(L, 0), - - Jnoon = solarTransitJ(ds, M, L), - - i, len, time, h0, Jset, Jrise; - - - var result = { - solarNoon: fromJulian(Jnoon), - nadir: fromJulian(Jnoon - 0.5) - }; - - for (i = 0, len = times.length; i < len; i += 1) { - time = times[i]; - h0 = (time[0] + dh) * rad; - - Jset = getSetJ(h0, lw, phi, dec, n, M, L); - Jrise = Jnoon - (Jset - Jnoon); - - result[time[1]] = fromJulian(Jrise); - result[time[2]] = fromJulian(Jset); - } - - return result; -}; - - -// export as Node module / AMD module / browser variable -if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc; -else if (typeof define === 'function' && define.amd) define(SunCalc); -else window.SunCalc = SunCalc; - - -}()); \ No newline at end of file diff --git a/apps/sunclock/ChangeLog b/apps/sunclock/ChangeLog new file mode 100644 index 000000000..d63f1567e --- /dev/null +++ b/apps/sunclock/ChangeLog @@ -0,0 +1,2 @@ +0.01: First commit +0.02: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/sunclock/app.js b/apps/sunclock/app.js index 4609565a2..1685bc218 100644 --- a/apps/sunclock/app.js +++ b/apps/sunclock/app.js @@ -9,8 +9,8 @@ SunCalc = require("suncalc.js"); loc = require('locale'); const LOCATION_FILE = "mylocation.json"; const xyCenter = g.getWidth() / 2 + 3; -const yposTime = 60; -const yposDate = 100; +const yposTime = 60; +const yposDate = 100; const yposRS = 135; const yposPos = 160; var rise = "07:00"; @@ -19,13 +19,21 @@ var pos = {altitude: 20, azimuth: 135}; var noonpos = {altitude: 37, azimuth: 180}; let idTimeout = null; + + function updatePos() { + function radToDeg(pos) { + return { // instead of mofidying suncalc + azimuth: Math.round((pos.azimuth / rad + 180) % 360), + altitude: Math.round( pos.altitude / rad) + }; + } coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":53.3,"lon":10.1,"location":"Pattensen"}; - pos = SunCalc.getPosition(Date.now(), coord.lat, coord.lon); + pos = radToDeg(SunCalc.getPosition(Date.now(), coord.lat, coord.lon)); times = SunCalc.getTimes(Date.now(), coord.lat, coord.lon); rise = times.sunrise.toString().split(" ")[4].substr(0,5); set = times.sunset.toString().split(" ")[4].substr(0,5); - noonpos = SunCalc.getPosition(times.solarNoon, coord.lat, coord.lon); + noonpos = radToDeg(SunCalc.getPosition(times.solarNoon, coord.lat, coord.lon)); } function drawSimpleClock() { @@ -38,7 +46,7 @@ function drawSimpleClock() { var time = da[4].substr(0, 5); // draw time - g.setFont("Vector",60); + g.setFont("Vector",60); g.drawString(time, xyCenter, yposTime, true); var date = [loc.dow(new Date(),1), loc.date(d,1)].join(" "); // draw day of week, date @@ -51,7 +59,7 @@ function drawSimpleClock() { g.setFont("Vector",21); g.drawString(`H${pos.altitude}/${noonpos.altitude} Az${pos.azimuth}`, xyCenter, yposPos, true); // draw sun pos - + let t = d.getSeconds()*1000 + d.getMilliseconds(); idTimeout = setTimeout(drawSimpleClock, 60000 - t); // time till next minute } diff --git a/apps/sunclock/metadata.json b/apps/sunclock/metadata.json index 617d76821..a9155f6f6 100644 --- a/apps/sunclock/metadata.json +++ b/apps/sunclock/metadata.json @@ -1,7 +1,7 @@ { "id": "sunclock", "name": "Sun Clock", - "version": "0.01", + "version": "0.02", "description": "A clock with sunset/sunrise, sun height/azimuth", "icon": "app.png", "type": "clock", @@ -11,7 +11,6 @@ "allow_emulator": true, "storage": [ {"name":"sunclock.app.js","url":"app.js"}, - {"name":"sunclock.img","url":"app-icon.js","evaluate":true}, - {"name":"suncalc.js","url":"suncalc.js"} + {"name":"sunclock.img","url":"app-icon.js","evaluate":true} ] } diff --git a/apps/timerclk/ChangeLog b/apps/timerclk/ChangeLog index 7a357b1aa..5a954d58c 100644 --- a/apps/timerclk/ChangeLog +++ b/apps/timerclk/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Add sunrise/sunset. Fix timer bugs. 0.03: Use default Bangle formatter for booleans +0.04: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps diff --git a/apps/timerclk/app.js b/apps/timerclk/app.js index c750fcfde..ee30b059a 100644 --- a/apps/timerclk/app.js +++ b/apps/timerclk/app.js @@ -3,7 +3,7 @@ Graphics.prototype.setFontAnton = function(scale) { g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAA/gAAAAAAAAAAP/gAAAAAAAAAH//gAAAAAAAAB///gAAAAAAAAf///gAAAAAAAP////gAAAAAAD/////gAAAAAA//////gAAAAAP//////gAAAAH///////gAAAB////////gAAAf////////gAAP/////////gAD//////////AA//////////gAA/////////4AAA////////+AAAA////////gAAAA///////wAAAAA//////8AAAAAA//////AAAAAAA/////gAAAAAAA////4AAAAAAAA///+AAAAAAAAA///gAAAAAAAAA//wAAAAAAAAAA/8AAAAAAAAAAA/AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////AAAAAB///////8AAAAH////////AAAAf////////wAAA/////////4AAB/////////8AAD/////////+AAH//////////AAP//////////gAP//////////gAP//////////gAf//////////wAf//////////wAf//////////wAf//////////wA//8AAAAAB//4A//wAAAAAAf/4A//gAAAAAAP/4A//gAAAAAAP/4A//gAAAAAAP/4A//wAAAAAAf/4A///////////4Af//////////wAf//////////wAf//////////wAf//////////wAP//////////gAP//////////gAH//////////AAH//////////AAD/////////+AAB/////////8AAA/////////4AAAP////////gAAAD///////+AAAAAf//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAP/gAAAAAAAAAAf/gAAAAAAAAAAf/gAAAAAAAAAAf/AAAAAAAAAAA//AAAAAAAAAAA/+AAAAAAAAAAB/8AAAAAAAAAAD//////////gAH//////////gAP//////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAAAB/gAAD//4AAAAf/gAAP//4AAAB//gAA///4AAAH//gAB///4AAAf//gAD///4AAA///gAH///4AAD///gAP///4AAH///gAP///4AAP///gAf///4AAf///gAf///4AB////gAf///4AD////gA////4AH////gA////4Af////gA////4A/////gA//wAAB/////gA//gAAH/////gA//gAAP/////gA//gAA///8//gA//gAD///w//gA//wA////g//gA////////A//gA///////8A//gA///////4A//gAf//////wA//gAf//////gA//gAf/////+AA//gAP/////8AA//gAP/////4AA//gAH/////gAA//gAD/////AAA//gAB////8AAA//gAA////wAAA//gAAP///AAAA//gAAD//8AAAA//gAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/+AAAAAD/wAAB//8AAAAP/wAAB///AAAA//wAAB///wAAB//wAAB///4AAD//wAAB///8AAH//wAAB///+AAP//wAAB///+AAP//wAAB////AAf//wAAB////AAf//wAAB////gAf//wAAB////gA///wAAB////gA///wAAB////gA///w//AAf//wA//4A//AAA//wA//gA//AAAf/wA//gB//gAAf/wA//gB//gAAf/wA//gD//wAA//wA//wH//8AB//wA///////////gA///////////gA///////////gA///////////gAf//////////AAf//////////AAP//////////AAP/////////+AAH/////////8AAH///+/////4AAD///+f////wAAA///8P////gAAAf//4H///+AAAAH//gB///wAAAAAP4AAH/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAA//wAAAAAAAAAP//wAAAAAAAAB///wAAAAAAAAf///wAAAAAAAH////wAAAAAAA/////wAAAAAAP/////wAAAAAB//////wAAAAAf//////wAAAAH///////wAAAA////////wAAAP////////wAAA///////H/wAAA//////wH/wAAA/////8AH/wAAA/////AAH/wAAA////gAAH/wAAA///4AAAH/wAAA//+AAAAH/wAAA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gA///////////gAAAAAAAAH/4AAAAAAAAAAH/wAAAAAAAAAAH/wAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAA/////+B///AAA/////+B///wAA/////+B///4AA/////+B///8AA/////+B///8AA/////+B///+AA/////+B////AA/////+B////AA/////+B////AA/////+B////gA/////+B////gA/////+B////gA/////+A////gA//gP/gAAB//wA//gf/AAAA//wA//gf/AAAAf/wA//g//AAAAf/wA//g//AAAA//wA//g//gAAA//wA//g//+AAP//wA//g////////gA//g////////gA//g////////gA//g////////gA//g////////AA//gf///////AA//gf//////+AA//gP//////+AA//gH//////8AA//gD//////4AA//gB//////wAA//gA//////AAAAAAAH////8AAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAAAAB///////+AAAAH////////gAAAf////////4AAB/////////8AAD/////////+AAH//////////AAH//////////gAP//////////gAP//////////gAf//////////wAf//////////wAf//////////wAf//////////wAf//////////4A//wAD/4AAf/4A//gAH/wAAP/4A//gAH/wAAP/4A//gAP/wAAP/4A//gAP/4AAf/4A//wAP/+AD//4A///wP//////4Af//4P//////wAf//4P//////wAf//4P//////wAf//4P//////wAP//4P//////gAP//4H//////gAH//4H//////AAH//4D/////+AAD//4D/////8AAB//4B/////4AAA//4A/////wAAAP/4AP////AAAAB/4AD///4AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAA//gAAAAAAAAAA//gAAAAAAAAAA//gAAAAAAADgA//gAAAAAAP/gA//gAAAAAH//gA//gAAAAB///gA//gAAAAP///gA//gAAAD////gA//gAAAf////gA//gAAB/////gA//gAAP/////gA//gAB//////gA//gAH//////gA//gA///////gA//gD///////gA//gf///////gA//h////////gA//n////////gA//////////gAA/////////AAAA////////wAAAA///////4AAAAA///////AAAAAA//////4AAAAAA//////AAAAAAA/////4AAAAAAA/////AAAAAAAA////8AAAAAAAA////gAAAAAAAA///+AAAAAAAAA///4AAAAAAAAA///AAAAAAAAAA//4AAAAAAAAAA/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//gB///wAAAAP//4H///+AAAA///8P////gAAB///+f////4AAD///+/////8AAH/////////+AAH//////////AAP//////////gAP//////////gAf//////////gAf//////////wAf//////////wAf//////////wA///////////wA//4D//wAB//4A//wB//gAA//4A//gA//gAAf/4A//gA//AAAf/4A//gA//gAAf/4A//wB//gAA//4A///P//8AH//4Af//////////wAf//////////wAf//////////wAf//////////wAf//////////gAP//////////gAP//////////AAH//////////AAD/////////+AAD///+/////8AAB///8f////wAAAf//4P////AAAAH//wD///8AAAAA/+AAf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//gAAAAAAAAB///+AA/+AAAAP////gA//wAAAf////wA//4AAB/////4A//8AAD/////8A//+AAD/////+A///AAH/////+A///AAP//////A///gAP//////A///gAf//////A///wAf//////A///wAf//////A///wAf//////A///wA///////AB//4A//4AD//AAP/4A//gAB//AAP/4A//gAA//AAP/4A//gAA/+AAP/4A//gAB/8AAP/4A//wAB/8AAf/4Af//////////wAf//////////wAf//////////wAf//////////wAf//////////wAP//////////gAP//////////gAH//////////AAH/////////+AAD/////////8AAB/////////4AAAf////////wAAAP////////AAAAB///////4AAAAAD/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAB/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAA//AAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("EiAnGicnJycnJycnEw=="), 78+(scale<<8)+(1<<16)); }; -var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); +var SunCalc = require("suncalc"); // from modules folder const LOCATION_FILE = "mylocation.json"; let location; var sunRise = "--:--"; @@ -72,7 +72,7 @@ function drawSpecial() { g.setFontAlign(0,0).setFont(settings.specialFont, settings.specialFontSize); var y = Bangle.appRect.y + g.stringMetrics("00:00").height/2; g.clearRect(Bangle.appRect.x, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y+g.stringMetrics("00:00").height); - + if (stopwatches.length) { time = timerclk.getTime(stopwatches[stopwatch]); g.drawString(timerclk.formatTime(time, true), x, y); @@ -111,7 +111,7 @@ function draw() { var dateStr = require("locale").date(date,settings.shortDate).toUpperCase(); var dowStr = require("locale").dow(date).toUpperCase(); var srssStr = sunRise + sunIcons + sunSet; - + // draw time if (settings.timeFont == "Anton") { g.setFontAlign(0,0).setFont("Anton"); diff --git a/apps/timerclk/metadata.json b/apps/timerclk/metadata.json index 899eda59d..5bd6bee24 100644 --- a/apps/timerclk/metadata.json +++ b/apps/timerclk/metadata.json @@ -1,8 +1,8 @@ -{ +{ "id": "timerclk", "name": "Timer Clock", "shortName":"Timer Clock", - "version":"0.03", + "version":"0.04", "description": "A clock with stopwatches, timers and alarms build in.", "icon": "app-icon.png", "type": "clock", diff --git a/apps/sunclock/suncalc.js b/modules/suncalc.js similarity index 76% rename from apps/sunclock/suncalc.js rename to modules/suncalc.js index b1af0a0d9..0c22c6cb2 100644 --- a/apps/sunclock/suncalc.js +++ b/modules/suncalc.js @@ -1,17 +1,34 @@ -/* Module suncalc.js +/* (c) 2011-2015, Vladimir Agafonkin SunCalc is a JavaScript library for calculating sun/moon position and light phases. https://github.com/mourner/suncalc -PB: Usage: -E.setTimeZone(2); // 1 = MEZ, 2 = MESZ -SunCalc = require("suncalc.js"); -pos = SunCalc.getPosition(Date.now(), 53.3, 10.1); -times = SunCalc.getTimes(Date.now(), 53.3, 10.1); -rise = times.sunrise; // Date object -rise_str = rise.getHours() + ':' + rise.getMinutes(); //hh:mm +Copyright (c) 2014, Vladimir Agafonkin +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ -var exports={}; + +(function () { 'use strict'; // shortcuts for easier to read formulas @@ -26,6 +43,7 @@ var PI = Math.PI, // sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas + // date/time constants and conversions var dayMs = 1000 * 60 * 60 * 24, @@ -33,7 +51,7 @@ var dayMs = 1000 * 60 * 60 * 24, J2000 = 2451545; function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; } -function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } // PB: onece removed + 0.5; included it again 4 Jan 2021 +function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); } function toDays(date) { return toJulian(date) - J2000; } @@ -81,9 +99,13 @@ function sunCoords(d) { }; } + +var SunCalc = {}; + + // calculates sun position for a given date and latitude/longitude -exports.getPosition = function (date, lat, lng) { +SunCalc.getPosition = function (date, lat, lng) { var lw = rad * -lng, phi = rad * lat, @@ -93,19 +115,32 @@ exports.getPosition = function (date, lat, lng) { H = siderealTime(d, lw) - c.ra; return { - azimuth: Math.round((azimuth(H, phi, c.dec) / rad + 180) % 360), // PB: converted to deg - altitude: Math.round( altitude(H, phi, c.dec) / rad) // PB: converted to deg + azimuth: azimuth(H, phi, c.dec), + altitude: altitude(H, phi, c.dec) }; }; // sun times configuration (angle, morning name, evening name) -var times = [ - [-0.833, 'sunrise', 'sunset' ] +var times = SunCalc.times = [ + [-0.833, 'sunrise', 'sunset' ], + [ -0.3, 'sunriseEnd', 'sunsetStart' ], + [ -6, 'dawn', 'dusk' ], + [ -12, 'nauticalDawn', 'nauticalDusk'], + [ -18, 'nightEnd', 'night' ], + [ 6, 'goldenHourEnd', 'goldenHour' ] ]; +// adds a custom time to the times config + +SunCalc.addTime = function (angle, riseName, setName) { + times.push([angle, riseName, setName]); +}; + + // calculations for sun times + var J0 = 0.0009; function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); } @@ -128,7 +163,7 @@ function getSetJ(h, lw, phi, dec, n, M, L) { // calculates sun times for a given date, latitude/longitude, and, optionally, // the observer height (in meters) relative to the horizon -exports.getTimes = function (date, lat, lng, height) { +SunCalc.getTimes = function (date, lat, lng, height) { height = height || 0; @@ -189,7 +224,7 @@ function moonCoords(d) { // geocentric ecliptic coordinates of the moon }; } -getMoonPosition = function (date, lat, lng) { +SunCalc.getMoonPosition = function (date, lat, lng) { var lw = rad * -lng, phi = rad * lat, @@ -216,7 +251,7 @@ getMoonPosition = function (date, lat, lng) { // based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and // Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998. -getMoonIllumination = function (date) { +SunCalc.getMoonIllumination = function (date) { var d = toDays(date || new Date()), s = sunCoords(d), @@ -243,7 +278,7 @@ function hoursLater(date, h) { // calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article -getMoonTimes = function (date, lat, lng, inUTC) { +SunCalc.getMoonTimes = function (date, lat, lng, inUTC) { var t = new Date(date); if (inUTC) t.setUTCHours(0, 0, 0, 0); else t.setHours(0, 0, 0, 0); @@ -295,4 +330,12 @@ getMoonTimes = function (date, lat, lng, inUTC) { if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true; return result; -}; \ No newline at end of file +}; + + +// export as Node module / AMD module / browser variable +if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc; +else if (typeof define === 'function' && define.amd) define(SunCalc); +else window.SunCalc = SunCalc; + +}()); From 7a2af0e61d9cd4260d3f30d382a0946ce2fb7e93 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 09:52:34 +0000 Subject: [PATCH 239/342] Fixing warnings --- apps/espruinoprog/metadata.json | 3 ++- apps/hourstrike/metadata.json | 3 ++- apps/imageclock/app.js | 2 +- apps/presentor/metadata.json | 3 ++- bin/sanitycheck.js | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/espruinoprog/metadata.json b/apps/espruinoprog/metadata.json index ebb55b23d..7371e005d 100644 --- a/apps/espruinoprog/metadata.json +++ b/apps/espruinoprog/metadata.json @@ -11,7 +11,8 @@ "custom": "custom.html", "storage": [ {"name":"espruinoprog.app.js","url":"app.js"}, - {"name":"espruinoprog.img","url":"app-icon.js","evaluate":true}, + {"name":"espruinoprog.img","url":"app-icon.js","evaluate":true} + ], "data": [ {"name":"espruinoprog.json"} ] } diff --git a/apps/hourstrike/metadata.json b/apps/hourstrike/metadata.json index 614db54e4..d0ddb511a 100644 --- a/apps/hourstrike/metadata.json +++ b/apps/hourstrike/metadata.json @@ -11,7 +11,8 @@ "storage": [ {"name":"hourstrike.app.js","url":"app.js"}, {"name":"hourstrike.boot.js","url":"boot.js"}, - {"name":"hourstrike.img","url":"app-icon.js","evaluate":true}, + {"name":"hourstrike.img","url":"app-icon.js","evaluate":true} + ], "data" : [ {"name":"hourstrike.json","url":"hourstrike.json"} ] } diff --git a/apps/imageclock/app.js b/apps/imageclock/app.js index 374e73070..dc21d7162 100644 --- a/apps/imageclock/app.js +++ b/apps/imageclock/app.js @@ -622,7 +622,7 @@ s.pl = {}; endPerfLog("fullDraw", true); if (!Bangle.uiRemove){ - setUi(); + setUi(); // Calls Bangle.setUI() (this comment also fixes lint warning) let orig = Bangle.drawWidgets; Bangle.drawWidgets = ()=>{}; Bangle.loadWidgets(); diff --git a/apps/presentor/metadata.json b/apps/presentor/metadata.json index e5b5e289f..2d0a22102 100644 --- a/apps/presentor/metadata.json +++ b/apps/presentor/metadata.json @@ -12,7 +12,8 @@ "allow_emulator": true, "storage": [ {"name":"presentor.app.js","url":"app.js"}, - {"name":"presentor.img","url":"app-icon.js","evaluate":true}, + {"name":"presentor.img","url":"app-icon.js","evaluate":true} + ], "data": [ {"name":"presentor.json","url":"settings.json"} ] } diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 5af6f1aa1..8bec3a9a1 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -94,6 +94,7 @@ const INTERNAL_FILES_IN_APP_TYPE = { // list of app types and files they SHOULD var KNOWN_WARNINGS = [ "App gpsrec data file wildcard .gpsrc? does not include app ID", "App widmessages storage file messagewidget is also listed as storage file for app widmsggrid", +"App owmweather data file weather.json is also listed as data file for app weather", ]; function globToRegex(pattern) { From a0d3d15dbf5997e9b5741f3b26281fb4a98bb203 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 09:52:44 +0000 Subject: [PATCH 240/342] Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps + Add a 'time' clockinfo that also displays a percentage of day left --- apps/clkinfosunrise/ChangeLog | 2 + apps/clkinfosunrise/clkinfo.js | 64 ++++++++++++++++++++++++------- apps/clkinfosunrise/metadata.json | 2 +- 3 files changed, 53 insertions(+), 15 deletions(-) diff --git a/apps/clkinfosunrise/ChangeLog b/apps/clkinfosunrise/ChangeLog index 5560f00bc..9854c6b53 100644 --- a/apps/clkinfosunrise/ChangeLog +++ b/apps/clkinfosunrise/ChangeLog @@ -1 +1,3 @@ 0.01: New App! +0.02: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps + Add a 'time' clockinfo that also displays a percentage of day left diff --git a/apps/clkinfosunrise/clkinfo.js b/apps/clkinfosunrise/clkinfo.js index 1454a83f3..93bdfad41 100644 --- a/apps/clkinfosunrise/clkinfo.js +++ b/apps/clkinfosunrise/clkinfo.js @@ -1,32 +1,68 @@ (function() { // get today's sunlight times for lat/lon - var sunrise, sunset; + var sunrise, sunset, date; + var SunCalc = require("suncalc"); // from modules folder + const locale = require("locale"); function calculate() { - var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); - const locale = require("locale"); var location = require("Storage").readJSON("mylocation.json",1)||{}; location.lat = location.lat||51.5072; - location.lon = location.lon||0.1276; - location.location = location.location||"London"; - var times = SunCalc.getTimes(new Date(), location.lat, location.lon); - sunrise = locale.time(times.sunrise,1); - sunset = locale.time(times.sunset,1); + location.lon = location.lon||0.1276; // London + date = new Date(Date.now()); + var times = SunCalc.getTimes(date, location.lat, location.lon); + sunrise = times.sunrise; + sunset = times.sunset; /* do we want to re-calculate this every day? Or we just assume that 'show' will get called once a day? */ } + function show() { + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); + }, 60000); + }, 60000 - (Date.now() % 60000)); + } + function hide() { + clearInterval(this.interval); + this.interval = undefined; + } + return { name: "Bangle", items: [ { name : "Sunrise", - get : () => ({ text : sunrise, - img : atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }), - show : calculate, hide : () => {} + get : () => { calculate(); + return { text : locale.time(sunrise,1), + img : atob("GBiBAAAAAAAAAAAAAAAYAAA8AAB+AAD/AAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }}, + show : show, hide : hide }, { name : "Sunset", - get : () => ({ text : sunset, - img : atob("GBiBAAAAAAAAAAAAAAB+AAA8AAAYAAAYAAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }), - show : calculate, hide : () => {} + get : () => { calculate(); + return { text : locale.time(sunset,1), + img : atob("GBiBAAAAAAAAAAAAAAB+AAA8AAAYAAAYAAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }}, + show : show, hide : hide + }, { name : "Time", // Time in day (uses v/min/max to show percentage through day) + get : () => { + calculate(); + let day = true; + let v = 0; + let d = date.getTime(); + let dayLength = sunset.getTime()-sunrise.getTime(); + if (d < sunrise.getTime()) { + day = false; // early morning + v = 100 - Math.round(100 * (sunrise.getTime()-d) / (86400000-dayLength)); + } else if (d > sunset.getTime()) { + day = false; // evening + v = Math.round(100 * (d-sunset.getTime()) / (86400000-dayLength)); + } else { // day! + v = Math.round(100 * (d-sunrise.getTime()) / dayLength); + } + return { text : locale.time(date,1), v : v, min : 0, max : 100, + img : day ? atob("GBiBAAAYAAAYAAAYAAgAEBwAOAx+MAD/AAH/gAP/wAf/4Af/4Of/5+f/5wf/4Af/4AP/wAH/gAD/AAx+MBwAOAgAEAAYAAAYAAAYAA==") : atob("GBiBAAfwAA/8AAP/AAH/gAD/wAB/wAB/4AA/8AA/8AA/8AAf8AAf8AAf8AAf8AA/8AA/8AA/4AB/4AB/wAD/wAH/gAf/AA/8AAfwAA==") + } + }, + show : show, hide : hide } ] }; diff --git a/apps/clkinfosunrise/metadata.json b/apps/clkinfosunrise/metadata.json index f8b68e11f..74877c523 100644 --- a/apps/clkinfosunrise/metadata.json +++ b/apps/clkinfosunrise/metadata.json @@ -1,6 +1,6 @@ { "id": "clkinfosunrise", "name": "Sunrise Clockinfo", - "version":"0.01", + "version":"0.02", "description": "For clocks that display 'clockinfo' (messages that can be cycled through using the clock_info module) this displays sunrise and sunset based on the location from the 'My Location' app", "icon": "app.png", "type": "clkinfo", From e303c15ac27fb513bf98fe7c18f94bdce16b8f82 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 10:32:16 +0000 Subject: [PATCH 241/342] faster circles rendering --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 21 ++++++++++++--------- apps/circlesclock/metadata.json | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index 9e36f67ba..262228ff0 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -34,3 +34,4 @@ 0.18: Improved clkinfo handling and using it for the weather circle 0.19: Remove old code and fixing clkinfo handling (fix HRM and other items that change) Remove settings for what is displayed and instead allow circles to be changed by swiping +0.20: Add much faster circle rendering (250ms -> 40ms) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index efd0b0aa6..5585d7145 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -288,8 +288,7 @@ function drawInnerCircleAndTriangle(w) { function drawGauge(cx, cy, percent, color) { let offset = 15; let end = 360 - offset; - let radius = radiusInner + (circleCount == 3 ? 3 : 2); - let size = radiusOuter - radiusInner - 2; + let radius = radiusOuter+1; if (percent <= 0) return; // no gauge needed if (percent > 1) percent = 1; @@ -299,14 +298,18 @@ function drawGauge(cx, cy, percent, color) { color = getGradientColor(color, percent); g.setColor(color); - - // FIXME: this one loop takes 0.25 sec EACH TIME the function is called - for (let i = startRotation; i > endRotation - size; i -= size) { - let r = i * Math.PI / 180; // radians - g.fillCircle( + // convert to radians + startRotation *= Math.PI / 180; + let amt = Math.PI / 10; + endRotation = (endRotation * Math.PI / 180) - amt; + // all we need to draw is an arc, because we'll fill the center + let poly = [cx,cy]; + for (let r = startRotation; r > endRotation; r -= amt) + poly.push( cx + radius * Math.sin(r), - cy + radius * Math.cos(r), size); - } + cy + radius * Math.cos(r) + ); + g.fillPoly(poly); } function writeCircleText(w, content) { diff --git a/apps/circlesclock/metadata.json b/apps/circlesclock/metadata.json index 3b436a032..fb66c064e 100644 --- a/apps/circlesclock/metadata.json +++ b/apps/circlesclock/metadata.json @@ -1,7 +1,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.19", + "version":"0.20", "description": "A clock with three or four circles for different data at the bottom in a probably familiar style", "icon": "app.png", "screenshots": [{"url":"screenshot-dark.png"}, {"url":"screenshot-light.png"}, {"url":"screenshot-dark-4.png"}, {"url":"screenshot-light-4.png"}], From d33106bc8fea127e91074c39112599a9f3ee9167 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 10:32:35 +0000 Subject: [PATCH 242/342] Allow sunrise to show a 'range' --- apps/clkinfosunrise/clkinfo.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/clkinfosunrise/clkinfo.js b/apps/clkinfosunrise/clkinfo.js index 93bdfad41..b31cc22ba 100644 --- a/apps/clkinfosunrise/clkinfo.js +++ b/apps/clkinfosunrise/clkinfo.js @@ -43,6 +43,7 @@ img : atob("GBiBAAAAAAAAAAAAAAB+AAA8AAAYAAAYAAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }}, show : show, hide : hide }, { name : "Time", // Time in day (uses v/min/max to show percentage through day) + hasRange : true, get : () => { calculate(); let day = true; From 117560ffedc26f14968202a89a0caa6116f0daf0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 10:32:45 +0000 Subject: [PATCH 243/342] Fix 'srcs' being defined in global scope --- apps/widmessages/ChangeLog | 3 ++- apps/widmessages/metadata.json | 2 +- apps/widmessages/widget.js | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/widmessages/ChangeLog b/apps/widmessages/ChangeLog index 3a41005e9..f82b8a310 100644 --- a/apps/widmessages/ChangeLog +++ b/apps/widmessages/ChangeLog @@ -1 +1,2 @@ -0.01: Moved messages widget into standalone widget app \ No newline at end of file +0.01: Moved messages widget into standalone widget app +0.02: Fix 'srcs' being defined in global scope diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json index 080e19273..bf88ca401 100644 --- a/apps/widmessages/metadata.json +++ b/apps/widmessages/metadata.json @@ -1,7 +1,7 @@ { "id": "widmessages", "name": "Message Widget", - "version": "0.01", + "version": "0.02", "description": "Widget showing new messages", "icon": "app.png", "type": "widget", diff --git a/apps/widmessages/widget.js b/apps/widmessages/widget.js index 2ee11b690..743833c77 100644 --- a/apps/widmessages/widget.js +++ b/apps/widmessages/widget.js @@ -18,7 +18,7 @@ if (!this.width) return; let settings = Object.assign({flash: true, maxMessages: 3}, require("Storage").readJSON("messages.settings.json", true) || {}); if (recall!==true || settings.flash) { - const msgsShown = E.clip(this.srcs.length, 0, settings.maxMessages), + const msgsShown = E.clip(this.srcs.length, 0, settings.maxMessages); srcs = Object.keys(this.srcs); g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+23); for(let i = 0; i Date: Fri, 9 Dec 2022 10:33:38 +0000 Subject: [PATCH 244/342] Add fast load capability --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 58 +++++++++++++++---------------------- 2 files changed, 24 insertions(+), 35 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index 262228ff0..da6066e32 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -35,3 +35,4 @@ 0.19: Remove old code and fixing clkinfo handling (fix HRM and other items that change) Remove settings for what is displayed and instead allow circles to be changed by swiping 0.20: Add much faster circle rendering (250ms -> 40ms) + Add fast load capability diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 5585d7145..7f7e49032 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -1,6 +1,3 @@ -let clock_info = require("clock_info"); -let locale = require("locale"); -let storage = require("Storage"); Graphics.prototype.setFontRobotoRegular50NumericOnly = function(scale) { // Actual height 39 (40 - 2) this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAB8AAAAAAAfAAAAAAAPwAAAAAAB8AAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA4AAAAAAB+AAAAAAD/gAAAAAD/4AAAAAH/4AAAAAP/wAAAAAP/gAAAAAf/gAAAAAf/AAAAAA/+AAAAAB/+AAAAAB/8AAAAAD/4AAAAAH/4AAAAAD/wAAAAAA/wAAAAAAPgAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAAAB////gAAA////8AAA/////gAAP////8AAH8AAA/gAB8AAAD4AA+AAAAfAAPAAAADwADwAAAA8AA8AAAAPAAPAAAADwADwAAAA8AA8AAAAPAAPgAAAHwAB8AAAD4AAfwAAD+AAD/////AAA/////wAAH////4AAAf///4AAAB///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAPgAAAAAADwAAAAAAB8AAAAAAAfAAAAAAAHgAAAAAAD4AAAAAAA+AAAAAAAPAAAAAAAH/////wAB/////8AA//////AAP/////wAD/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAfgAADwAAP4AAB8AAH+AAA/AAD/gAAfwAB/AAAf8AAfAAAP/AAPgAAH7wAD4AAD88AA8AAB+PAAPAAA/DwADwAAfg8AA8AAPwPAAPAAH4DwADwAH8A8AA+AD+APAAPwB/ADwAB/D/gA8AAf//gAPAAD//wADwAAf/wAA8AAD/4AAPAAAHwAADwAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAADgAAAHwAA+AAAD8AAP4AAB/AAD/AAA/wAA/wAAf4AAD+AAHwAAAPgAD4APAB8AA+ADwAPAAPAA8ADwADwAPAA8AA8ADwAPAAPAA8ADwADwAfAA8AA8AH4APAAPgD+AHwAB8B/wD4AAf7/+B+AAD//v//AAA//x//wAAD/4P/4AAAf8B/4AAAAYAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAHwAAAAAAH8AAAAAAD/AAAAAAD/wAAAAAD/8AAAAAB/vAAAAAB/jwAAAAA/g8AAAAA/wPAAAAAfwDwAAAAf4A8AAAAf4APAAAAP8ADwAAAP8AA8AAAH8AAPAAAD/////8AA//////AAP/////wAD/////8AA//////AAAAAAPAAAAAAADwAAAAAAA8AAAAAAAPAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAB/APwAAH//wD+AAD//8A/wAA///AH+AAP//wAPgAD/B4AB8AA8A+AAfAAPAPAADwADwDwAA8AA8A8AAPAAPAPAADwADwD4AA8AA8A+AAPAAPAPwAHwADwD8AD4AA8AfwD+AAPAH///AADwA///wAA8AH//4AAPAAf/4AAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAD//+AAAAD///4AAAD////AAAB////4AAA/78D/AAAfw8AH4AAPweAA+AAD4PgAHwAB8DwAA8AAfA8AAPAAHgPAADwAD4DwAA8AA+A8AAPAAPAPgAHwADwD4AB8AA8AfgA+AAPAH+B/gAAAA///wAAAAH//4AAAAA//8AAAAAH/8AAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAA8AAAAAAAPAAAAAAADwAAAAAAA8AAAABAAPAAAABwADwAAAB8AA8AAAB/AAPAAAB/wADwAAD/8AA8AAD/8AAPAAD/4AADwAD/4AAA8AD/4AAAPAH/wAAADwH/wAAAA8H/wAAAAPH/wAAAAD3/gAAAAA//gAAAAAP/gAAAAAD/gAAAAAA/AAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwA/4AAAH/Af/AAAH/8P/4AAD//n//AAA//7//4AAfx/+A+AAHwD+AHwAD4AfgB8AA8AHwAPAAPAA8ADwADwAPAA8AA8ADwAPAAPAA8ADwADwAfAA8AA+AH4AfAAHwD+AHwAB/D/4D4AAP/+/n+AAD//n//AAAf/w//gAAB/wH/wAAAHwA/4AAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAD/8AAAAAD//wAAAAB//+AAAAA///wAAAAf4H+APAAH4AfgDwAD8AB8A8AA+AAfAPAAPAADwDwADwAA8B8AA8AAPAfAAPAADwHgADwAA8D4AA+AAeB+AAHwAHg/AAB+ADwfgAAP8D4/4AAD////8AAAf///8AAAB///+AAAAP//+AAAAAP/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAOAAAB8AAHwAAAfgAD8AAAH4AA/AAAB8AAHwAAAOAAA4AAAAAAAAAAAAAAAAAAAAAAAAAA"), 46, atob("DRUcHBwcHBwcHBwcDA=="), 50+(scale<<8)+(1<<16)); @@ -13,6 +10,11 @@ Graphics.prototype.setFontRobotoRegular21 = function(scale) { return this; }; +{ +let clock_info = require("clock_info"); +let locale = require("locale"); +let storage = require("Storage"); + let SETTINGS_FILE = "circlesclock.json"; let settings = Object.assign( storage.readJSON("circlesclock.default.json", true) || {}, @@ -79,7 +81,7 @@ let circleFontBig = circleCount == 3 ? "Vector:16" : "Vector:12"; let iconOffset = circleCount == 3 ? 6 : 8; -function draw() { +let draw = function() { let R = Bangle.appRect; g.reset().clearRect(R.x,R.y, R.x2, h3-(radiusBorder+1)); @@ -126,13 +128,13 @@ function draw() { queueDraw(); } -function getCircleColor(index) { +let getCircleColor = function(index) { let color = settings["circle" + index + "color"]; if (color && color != "") return color; return g.theme.fg; } -function getGradientColor(color, percent) { +let getGradientColor = function(color, percent) { if (isNaN(percent)) percent = 0; if (percent > 1) percent = 1; let colorList = [ @@ -152,7 +154,7 @@ function getGradientColor(color, percent) { return color; } -function getCircleIconColor(index, color, percent) { +let getCircleIconColor = function(index, color, percent) { let colorizeIcon = settings["circle" + index + "colorizeIcon"] == true; if (colorizeIcon) { return getGradientColor(color, percent); @@ -161,7 +163,7 @@ function getCircleIconColor(index, color, percent) { } } -function drawEmpty(img, w, color) { +let drawEmpty = function(img, w, color) { drawGauge(w, h3, 0, color); drawInnerCircleAndTriangle(w); writeCircleText(w, "?"); @@ -170,7 +172,7 @@ function drawEmpty(img, w, color) { .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } -function drawCircle(index, item, data) { +let drawCircle = function(index, item, data) { var w = circlePosX[index-1]; drawCircleBackground(w); const color = getCircleColor(index); @@ -193,7 +195,7 @@ function drawCircle(index, item, data) { * Choose weather icon to display based on weather conditition code * https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2 */ -function getWeatherIconByCode(code, big) { +let getWeatherIconByCode = function(code, big) { let codeGroup = Math.round(code / 100); if (big == undefined) big = false; @@ -251,21 +253,10 @@ function getWeatherIconByCode(code, big) { } } -function formatSeconds(s) { - if (s > 60 * 60) { // hours - return Math.round(s / (60 * 60)) + "h"; - } - if (s > 60) { // minutes - return Math.round(s / 60) + "m"; - } - return "<1m"; -} - - /* * Draws the background and the grey circle */ -function drawCircleBackground(w) { +let drawCircleBackground = function(w) { // Draw rectangle background: g.setColor(colorBg); g.fillRect(w - radiusBorder, h3 - radiusBorder, w + radiusBorder, g.getHeight()-1); @@ -274,7 +265,7 @@ function drawCircleBackground(w) { g.fillCircle(w, h3, radiusOuter); } -function drawInnerCircleAndTriangle(w) { +let drawInnerCircleAndTriangle = function(w) { // Draw inner circle g.setColor(colorBg); g.fillCircle(w, h3, radiusInner); @@ -285,7 +276,7 @@ function drawInnerCircleAndTriangle(w) { /* * This draws the actual gauge consisting out of lots of little filled circles */ -function drawGauge(cx, cy, percent, color) { +let drawGauge = function(cx, cy, percent, color) { let offset = 15; let end = 360 - offset; let radius = radiusOuter+1; @@ -312,7 +303,7 @@ function drawGauge(cx, cy, percent, color) { g.fillPoly(poly); } -function writeCircleText(w, content) { +let writeCircleText = function(w, content) { if (content == undefined) return; let font = String(content).length > 4 ? circleFontSmall : String(content).length > 3 ? circleFont : circleFontBig; g.setFont(font); @@ -322,7 +313,7 @@ function writeCircleText(w, content) { g.drawString(content, w, h3); } -function getWeather() { +let getWeather=function() { let jsonWeather = storage.readJSON('weather.json'); return jsonWeather && jsonWeather.weather ? jsonWeather.weather : undefined; } @@ -331,18 +322,14 @@ g.clear(1); // clear the whole screen Bangle.setUI({ mode : "clock", - /*remove : function() { - THIS CLOCK IS NOT YET ABLE TO UNLOAD ALL OF ITSELF. - DO NOT UNCOMMENT THIS WITOUT FIXING IT - OR THERE WILL BE HUGE MEMORY LEAKS - // Called to unload all of the clock app + remove : function() { + // Called to unload all of the clock app (allowing for 'fast load') if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - for(var i=1;i<=circleCount; i++) - clockInfoMenu[i].remove(); + clockInfoMenu.forEach(c => c.remove()); delete Graphics.prototype.setFontRobotoRegular50NumericOnly; delete Graphics.prototype.setFontRobotoRegular21; - }*/ + } }); let clockInfoDraw = (itm, info, options) => { @@ -366,7 +353,7 @@ if (!showWidgets) require("widget_utils").hide(); else Bangle.drawWidgets(); // schedule a draw for the next second or minute -function queueDraw() { +let queueDraw=function() { let queueMillis = settings.updateInterval * 1000; if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { @@ -376,3 +363,4 @@ function queueDraw() { } draw(); +} From 79acfbb5a8ac28dd204e2c594e575550609ea085 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 13:14:02 +0000 Subject: [PATCH 245/342] Calendar clockinfo --- apps/clkinfocal/ChangeLog | 1 + apps/clkinfocal/app.png | Bin 0 -> 901 bytes apps/clkinfocal/clkinfo.js | 32 ++++++++++++++++++++++++++++++++ apps/clkinfocal/metadata.json | 12 ++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 apps/clkinfocal/ChangeLog create mode 100644 apps/clkinfocal/app.png create mode 100644 apps/clkinfocal/clkinfo.js create mode 100644 apps/clkinfocal/metadata.json diff --git a/apps/clkinfocal/ChangeLog b/apps/clkinfocal/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/clkinfocal/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/clkinfocal/app.png b/apps/clkinfocal/app.png new file mode 100644 index 0000000000000000000000000000000000000000..ed79cd884b54dc076665137caedbdcc1e21962c1 GIT binary patch literal 901 zcmV;01A6?4P)L)Chr)I}5{4KBxs*>drsWb|(+{ z`eX*c3AG?od-GwSG@uo!W#G_b8fZ7vCVtp4)v7#dGKtr!$EgN4;2#VXL(hv2dd3TGN!8sa)BjmJbkP|)vUz6BO_(u zuyPpl4)1BtyXRm4q^{jW-sguU5`^>393t;uBF-_2^}Bj5^AX`f0)Ezw8{8#@)`Ow9 z(TtP@0Hmc%g(j&403h#^|NrEB`{k1-;;QR+b+{n!3l-w3x_$$sayYCU0J)aSb;&8$ ztR)hZ=de5%d5`M)UF~Px0D%5ZUR75NN{X69Qu=y82z*0q_L1Va_wEDOPM^_pikkE~ z)q8+yAe!2!Ft8F`lb<414&%O&3O%%$LumdPnB)eEE-(BOx3GS!TXX%mZv=Dc1%!5L ze#&uKq08|(J@q$nx~hiDwQckq;2dH;I5OU4Q#vp { + let d = new Date(); + let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); + g.drawImage(atob("FhgBDADAMAMP/////////////////////8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAP///////"),1,0); + g.setFont("6x15").setFontAlign(0,0).drawString(d.getDate(),11,17); + return { + text : require("locale").dow(d,1).toUpperCase(), + img : g.asImage("string") + }; + }, + show : function() { + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); + }, 86400000); + }, 86400000 - (Date.now() % 86400000)); + }, + hide : function() { + clearInterval(this.interval); + this.interval = undefined; + } + } + ] + }; +}) diff --git a/apps/clkinfocal/metadata.json b/apps/clkinfocal/metadata.json new file mode 100644 index 000000000..6d6dd63fc --- /dev/null +++ b/apps/clkinfocal/metadata.json @@ -0,0 +1,12 @@ +{ "id": "clkinfocal", + "name": "Calendar Clockinfo", + "version":"0.01", + "description": "For clocks that display 'clockinfo' (messages that can be cycled through using the clock_info module) this displays the day of the month in the icon, and the weekday", + "icon": "app.png", + "type": "clkinfo", + "tags": "clkinfo,calendar", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"clkinfocal.clkinfo.js","url":"clkinfo.js"} + ] +} From a115c3f86254fe098d2b2dddf0f1a46003d8bc30 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 13:19:07 +0000 Subject: [PATCH 246/342] Change 3rd mode to show the next sunrise/sunset time (not actual time) --- apps/clkinfosunrise/ChangeLog | 1 + apps/clkinfosunrise/clkinfo.js | 4 ++-- apps/clkinfosunrise/metadata.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/clkinfosunrise/ChangeLog b/apps/clkinfosunrise/ChangeLog index 9854c6b53..d50fb06f4 100644 --- a/apps/clkinfosunrise/ChangeLog +++ b/apps/clkinfosunrise/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps Add a 'time' clockinfo that also displays a percentage of day left +0.03: Change 3rd mode to show the next sunrise/sunset time (not actual time) diff --git a/apps/clkinfosunrise/clkinfo.js b/apps/clkinfosunrise/clkinfo.js index b31cc22ba..71031e1d5 100644 --- a/apps/clkinfosunrise/clkinfo.js +++ b/apps/clkinfosunrise/clkinfo.js @@ -42,7 +42,7 @@ return { text : locale.time(sunset,1), img : atob("GBiBAAAAAAAAAAAAAAB+AAA8AAAYAAAYAAAAAAAAAAAAAAAYAAAYAAQYIA4AcAYAYAA8AAB+AAD/AAH/gD///D///AAAAAAAAAAAAA==") }}, show : show, hide : hide - }, { name : "Time", // Time in day (uses v/min/max to show percentage through day) + }, { name : "Sunrise/set", // Time in day (uses v/min/max to show percentage through day) hasRange : true, get : () => { calculate(); @@ -59,7 +59,7 @@ } else { // day! v = Math.round(100 * (d-sunrise.getTime()) / dayLength); } - return { text : locale.time(date,1), v : v, min : 0, max : 100, + return { text : locale.time(day ? sunset.getTime() : sunrise.getTime(),1), v : v, min : 0, max : 100, img : day ? atob("GBiBAAAYAAAYAAAYAAgAEBwAOAx+MAD/AAH/gAP/wAf/4Af/4Of/5+f/5wf/4Af/4AP/wAH/gAD/AAx+MBwAOAgAEAAYAAAYAAAYAA==") : atob("GBiBAAfwAA/8AAP/AAH/gAD/wAB/wAB/4AA/8AA/8AA/8AAf8AAf8AAf8AAf8AA/8AA/8AA/4AB/4AB/wAD/wAH/gAf/AA/8AAfwAA==") } }, diff --git a/apps/clkinfosunrise/metadata.json b/apps/clkinfosunrise/metadata.json index 74877c523..d130c6453 100644 --- a/apps/clkinfosunrise/metadata.json +++ b/apps/clkinfosunrise/metadata.json @@ -1,6 +1,6 @@ { "id": "clkinfosunrise", "name": "Sunrise Clockinfo", - "version":"0.02", + "version":"0.03", "description": "For clocks that display 'clockinfo' (messages that can be cycled through using the clock_info module) this displays sunrise and sunset based on the location from the 'My Location' app", "icon": "app.png", "type": "clkinfo", From 870ecae41c30e9238ffd09b963159afce1fab816 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 13:31:55 +0000 Subject: [PATCH 247/342] Change 3rd mode to show the time to next sunrise/sunset time (not actual time) --- apps/clkinfosunrise/ChangeLog | 2 +- apps/clkinfosunrise/clkinfo.js | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/clkinfosunrise/ChangeLog b/apps/clkinfosunrise/ChangeLog index d50fb06f4..86e7a7fa8 100644 --- a/apps/clkinfosunrise/ChangeLog +++ b/apps/clkinfosunrise/ChangeLog @@ -1,4 +1,4 @@ 0.01: New App! 0.02: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps Add a 'time' clockinfo that also displays a percentage of day left -0.03: Change 3rd mode to show the next sunrise/sunset time (not actual time) +0.03: Change 3rd mode to show the time to next sunrise/sunset time (not actual time) diff --git a/apps/clkinfosunrise/clkinfo.js b/apps/clkinfosunrise/clkinfo.js index 71031e1d5..22c507f34 100644 --- a/apps/clkinfosunrise/clkinfo.js +++ b/apps/clkinfosunrise/clkinfo.js @@ -47,19 +47,25 @@ get : () => { calculate(); let day = true; - let v = 0; let d = date.getTime(); let dayLength = sunset.getTime()-sunrise.getTime(); + let timeUntil, timeTotal; if (d < sunrise.getTime()) { day = false; // early morning - v = 100 - Math.round(100 * (sunrise.getTime()-d) / (86400000-dayLength)); + timePast = sunrise.getTime()-d; + timeTotal = 86400000-dayLength; } else if (d > sunset.getTime()) { day = false; // evening - v = Math.round(100 * (d-sunset.getTime()) / (86400000-dayLength)); + timePast = d-sunset.getTime(); + timeTotal = 86400000-dayLength; } else { // day! - v = Math.round(100 * (d-sunrise.getTime()) / dayLength); + timePast = d-sunrise.getTime(); + timeTotal = dayLength; } - return { text : locale.time(day ? sunset.getTime() : sunrise.getTime(),1), v : v, min : 0, max : 100, + let v = Math.round(100 * timePast / timeTotal); + let minutesTo = (timeTotal-timePast)/60000; + return { text : (minutesTo>90) ? (Math.round(minutesTo/60)+"h") : (Math.round(minutesTo)+"m"), + v : v, min : 0, max : 100, img : day ? atob("GBiBAAAYAAAYAAAYAAgAEBwAOAx+MAD/AAH/gAP/wAf/4Af/4Of/5+f/5wf/4Af/4AP/wAH/gAD/AAx+MBwAOAgAEAAYAAAYAAAYAA==") : atob("GBiBAAfwAA/8AAP/AAH/gAD/wAB/wAB/4AA/8AA/8AA/8AAf8AAf8AAf8AAf8AA/8AA/8AA/4AB/4AB/wAD/wAH/gAf/AA/8AAfwAA==") } }, From 25c50d2d97d9b1a4bb986f7f04a5a8aa8d803c38 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 14:42:33 +0000 Subject: [PATCH 248/342] 0.21: Remade all icons without a palette for dark theme --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 20 ++++++++++---------- apps/circlesclock/metadata.json | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index da6066e32..9c3b673aa 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -36,3 +36,4 @@ Remove settings for what is displayed and instead allow circles to be changed by swiping 0.20: Add much faster circle rendering (250ms -> 40ms) Add fast load capability +0.21: Remade all icons without a palette for dark theme diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 7f7e49032..5039488a7 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -200,16 +200,16 @@ let getWeatherIconByCode = function(code, big) { if (big == undefined) big = false; // weather icons: - let weatherCloudy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4AAAAAAAfg+AAAAAAAAfHwAAAAAAAA+eAAAAAAAAB54AAAAAAAAHvAAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD3gAAAAAAAAeeAAAAAAAAB58AAAAAAAAPj4AAAAAAAB8H4AAAAAAAfgP////////8Af////////gA////////8AAf//////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAAAAAAfgD/Af8H/4//7///////9//z/+AAAAAAAA"); - let weatherSunny = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAwADwADAAAAHgAPAAeAAAAfAA8AD4AAAA+ADwAfAAAAB8APAD4AAAAD4B+AfAAAAAHw//D4AAAAAPv//fAAAAAAf///4AAAAAA/4H/AAAAAAB+AH4AAAAAAPgAHwAAAAAA8AAPAAAAAAHwAA+AAAAAAeAAB4AAAAAB4AAHgAAAAAPAAAPAAAA//8AAA//8AD//wAAD//wAP//AAAP//AA//8AAA//8AAADwAADwAAAAAHgAAeAAAAAAeAAB4AAAAAB8AAPgAAAAADwAA8AAAAAAPgAHwAAAAAAfgB+AAAAAAD/gf8AAAAAAf///4AAAAAD7//3wAAAAAfD/8PgAAAAD4B+AfAAAAAfADwA+AAAAD4APAB8AAAAfAA8AD4AAAB4ADwAHgAAADAAPAAMAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAYAQCBAIA8AH4A/wb/YP8A/gB+ARiBAIAYABgAAA"); - let weatherMoon = big ? atob("QEDBAP//wxgAAAYAAAAPAAAAD4AAAA8AAAAPwAAADwAAAA/gAAAPAAAAB/APAP/wAAAH+A8A//AAAAf4DwD/8AAAB/wPAP/wAAAH/gAADwAAAAe+AAAPAAAAB54AAA8AAAAHngAADwAAAAePAAAAAAAAD48OAAAAAAAPDw+AAAAAAB8PD8AAAAAAHg8P4AAAAAA+DwPwAAAAAHwfAfgAAAAB+D4A/AAA8AfwfgB/8AD//+D+AD/8AP//wfgAH/4Af/8B8AAf/wB//APgAAgfgD+AA8AAAAfAH8AHwAAAA+AP8B+AAAAB4Af//4AAAAHgA///gAAAAPAA//8AAAAA8AAf/wAAAADwAAAAAAAAAPAAAAAAAAAA8AcAAAAAAADwD+AAAAAAAfAfgAAAAAAB+D4AAAAAAAB8fAAAAAAAAD54AAAAAAAAHngAAAAAAAAe8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAPeAAAAAAAAB54AAAAAAAAHnwAAAAAAAA+PgAAAAAAAHwfgAAAAAAB+A/////////wB////////+AD////////wAB///////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAYAP8B/4P/w//D/8f/5//j/8P/w//B/4D/ABgAAA"); - let weatherPartlyCloudy = big ? atob("QEDBAP//wxgAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAABwAPAA4AAAAHgA8AHgAAAAfADwA+AAAAA+AfgHwAAAAB8P/w+AAAAAD7//3wAAAAAH///+BAAAAAP+B/wOAAAAAfgB+B8AAAAD4AD8H4AAAAPAA/wPwAAAB8AH+Af/AAAHgA/AA//AAAeAH4AB/+AADwAfAAH/8A//AD4AAIH4D/8AfAAAAHwP/wB4AAAAPg//AHgAAAAeAA8B+AAAAB4AB4fwAAAADwAHn/AAAAAPAAff8AAAAA8AA/8AAAAADwAD/AAAAAAPAEH4AAAAAA8A4PgAAAAAHwHgcAAAAAAfg+AwAAAAAAfHwAAAAAAAA+eAAAAAAAAB54AAAAAAAAHvAAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD3gAAAAAAAAeeAAAAAAAAB58AAAAAAAAPj4AAAAAAAB8H4AAAAAAAfgP////////8Af////////gA////////8AAf//////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAAAYQAMAD8AIQBhoW+AOYBwwOBBgHGAGP/wf+AAA"); - let weatherRainy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4APAA8AAfg+AA8ADwAAfHwADwAPAAA+eAAPAA8AAB54AAAAAAAAHvAAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AADw8PDwAP8AAPDw8PAA/wAA8PDw8AD3gADw8PDwAeeAAAAAAAAB58AAAAAAAAPj4AAAAAAAB8H4AAAAAAAfgP/w8PDw8P8Af/Dw8PDw/gA/8PDw8PD8AAfw8PDw8OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAPAAAAAAAPAA8AAAAAAA8ADwAAAAAADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAYAH4AwwOBBgGEAOQAJBgjPOEkgGYAZgA8ABgAAA"); - let weatherPartlyRainy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4AAAA8AAfg+AAAADwAAfHwAAAAPAAA+eAAAAA8AAB54AAAADwAAHvAAAAAPAAAP8AAAAA8AAA/wAAAADwAAD/AAAA8PAAAP8AAADw8AAA/wAAAPDwAAD3gAAA8PAAAeeAAADw8AAB58AAAPDwAAPj4AAA8PAAB8H4AADw8AAfgP//8PDw//8Af//w8PD//gA///Dw8P/8AAf/8PDw/+AAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAEEAQAAeADMAYaFvoTmAMMDgQIBxhhiGGG9wDwAGA"); - let weatherSnowy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4AAAADwAfg+AAAAAPAAfHwAAAAA8AA+eAAAAADwAB54AA8AD/8AHvAADwAP/wAP8AAPAA//AA/wAA8AD/8AD/AA//AA8AAP8AD/8ADwAA/wAP/wAPAAD3gA//AA8AAeeAAPAAAAAB58AA8AAAAAPj4ADwAAAAB8H4APAAAAAfgP/wAA8A//8Af/AADwD//gA/8AAPAP/8AAfwAA8A/+AAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAAADwAGAEYg73C50BCAEIC50O9wRiAGAA8AAAAAA"); - let weatherFoggy = big ? atob("QEDBAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAwADwADAAAAHgAPAAeAAAAfAA8AD4AAAA+ADwAfAAAAB8APAD4AAAAD4B+AfAAAAAHw//D4AAAAAPv//fAAAAAAf///4AAAAAA/4H/AAAAAAB+AH4AAAAAAPgAHwAAAAAA8AAPAAAAAAHwAA+AAAAAAeAAB4AAAAAB4AAHgAAAAAPAAAPAAAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AD///AADwAAAP//8AAeAAAA///wAB4AAAD///AAPgAAAAAAAAA8AAAAAAAAAHwAAAAAAAAB+AAAAAAAAAf8AAAAD///D/4AAAAP//8P3wAAAA///w8PgAAAD///CAfAAAAAAAAAA+AAAAAAAAAB8AAAAAAAAAD4AAAAAAAAAHgAAP//8PAAMAAA///w8AAAAAD///DwAAAAAP//8PAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAAADwAZgDDA4EGAcQAZAAgAAf74AAAAAd/4AAAAA"); - let weatherStormy = big ? atob("QEDBAP//wxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAB//gAAAAAAAP//gAAAAAAD///AAAAAAAf4H+AAAAAAD8AD8AAAAAAfgAH4AAAAAB8AAPwAAAAAPgAAf/AAAAB8AAA//AAAAHgAAB/+AAAAeAAAH/8AAAH4AAAIH4AAB/AAAAAHwAAf8AAAAAPgAD/wAAAAAeAAPwAAAAAB4AB8AAAAAADwAHgAAAAAAPAA+AAAAAAA8ADwAAAAAADwA/AAAAAAAPAH8AAAAAAA8A/wAAAAAAHwH4AAAAAAAfg+AAAAAAAAfHwAAAAAAAA+eAAAAAAAAB54AAAAD/AAHvAAAAAf4AAP8AAAAB/gAA/wAAAAP8AAD/AAAAA/gAAP8AAAAH+AAA/wAAAAfwAAD3gAAAD/AAAeeAAAAP4AAB58AAAB/AAAPj4AAAH8AAB8H4AAA/gAAfgP//+D//D/8Af//4f/4P/gA///B//B/8AAf/8P/8P+AAAAAAAPgAAAAAAAAB8AAAAAAAAAHwAAAAAAAAA+AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB4AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : atob("EBCBAAAAAYAH4AwwOBBgGEAOQMJAgjmOGcgAgACAAAAAAAAA"); - let unknown = big ? atob("QEDBAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAH//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAA/AAD4AAAAAD4H4HwAAAAAfB/4PgAAAAB8P/weAAAAAHg//h4AAAAA+Hw+HwAAAAD4eB8PAAAAAP/wDw8AAAAA//APDwAAAAD/8A8PAAAAAH/gDw8AAAAAAAAfDwAAAAAAAH4fAAAAAAAB/B4AAAAAAAf4HgAAAAAAD/A+AAAAAAAfwHwAAAAAAD8A+AAAAAAAPgH4AAAAAAB8B/AAAAAAAHgf4AAAAAAA+H+AAAAAAADwfwAAAAAAAPD8AAAAAAAA8PAAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAADw8AAAAAAAAPDwAAAAAAAA8PAAAAAAAADw8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") : undefined; + let weatherCloudy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAD//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAAfAAD8AAAAAD4AAH/wAAAAfAAAP/wAAAB4AAAf/gAAAHgAAB//AAAB+AAACB+AAAfwAAAAB8AAH/AAAAAD4AA/8AAAAAHgAD8AAAAAAeAAfAAAAAAA8AB4AAAAAADwAPgAAAAAAPAA8AAAAAAA8APwAAAAAADwB/AAAAAAAPAP8AAAAAAB8B+AAAAAAAH4PgAAAAAAAHx8AAAAAAAAPngAAAAAAAAeeAAAAAAAAB7wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA94AAAAAAAAHngAAAAAAAAefAAAAAAAAD4+AAAAAAAAfB+AAAAAAAH4D/////////AH////////4AP////////AAH///////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAAAAAAfgD/Af8H/4//7///////9//z/+AAAAAAAA"); + let weatherSunny = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAMAA8AAwAAAB4ADwAHgAAAHwAPAA+AAAAPgA8AHwAAAAfADwA+AAAAA+AfgHwAAAAB8P/w+AAAAAD7//3wAAAAAH///+AAAAAAP+B/wAAAAAAfgB+AAAAAAD4AB8AAAAAAPAADwAAAAAB8AAPgAAAAAHgAAeAAAAAAeAAB4AAAAADwAADwAAAP//AAAP//AA//8AAA//8AD//wAAD//wAP//AAAP//AAAA8AAA8AAAAAB4AAHgAAAAAHgAAeAAAAAAfAAD4AAAAAA8AAPAAAAAAD4AB8AAAAAAH4AfgAAAAAA/4H/AAAAAAH///+AAAAAA+//98AAAAAHw//D4AAAAA+AfgHwAAAAHwA8APgAAAA+ADwAfAAAAHwAPAA+AAAAeAA8AB4AAAAwADwADAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAYAQCBAIA8AH4A/wb/YP8A/gB+ARiBAIAYABgAAA"); + let weatherMoon = big ? atob("QECBAAAGAAAADwAAAA+AAAAPAAAAD8AAAA8AAAAP4AAADwAAAAfwDwD/8AAAB/gPAP/wAAAH+A8A//AAAAf8DwD/8AAAB/4AAA8AAAAHvgAADwAAAAeeAAAPAAAAB54AAA8AAAAHjwAAAAAAAA+PDgAAAAAADw8PgAAAAAAfDw/AAAAAAB4PD+AAAAAAPg8D8AAAAAB8HwH4AAAAAfg+APwAAPAH8H4Af/AA///g/gA//AD//8H4AB/+AH//AfAAH/8Af/wD4AAIH4A/gAPAAAAHwB/AB8AAAAPgD/AfgAAAAeAH//+AAAAB4AP//4AAAADwAP//AAAAAPAAH/8AAAAA8AAAAAAAAADwAAAAAAAAAPAHAAAAAAAA8A/gAAAAAAHwH4AAAAAAAfg+AAAAAAAAfHwAAAAAAAA+eAAAAAAAAB54AAAAAAAAHvAAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD3gAAAAAAAAeeAAAAAAAAB58AAAAAAAAPj4AAAAAAAB8H4AAAAAAAfgP////////8Af////////gA////////8AAf//////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAYAP8B/4P/w//D/8f/5//j/8P/w//B/4D/ABgAAA"); + let weatherPartlyCloudy = big ? atob("QECBAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAcADwAOAAAAB4APAB4AAAAHwA8APgAAAAPgH4B8AAAAAfD/8PgAAAAA+//98AAAAAB////gQAAAAD/gf8DgAAAAH4AfgfAAAAA+AA/B+AAAADwAP8D8AAAAfAB/gH/wAAB4APwAP/wAAHgB+AAf/gAA8AHwAB//AP/wA+AACB+A//AHwAAAB8D/8AeAAAAD4P/wB4AAAAHgAPAfgAAAAeAAeH8AAAAA8AB5/wAAAADwAH3/AAAAAPAAP/AAAAAA8AA/wAAAAADwBB+AAAAAAPAOD4AAAAAB8B4HAAAAAAH4PgMAAAAAAHx8AAAAAAAAPngAAAAAAAAeeAAAAAAAAB7wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA94AAAAAAAAHngAAAAAAAAefAAAAAAAAD4+AAAAAAAAfB+AAAAAAAH4D/////////AH////////4AP////////AAH///////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAAAYQAMAD8AIQBhoW+AOYBwwOBBgHGAGP/wf+AAA"); + let weatherRainy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAD//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAAfAAD8AAAAAD4AAH/wAAAAfAAAP/wAAAB4AAAf/gAAAHgAAB//AAAB+AAACB+AAAfwAAAAB8AAH/AAAAAD4AA/8AAAAAHgAD8AAAAAAeAAfAAAAAAA8AB4AAAAAADwAPgAAAAAAPAA8AAAAAAA8APwAAAAAADwB/AAAAAAAPAP8AAAAAAB8B+ADwAPAAH4PgAPAA8AAHx8AA8ADwAAPngADwAPAAAeeAAAAAAAAB7wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAA8PDw8AD/AADw8PDwAP8AAPDw8PAA94AA8PDw8AHngAAAAAAAAefAAAAAAAAD4+AAAAAAAAfB+AAAAAAAH4D/8PDw8PD/AH/w8PDw8P4AP/Dw8PDw/AAH8PDw8PDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ADwAAAAAADwAPAAAAAAAPAA8AAAAAAA8ADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAYAH4AwwOBBgGEAOQAJBgjPOEkgGYAZgA8ABgAAA"); + let weatherPartlyRainy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAD//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAAfAAD8AAAAAD4AAH/wAAAAfAAAP/wAAAB4AAAf/gAAAHgAAB//AAAB+AAACB+AAAfwAAAAB8AAH/AAAAAD4AA/8AAAAAHgAD8AAAAAAeAAfAAAAAAA8AB4AAAAAADwAPgAAAAAAPAA8AAAAAAA8APwAAAAAADwB/AAAAAAAPAP8AAAAAAB8B+AAAAPAAH4PgAAAA8AAHx8AAAADwAAPngAAAAPAAAeeAAAAA8AAB7wAAAADwAAD/AAAAAPAAAP8AAAAA8AAA/wAAAPDwAAD/AAAA8PAAAP8AAADw8AAA94AAAPDwAAHngAAA8PAAAefAAADw8AAD4+AAAPDwAAfB+AAA8PAAH4D///Dw8P//AH//8PDw//4AP//w8PD//AAH//Dw8P/gAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAEEAQAAeADMAYaFvoTmAMMDgQIBxhhiGGG9wDwAGA"); + let weatherSnowy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAD//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAAfAAD8AAAAAD4AAH/wAAAAfAAAP/wAAAB4AAAf/gAAAHgAAB//AAAB+AAACB+AAAfwAAAAB8AAH/AAAAAD4AA/8AAAAAHgAD8AAAAAAeAAfAAAAAAA8AB4AAAAAADwAPgAAAAAAPAA8AAAAAAA8APwAAAAAADwB/AAAAAAAPAP8AAAAAAB8B+AAAAA8AH4PgAAAADwAHx8AAAAAPAAPngAAAAA8AAeeAAPAA//AB7wAA8AD/8AD/AADwAP/wAP8AAPAA//AA/wAP/wAPAAD/AA//AA8AAP8AD/8ADwAA94AP/wAPAAHngADwAAAAAefAAPAAAAAD4+AA8AAAAAfB+ADwAAAAH4D/8AAPAP//AH/wAA8A//4AP/AADwD//AAH8AAPAP/gAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAAADwAGAEYg73C50BCAEIC50O9wRiAGAA8AAAAAA"); + let weatherFoggy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAMAA8AAwAAAB4ADwAHgAAAHwAPAA+AAAAPgA8AHwAAAAfADwA+AAAAA+AfgHwAAAAB8P/w+AAAAAD7//3wAAAAAH///+AAAAAAP+B/wAAAAAAfgB+AAAAAAD4AB8AAAAAAPAADwAAAAAB8AAPgAAAAAHgAAeAAAAAAeAAB4AAAAADwAADwAAAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AA///wAA8AAAD///AAHgAAAP//8AAeAAAA///wAD4AAAAAAAAAPAAAAAAAAAB8AAAAAAAAAfgAAAAAAAAH/AAAAA///w/+AAAAD///D98AAAAP//8PD4AAAA///wgHwAAAAAAAAAPgAAAAAAAAAfAAAAAAAAAA+AAAAAAAAAB4AAD///DwADAAAP//8PAAAAAA///w8AAAAAD///DwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAADwAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAAADwAZgDDA4EGAcQAZAAgAAf74AAAAAd/4AAAAA"); + let weatherStormy = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAf/4AAAAAAAD//4AAAAAAA///wAAAAAAH+B/gAAAAAA/AA/AAAAAAH4AB+AAAAAAfAAD8AAAAAD4AAH/wAAAAfAAAP/wAAAB4AAAf/gAAAHgAAB//AAAB+AAACB+AAAfwAAAAB8AAH/AAAAAD4AA/8AAAAAHgAD8AAAAAAeAAfAAAAAAA8AB4AAAAAADwAPgAAAAAAPAA8AAAAAAA8APwAAAAAADwB/AAAAAAAPAP8AAAAAAB8B+AAAAAAAH4PgAAAAAAAHx8AAAAAAAAPngAAAAAAAAeeAAAAA/wAB7wAAAAH+AAD/AAAAAf4AAP8AAAAD/AAA/wAAAAP4AAD/AAAAB/gAAP8AAAAH8AAA94AAAA/wAAHngAAAD+AAAefAAAAfwAAD4+AAAB/AAAfB+AAAP4AAH4D///g//w//AH//+H/+D/4AP//wf/wf/AAH//D//D/gAAAAAAD4AAAAAAAAAfAAAAAAAAAB8AAAAAAAAAPgAAAAAAAAA8AAAAAAAAAHwAAAAAAAAAeAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : atob("EBCBAAAAAYAH4AwwOBBgGEAOQMJAgjmOGcgAgACAAAAAAAAA"); + let unknown = big ? atob("QECBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAH/+AAAAAAAB//+AAAAAAAP//8AAAAAAB/gf4AAAAAAPwAPwAAAAAB+AAfgAAAAAPwAA+AAAAAA+B+B8AAAAAHwf+D4AAAAAfD/8HgAAAAB4P/4eAAAAAPh8Ph8AAAAA+HgfDwAAAAD/8A8PAAAAAP/wDw8AAAAA//APDwAAAAB/4A8PAAAAAAAAHw8AAAAAAAB+HwAAAAAAAfweAAAAAAAH+B4AAAAAAA/wPgAAAAAAH8B8AAAAAAA/APgAAAAAAD4B+AAAAAAAfAfwAAAAAAB4H+AAAAAAAPh/gAAAAAAA8H8AAAAAAADw/AAAAAAAAPDwAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA8PAAAAAAAADw8AAAAAAAAPDwAAAAAAAA8PAAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") : undefined; switch (codeGroup) { case 2: diff --git a/apps/circlesclock/metadata.json b/apps/circlesclock/metadata.json index fb66c064e..7b4c25532 100644 --- a/apps/circlesclock/metadata.json +++ b/apps/circlesclock/metadata.json @@ -1,7 +1,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.20", + "version":"0.21", "description": "A clock with three or four circles for different data at the bottom in a probably familiar style", "icon": "app.png", "screenshots": [{"url":"screenshot-dark.png"}, {"url":"screenshot-light.png"}, {"url":"screenshot-dark-4.png"}, {"url":"screenshot-light-4.png"}], From 31dadf83a01d21c34f5a6b6e6f8d38a7d55cfb36 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 9 Dec 2022 14:59:18 +0000 Subject: [PATCH 249/342] Now re-adds widgets if they were hidden when fast-loading --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index 9c3b673aa..cb5248e32 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -37,3 +37,4 @@ 0.20: Add much faster circle rendering (250ms -> 40ms) Add fast load capability 0.21: Remade all icons without a palette for dark theme + Now re-adds widgets if they were hidden when fast-loading diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 5039488a7..444040ef0 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -33,9 +33,9 @@ if (settings.stepGoal == undefined) { } let drawTimeout; -let showWidgets = settings.showWidgets || false; -let circleCount = settings.circleCount || 3; -let showBigWeather = settings.showBigWeather || false; +const showWidgets = settings.showWidgets || false; +const circleCount = settings.circleCount || 3; +const showBigWeather = settings.showBigWeather || false; let hrtValue; //TODO deprecate this let now = Math.round(new Date().getTime() / 1000); @@ -329,6 +329,7 @@ Bangle.setUI({ clockInfoMenu.forEach(c => c.remove()); delete Graphics.prototype.setFontRobotoRegular50NumericOnly; delete Graphics.prototype.setFontRobotoRegular21; + if (!showWidgets) require("widget_utils").show(); } }); From 0502e90489862f6f0059f35759672b1b865f1808 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Fri, 9 Dec 2022 12:02:15 -0500 Subject: [PATCH 250/342] Update ChangeLog --- apps/sched/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 711326200..6d9d5caee 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -16,3 +16,4 @@ 0.13: Ask to delete a timer after stopping it 0.14: Added clkinfo for alarms and timers 0.15: Automatic translation of some string in clkinfo +0.16: Improve support for date timezone From e0495a1b85ebfd03974fbf3a7819bee07f3a2882 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Fri, 9 Dec 2022 12:02:42 -0500 Subject: [PATCH 251/342] Update metadata.json --- apps/sched/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index a266d11f8..9c1a1d6b0 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.15", + "version": "0.16", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", From bff8fbacda2e8cfb289dd08f507822e1d3c3ba3c Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Fri, 9 Dec 2022 18:52:30 +0000 Subject: [PATCH 252/342] Simplest++ dropped the word clock from the app name --- apps/simplestpp/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/simplestpp/metadata.json b/apps/simplestpp/metadata.json index 10f756e32..cf7648d85 100644 --- a/apps/simplestpp/metadata.json +++ b/apps/simplestpp/metadata.json @@ -1,6 +1,6 @@ { "id": "simplestpp", - "name": "Simplest++ Clock", + "name": "Simplest++", "version": "0.01", "description": "The simplest working clock, with fast load and clock_info, acts as a tutorial piece", "readme": "README.md", From 30bf43ecc27482057ac03cab5bfe5e8c3982ac84 Mon Sep 17 00:00:00 2001 From: Leon Matthes Date: Sat, 10 Dec 2022 12:40:39 +0100 Subject: [PATCH 253/342] CalClock: 0.06 - Improved multi-line text --- apps/calclock/ChangeLog | 1 + apps/calclock/calclock.js | 7 ++++--- apps/calclock/metadata.json | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/calclock/ChangeLog b/apps/calclock/ChangeLog index 5c1b7c4bc..90bcfb9d4 100644 --- a/apps/calclock/ChangeLog +++ b/apps/calclock/ChangeLog @@ -3,3 +3,4 @@ 0.03: Tell clock widgets to hide. 0.04: Improve current time readability in light theme. 0.05: Show calendar colors & improved all day events. +0.06: Improved multi-line locations & titles diff --git a/apps/calclock/calclock.js b/apps/calclock/calclock.js index 5a13a202f..1f98502ef 100644 --- a/apps/calclock/calclock.js +++ b/apps/calclock/calclock.js @@ -54,13 +54,15 @@ function drawEventBody(event, y) { var yStart = y; if (lines.length > 2) { lines = lines.slice(0,2); - lines[1] = lines[1].slice(0,-3)+"..."; + lines[1] += "..."; } g.drawString(lines.join('\n'),10,y); y+=20 * lines.length; if(event.location) { g.drawImage(atob("DBSBAA8D/H/nDuB+B+B+B3Dn/j/B+A8A8AYAYAYAAAAAAA=="),10,y); - g.drawString(event.location,25,y); + var loclines = g.wrapString(event.location, g.getWidth()-30); + if(loclines.length>1) loclines[0] += "..."; + g.drawString(loclines[0],25,y); y+=20; } if (event.color) { @@ -131,4 +133,3 @@ var minuteInterval = setInterval(redraw, 60 * 1000); Bangle.setUI("clock"); Bangle.loadWidgets(); Bangle.drawWidgets(); - diff --git a/apps/calclock/metadata.json b/apps/calclock/metadata.json index be0a1bdd8..bfd847595 100644 --- a/apps/calclock/metadata.json +++ b/apps/calclock/metadata.json @@ -2,7 +2,7 @@ "id": "calclock", "name": "Calendar Clock", "shortName": "CalClock", - "version": "0.05", + "version": "0.06", "description": "Show the current and upcoming events synchronized from Gadgetbridge", "icon": "calclock.png", "type": "clock", From 825a705339e390e8fb07567592caa40aa1ede0fb Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 11 Dec 2022 15:15:44 +0100 Subject: [PATCH 254/342] ClockFace: fix fast loading --- modules/ClockFace.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ClockFace.js b/modules/ClockFace.js index b1b007be9..bf64d418a 100644 --- a/modules/ClockFace.js +++ b/modules/ClockFace.js @@ -58,6 +58,7 @@ function ClockFace(options) { ClockFace.prototype.tick = function() { "ram" + if (this._removed) return; const time = new Date(); const now = { d: `${time.getFullYear()}-${time.getMonth()}-${time.getDate()}`, @@ -131,6 +132,7 @@ ClockFace.prototype.resume = function() { this.tick(); }; ClockFace.prototype.remove = function() { + this._removed = true; if (this._timeout) clearTimeout(this._timeout); Bangle.removeListener("lcdPower", this._onLcd); if (this._remove) this._remove.apply(this); From 3af685e0722fd8c7323f698bc1f73df562fcf8e9 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 17:25:38 +0000 Subject: [PATCH 255/342] Firmware ClockInfo --- apps/clkinfofw/ChangeLog | 1 + apps/clkinfofw/app.png | Bin 0 -> 1012 bytes apps/clkinfofw/clkinfo.js | 31 +++++++++++++++++++++++++++++++ apps/clkinfofw/metadata.json | 12 ++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 apps/clkinfofw/ChangeLog create mode 100644 apps/clkinfofw/app.png create mode 100644 apps/clkinfofw/clkinfo.js create mode 100644 apps/clkinfofw/metadata.json diff --git a/apps/clkinfofw/ChangeLog b/apps/clkinfofw/ChangeLog new file mode 100644 index 000000000..7b83706bf --- /dev/null +++ b/apps/clkinfofw/ChangeLog @@ -0,0 +1 @@ +0.01: First release diff --git a/apps/clkinfofw/app.png b/apps/clkinfofw/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c6575b73b8824950ae1478b4fcdfe3ee180ed586 GIT binary patch literal 1012 zcmVQEHN5433o2V)~G3@io)j7a1p8f7BJ)!o6-#o%O& z{t0aU1q`NPa?ltDe}E`vogHz#Qomho=-0K zT<*EJ48s6B>AKFcY!|21Y5{=T?f(5CpUG|e#P;^K$KyFTIH1nT%8JkDt5hn~nVg)Q znwp}`N~JP1G_<<9N}c`veUHbpv$OLLfK*l0bzN0ev-A4;S}K*y&dtpYZI()cWy;v;%10aWG|D^^30YsD}i8`TB2ob$rFLlPp$IU~$UN0hsLLur%l7xtXK)^Pf ztK*_>G#b~}*VSs(cKn}dU|=8`jrR5Rb?7tNbaZs&^ZC9Bg-R5~d_LbE-3nB%*Bzjt zOpQjv21rp9XK08NMX>-_v+V8d%}Jp4a6Os!ySuxZrU8K8?;jo>c9>vubMxWh0RSSA z$lTl<=(^5v9O*;ELZRR!O`%XgMDm&E`DU}pG7Ph~w|8-I0RVo#-$@#x<>h5EL-Bar z?RHzU%=sCz$+90;&jGOju(q~F)=)Sco}ZuZ^7Q)p`pnGCmjdMT`E)wn<$%L~m}CJ2JA>ny`Cnx@^~-vfZx>wSKH{?Y{e zy<}Og)oK6`3-mX^iNV1^06@h52ejW%&jGOjaCmrld3gyxT?WPD@!8qg9x8)4j{7*EZEbDQLeWVY zB3cHGjEpc0^FPb%WCiN)?{_kMhj5k|tJmxFeEr>$B+355$}o&vF6RJ~BuU4|$L-NO zUwXd3zh7Nlee0#?*w`4)^Bwxy87<0WGKiSXW~q}(r4Uh7Rq7-X334JPQdJcZQ>hen zve_&mW-=MuaQ64q<#Jh36!RYmcXxM+qL4!j5!vXeYPFi8DCW!4N~NMGO1WIN4cBvN zZ$CrPXq4yqXf#TlSS)saejW@4&5pTr2?m3LAjD!Z>Wq$#avW!V$!F@ks4Z%>TIRo= i+8y!|Gn4I*&-4ql4;+?rBV)q=0000 { + let d = new Date(); + let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); + //g.drawImage(atob("FhgBDADAMAMP/////////////////////8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAP///////"),1,0); + g.drawImage(atob("GBjD/wAA//8c56pSLGOylJrWwxgkknFY7HI4kkkkk5mw2mUvEkkklarVWq5XIkkksAAAAAAABkklAAAAAAAAAIk7AAAAAAAAAbHOgAAAAAAAAV4lAAAAAAAAAIlXAAdtttvgAarSgAMkkklgAWYlAAMkkklgAInXAAMkkklgAa7XAAMkkklgAa4lAAMkkklgAInSgAMkkklgAWZXAAdtttvgAaolAAAAAAAAAInOgAAAAAAAAV47AAAAAAAAAbElAAAAAAAAAIkksAAAAAAABkkklarVWq5XIkkkk5mw2mUvEkkkknFY7HI4kkk="),1,0); + return { + text : process.env.VERSION, + img : g.asImage("string") + }; + }, + show : function() { + this.interval = setTimeout(()=>{ + this.emit("redraw"); + this.interval = setInterval(()=>{ + this.emit("redraw"); + }, 86400000); + }, 86400000 - (Date.now() % 86400000)); + }, + hide : function() { + clearInterval(this.interval); + this.interval = undefined; + } + } + ] + }; +}) diff --git a/apps/clkinfofw/metadata.json b/apps/clkinfofw/metadata.json new file mode 100644 index 000000000..8b722e52f --- /dev/null +++ b/apps/clkinfofw/metadata.json @@ -0,0 +1,12 @@ +{ "id": "clkinfofw", + "name": "Firmware Clockinfo", + "version":"0.01", + "description": "For clocks that display 'clockinfo', this displays the firmware version string", + "icon": "app.png", + "type": "clkinfo", + "tags": "clkinfo,firmware", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"clkinfofw.clkinfo.js","url":"clkinfo.js"} + ] +} From 3b0f525bd2d7e6d290bf0a657a954322cd731862 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 11 Dec 2022 18:34:07 +0100 Subject: [PATCH 256/342] messagegui: write "remove" messages to flash Whoops: we didn't handle these at all, but are actually responsible for saving them, even if the UI won't be launched. Fixes #2380 --- apps/messagegui/ChangeLog | 1 + apps/messagegui/lib.js | 17 +++++++++++++---- apps/messagegui/metadata.json | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 3f5ff70fd..36ec8191f 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -82,3 +82,4 @@ 0.58: Fast load messages without writing to flash Don't write messages to flash until the app closes 0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) +0.60: Fix saving of removal messages if UI not open diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index f9919c01c..57dc3c1e2 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -10,7 +10,15 @@ exports.listener = function(type, msg) { clearTimeout(exports.messageTimeout); delete exports.messageTimeout; } - if (msg.t==="remove") return; + if (msg.t==="remove") { + // we won't open the UI for removed messages, so make sure to delete it from flash + if (Bangle.MESSAGES) { + // we were waiting for exports.messageTimeout + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; + } + return require("messages").save(msg); // always write removal to flash + } const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {}; let loadMessages = (Bangle.CLOCK || event.important); @@ -26,12 +34,12 @@ exports.listener = function(type, msg) { require("messages").save(msg); } else { if (!Bangle.MESSAGES) Bangle.MESSAGES = []; - Bangle.MESSAGES.push(msg); + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; } const saveToFlash = () => { // save messages from RAM to flash after all, if we decide not to launch app - if (!Bangle.MESSAGES) return; - Bangle.MESSAGES.forEach(m => require("messages").save(m)); + if (Bangle.MESSAGES) Bangle.MESSAGES.forEach(m => require("messages").save(m)); delete Bangle.MESSAGES; } msg.handled = true; @@ -50,6 +58,7 @@ exports.listener = function(type, msg) { if (exports.messageTimeout) clearTimeout(exports.messageTimeout); exports.messageTimeout = setTimeout(function() { delete exports.messageTimeout; + if (!Bangle.MESSAGES) return; // message was removed during the delay if (type!=="music") { if (!loadMessages) { // not opening the app, just buzz diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 80b362551..5b1cb60c6 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -2,7 +2,7 @@ "id": "messagegui", "name": "Message UI", "shortName": "Messages", - "version": "0.59", + "version": "0.60", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From 8a67b1a63d0841b7785625c1b9a681b45eb8c175 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 17:56:18 +0000 Subject: [PATCH 257/342] changed icon to be transparent --- apps/clkinfofw/clkinfo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/clkinfofw/clkinfo.js b/apps/clkinfofw/clkinfo.js index 44b94afa8..a7886e2bc 100644 --- a/apps/clkinfofw/clkinfo.js +++ b/apps/clkinfofw/clkinfo.js @@ -7,7 +7,8 @@ let d = new Date(); let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); //g.drawImage(atob("FhgBDADAMAMP/////////////////////8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAP///////"),1,0); - g.drawImage(atob("GBjD/wAA//8c56pSLGOylJrWwxgkknFY7HI4kkkkk5mw2mUvEkkklarVWq5XIkkksAAAAAAABkklAAAAAAAAAIk7AAAAAAAAAbHOgAAAAAAAAV4lAAAAAAAAAIlXAAdtttvgAarSgAMkkklgAWYlAAMkkklgAInXAAMkkklgAa7XAAMkkklgAa4lAAMkkklgAInSgAMkkklgAWZXAAdtttvgAaolAAAAAAAAAInOgAAAAAAAAV47AAAAAAAAAbElAAAAAAAAAIkksAAAAAAABkkklarVWq5XIkkkk5mw2mUvEkkkknFY7HI4kkk="),1,0); + //g.drawImage(atob("GBjD/wAA//8c56pSLGOylJrWwxgkknFY7HI4kkkkk5mw2mUvEkkklarVWq5XIkkksAAAAAAABkklAAAAAAAAAIk7AAAAAAAAAbHOgAAAAAAAAV4lAAAAAAAAAIlXAAdtttvgAarSgAMkkklgAWYlAAMkkklgAInXAAMkkklgAa7XAAMkkklgAa4lAAMkkklgAInSgAMkkklgAWZXAAdtttvgAaolAAAAAAAAAInOgAAAAAAAAV47AAAAAAAAAbElAAAAAAAAAIkksAAAAAAABkkklarVWq5XIkkkk5mw2mUvEkkkknFY7HI4kkk="),1,0); + g.drawImage(atob("GBjD/wAA//8QhEEIvvfPewhC970kk9Ho/lcrkkkkkpxOJRqNEkkkxZ3O7V6vKEkmMAAAAAAABwklAAAAAAAAAInrAAAAAAAAAZdNgAAAAAAAANoygAAAAAAAAWHrAABtttsAAZdNgAOSSSRgANoygAOEkkxgAWHrAAOEkkxgAZfrAAOEkkxgAZcygAOEkkxgAWFNgAOSSSRgANrrAABtttsAAZcygAAAAAAAAWFNgAAAAAAAANrrAAAAAAAAAZclAAAAAAAAAIkmMAAAAAAABwkkxZ3O7V6vKEkkkpxOJRqNEkkkk9Ho/lcrkkk="),1,0); return { text : process.env.VERSION, img : g.asImage("string") From 776ef09608f69e02501b523376a517127c41b67c Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 18:23:05 +0000 Subject: [PATCH 258/342] added screenshot --- apps/clkinfofw/clkinfo.js | 4 +--- apps/clkinfofw/metadata.json | 1 + apps/clkinfofw/screenshot.png | Bin 0 -> 2772 bytes 3 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 apps/clkinfofw/screenshot.png diff --git a/apps/clkinfofw/clkinfo.js b/apps/clkinfofw/clkinfo.js index a7886e2bc..4ca05e8d1 100644 --- a/apps/clkinfofw/clkinfo.js +++ b/apps/clkinfofw/clkinfo.js @@ -6,9 +6,7 @@ get : () => { let d = new Date(); let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); - //g.drawImage(atob("FhgBDADAMAMP/////////////////////8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAPAAA8AADwAAP///////"),1,0); - //g.drawImage(atob("GBjD/wAA//8c56pSLGOylJrWwxgkknFY7HI4kkkkk5mw2mUvEkkklarVWq5XIkkksAAAAAAABkklAAAAAAAAAIk7AAAAAAAAAbHOgAAAAAAAAV4lAAAAAAAAAIlXAAdtttvgAarSgAMkkklgAWYlAAMkkklgAInXAAMkkklgAa7XAAMkkklgAa4lAAMkkklgAInSgAMkkklgAWZXAAdtttvgAaolAAAAAAAAAInOgAAAAAAAAV47AAAAAAAAAbElAAAAAAAAAIkksAAAAAAABkkklarVWq5XIkkkk5mw2mUvEkkkknFY7HI4kkk="),1,0); - g.drawImage(atob("GBjD/wAA//8QhEEIvvfPewhC970kk9Ho/lcrkkkkkpxOJRqNEkkkxZ3O7V6vKEkmMAAAAAAABwklAAAAAAAAAInrAAAAAAAAAZdNgAAAAAAAANoygAAAAAAAAWHrAABtttsAAZdNgAOSSSRgANoygAOEkkxgAWHrAAOEkkxgAZfrAAOEkkxgAZcygAOEkkxgAWFNgAOSSSRgANrrAABtttsAAZcygAAAAAAAAWFNgAAAAAAAANrrAAAAAAAAAZclAAAAAAAAAIkmMAAAAAAABwkkxZ3O7V6vKEkkkpxOJRqNEkkkk9Ho/lcrkkk="),1,0); + g.drawImage(atob("GBjC////AADve773VWmmmmlVVW22nnlVVbLL445VVwAAAADVWAAAAAAlrAAAAAA6sAAAAAAOWAAAAAAlrAD//wA6sANVVcAOWANVVcAlrANVVcA6rANVVcA6WANVVcAlsANVVcAOrAD//wA6WAAAAAAlsAAAAAAOrAAAAAA6WAAAAAAlVwAAAADVVbLL445VVW22nnlVVWmmmmlV"),1,0); return { text : process.env.VERSION, img : g.asImage("string") diff --git a/apps/clkinfofw/metadata.json b/apps/clkinfofw/metadata.json index 8b722e52f..924297ca3 100644 --- a/apps/clkinfofw/metadata.json +++ b/apps/clkinfofw/metadata.json @@ -4,6 +4,7 @@ "description": "For clocks that display 'clockinfo', this displays the firmware version string", "icon": "app.png", "type": "clkinfo", + "screenshots": [{"url":"screenshot.png"}], "tags": "clkinfo,firmware", "supports" : ["BANGLEJS2"], "storage": [ diff --git a/apps/clkinfofw/screenshot.png b/apps/clkinfofw/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..da185bd2e2837ea214c62f22cc25a2c7616c18e5 GIT binary patch literal 2772 zcmeH}c~sJg7RP^}xPW_UZn#ldiY3yxOJ)$ZsWl@Sq@gLAdzxFMp|7S)Ma#xA7o5Se z6a_WY2^X3Sb#kN4)C9)L9R>Ha=sD-S_t*RPz5m`H_kPbk_xsm9=iblF^6|o}Lk*z- z0H`1K#Gc$#&flS;w3*pWp8_`plyDO70o3*xPXPdwei(b;r<6cR>0j}qR%%y@S1(Tr z&p(*+IpfatAny)av_|W3SeTb~m2O|wmuCj&&#d26z`@sacsR7>kVr#?oZ&MJ0-bhF z)A_!icKLf*Q^%PzgZc9Q@Y$%GlV-{U<27Y6Oi2CJB>$cNftFi4bKy<{kQBuc^(i&+ zM5A8R0i+fat^#_Wc|j?C>F0eSu7ojIlhWp09k}`%|CX@sbrh63f_22D!F>#^%YHn!N=n2x~Flz= zScSA9`FCc(zWxk`slC~59~|!VdW(K63R`0L-A2(aEBF(y2LwW5J^_Exa}t{>L<=CxBJC3PU~?j@e~^!vpCvvAd}9h>*~7(Lxbu5AkCXElf+2 z`9fh1t;&6j>ZSyXq(y?{7jpy6x@1@dJl{Xk?!o*(Co7Lnr1o+00t}l#QL1gXwnQWA zcS2vlx7FMX5Z%D9lmuxOda?O704X?`m%$oBcf0g~XF3wG8+4CnbLxU3Fc}-pO=VA3 zX1sga<*c2+$y(-^xhqapJtEnz$D*?nJ*uR z?CP^r;UGL~T7}&p49lSW11(LK1 zL;~I<07`x?Q@QRY?z`3EYziJyrTG!BQ8mHM08b@OfZ~GawB!rNrdpo`Fgoh^^Y%$e zVGTrvEby$~;Bt;glJMqh6|e7(qvqDZyH;9w(7VOm@i8E^G6l4yDnWD_H0Ifrf5(2l z*M?@4%v`stQ18}|Y0#M8d^KCNh0|IL#gxw!0z`grm_AM3JYCPEl+)$XifXAd?YTuNMyj!$C5V`)B(pS5}5=9leOQhGf{cD}v($e~_p zf5WR8^loil4hcKE=WI<=h^C`tb+Dlwb1w?FJA#Hg+cz1ced1pX+Dm)keok32Zffap3!tZPAFjo_|JqUp_E)=|d_CA_g0Ng-(Fx$@vH$6k8U*|y3Dd- zdl-Lv>#b%e87@o1(qj`5MB!5OCs`zbK75&PLCG7(w}nN8%7@y@A{%CAGq-`h92Zf_ zOd$HG3=kDUdvg4owOk~$S|j!PwckYPq$kZc7=gU|trm$w z8f?9XFlntGX31145bT=YTieV((m|J^F-IYoqU&MtZrv+6sXNYN>Q zcd%Q_PJGy6e4&kGZ4@ifPIX8Timj#80dWqLSPlL<$k1Kk}& zYC|nTcWuaJzX;B1B^kO7=7C%z%mvGZ(9$8;zu8s9q9;RL#cN923%k z4^-p&*bOddg;4$kYVLr5+78Ewk89M5 z0+V{X{JkNEVjl|6jusRTxi*y4ZG=5Gufto#QD_21|8FR$PJQ4{IS}_Z&RwpBdh^Q& zAS~M4|06Z+x3?~sE&pI;b+FppaqMU7V#tcqoCsN=~ zSDHq75f(19z)g9>CP3No52iWgKiAFljfaxm2PHMva^PvRBbm89ugA@fWLvUl?;>;^ z55lx>V!chXYO^0h^+K3!`fmrSSC}gks)j^QfA^X-CV9^J9H z`sCKqn4&b*r@nR#%5x}pxGp*WeldJH^|+LRn}P?h!I#>@mjV}9&~Nkr;t$0NY*0zB t%G9GN8cF%`p&jz*(B_*89L9NJYdy%B{{%!t5fuOc literal 0 HcmV?d00001 From 8465d61d3115d412bd80b9728d7b87b8f3138409 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 18:52:59 +0000 Subject: [PATCH 259/342] made icon transparent, fixed screenshot filename --- apps/lato/icon.js | 2 +- apps/lato/screenshot1..png | Bin 2666 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 apps/lato/screenshot1..png diff --git a/apps/lato/icon.js b/apps/lato/icon.js index 345458d53..746f010dc 100644 --- a/apps/lato/icon.js +++ b/apps/lato/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwkA/4A/AH4AUiIAKCxXzC5c/C5PyC5cvC8PxC5cfLxNEABhgI+gXNp4X3//+9wAK96PJC6/zC5bvKC6//C5YWKC4nUoMUpoXS8lDn/zmlOC6NCA4ckC6Hkl4HD+QwCC5c+LoIsCoSKBMIPjC5tD//0olEp//mgXNmMRiYuBC4JjBBAYAK+MRj//CwIABBAgXkI5AXOiRyBC4J8BkIXN+dEoKnFiNEAYIXNa4sUC59EJAIACkIHBC5iMCoMTn/zmIuBSQIXODAMRAAKqDABikCAAqqBC8i8CAArCBC/n0C49PC5oA/AH4AIA==")) +require("heatshrink").decompress(atob("mEw4UA///1NygH+zn/Jf4AJgdVAAnABZ8BBYtABbc1BYtcBYcVBYtUBbcC1QAEwALPgYLFQYoLWgAHBytWAYK0F1Wpv/9tQLH0v//9aBY+XBYPWBY3qz/1r/21YLGv/Vq/9BY3Vv6NB/tXBaMVBYamEBZ1fHYP1BY01r5TB+ruEBYVXNYPVBY9VBYNVBY0FqoiBqtQBY4ACBb0NBYdwBbsBBYdABYoA/AAg=")) diff --git a/apps/lato/screenshot1..png b/apps/lato/screenshot1..png deleted file mode 100644 index 14c8d6d048afce0b1540cc32e155886a022fd675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2666 zcmc&$=~vPT7yd!uLhhy&naiN0sih*8iHwqhrnzsSiA@%YqBd6UiPkjZB<7a5Vs5=P zhT@)y$=hOk|ad@)u+JFO~ zGM5ZRCmtFft~pHF%{_+&t1Ans_e$*~@Vkd*wRG z2>HHQGRw!AjTlr;DTH|(5$bXc=iU;w7YBd+fs**#)`%r9@bVf&f&GE!Cx6waC02Q2 zi+75$DkkN+Uck$@M;<_i;(At*W=GhDG-7y<@zwUku2}&@ecZe!Fb;Y2u>IRo?TLo6 z=avcKB=lS-+&qCC@nsZqAuAUr-Ve$FH@H=`25N=)4qi|axiLoy=sH}S(rT8;JYN|7d2cI8vzkz-FOsD#)*|A0Z z;An$b%^9+`L@hA&46*2etwyHTu|#O#XVRZUva_fr)G~>1WPUDoG>18Dh~`e8wOX$= zi@Q9a4wZ@+L!OZqzGFR~qvHgzj|bJCACeSg-CW*VK~$}NieIn}y&^xBKXdDZs*7H} zDEZj%Aa=hXDMOlg3Ln+w_`Lp2C2e<59?0$UQuN3Xx1>DllcjKwy6c?~cU^9xTXyML z$Jz=2ggo>}MU(qz^!1dq(Lp;F0CF0~BAsb(tSGxJd|5S)0Xs^#>08mErPBM3 zPtU^G9-M47w*V@AU)0NL?=*zD&wzXTy)P@N^dQaYSqUSzC;!mR5-Apwg9vZayZ6vB zukay^t5Ki>hQu>+hRgoHw;vYAv6?MGcyt|u^9hcOw4zy9T$wo*ErK?wJR1zsyFG2e z?YNH{P~zisLadqJ$ng#lCC-Q6$b<*&BY5lpn36>&%OOi>AOFRA4hqvfvDdd+u@0*v^m62ri-NY!*^$$1@_puyu&4V@$7^Mc|I%Z3$hu#|N4)xK zWJMVR2S6}^%bFiGZ&23nUytf7_akm=x2U|9z9T!HyncX|F`oMPAXIT_zD5FMUaHzP zzqw+{**3oUJI%S6X`zsE(UWBJg7vE{GRDS|*E#_Un9?l)X_tP=-@=pbr>}638iM(j zamawvtq_Vp-j=}8sSw9Gpe8<(DlfF_Ei1re7F?%_ zW>R}HfgJ~YHlL_~UUfy|!&JcrTMuqcPde=>{%w&$v#iIc^E-ksfJ)j45N>y@5?`=^ ze)78hBbR)kMJeF8fLDX7* zQi87{S0KKQ&d@^S2^q2ObU*6xT|&KeQ876 znXLFNOsp*6Z<)|fkh0Mg%eli28`hS;c^BRhj5b&_F?N$|An~KXP^xVrsHMw zex?h&cq6%)t>p|+v*-Knnr|2*{?L9 zbO9fk9;W2tLb*cz@Y*uEqAR_NAWrdX>xX=6UCS<|d`tD-+RqLlo{E1pR<(8&>IUeQ);Nvt-lj6Ah+eUk;olM~?7 z8INA?ix$1d?>+8+3nyeN;!QFYJzNaC4p_mopf; zmwgpG0IO`CX4f7b&u#hdX5BDq0;k#gz4>zeCt^pipqgt8DElYodf8}l^*zXrC}<;e zE#_7Gd`Nreg4%A;g}%$U8JI#qr2V{+8wjlS$n0X?t^&W;sd!HA-RBXow{^0q!UZJ%4PfNx A&j0`b From ad9ea67cba4aef8d5f234ee6537d4744dd50cdd5 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 19:11:36 +0000 Subject: [PATCH 260/342] fixed whitespace --- apps/clkinfofw/clkinfo.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/clkinfofw/clkinfo.js b/apps/clkinfofw/clkinfo.js index 4ca05e8d1..9815ca87f 100644 --- a/apps/clkinfofw/clkinfo.js +++ b/apps/clkinfofw/clkinfo.js @@ -6,8 +6,8 @@ get : () => { let d = new Date(); let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); - g.drawImage(atob("GBjC////AADve773VWmmmmlVVW22nnlVVbLL445VVwAAAADVWAAAAAAlrAAAAAA6sAAAAAAOWAAAAAAlrAD//wA6sANVVcAOWANVVcAlrANVVcA6rANVVcA6WANVVcAlsANVVcAOrAD//wA6WAAAAAAlsAAAAAAOrAAAAAA6WAAAAAAlVwAAAADVVbLL445VVW22nnlVVWmmmmlV"),1,0); - return { + g.drawImage(atob("GBjC////AADve773VWmmmmlVVW22nnlVVbLL445VVwAAAADVWAAAAAAlrAAAAAA6sAAAAAAOWAAAAAAlrAD//wA6sANVVcAOWANVVcAlrANVVcA6rANVVcA6WANVVcAlsANVVcAOrAD//wA6WAAAAAAlsAAAAAAOrAAAAAA6WAAAAAAlVwAAAADVVbLL445VVW22nnlVVWmmmmlV"),1,0); + return { text : process.env.VERSION, img : g.asImage("string") }; From 0a0c6f8d23b21ab41ce7c9bc76e000fdd9f1cdf4 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sun, 11 Dec 2022 19:13:36 +0000 Subject: [PATCH 261/342] Lato, fixed screenshot filename --- apps/lato/screenshot1.png | Bin 0 -> 2666 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/lato/screenshot1.png diff --git a/apps/lato/screenshot1.png b/apps/lato/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..14c8d6d048afce0b1540cc32e155886a022fd675 GIT binary patch literal 2666 zcmc&$=~vPT7yd!uLhhy&naiN0sih*8iHwqhrnzsSiA@%YqBd6UiPkjZB<7a5Vs5=P zhT@)y$=hOk|ad@)u+JFO~ zGM5ZRCmtFft~pHF%{_+&t1Ans_e$*~@Vkd*wRG z2>HHQGRw!AjTlr;DTH|(5$bXc=iU;w7YBd+fs**#)`%r9@bVf&f&GE!Cx6waC02Q2 zi+75$DkkN+Uck$@M;<_i;(At*W=GhDG-7y<@zwUku2}&@ecZe!Fb;Y2u>IRo?TLo6 z=avcKB=lS-+&qCC@nsZqAuAUr-Ve$FH@H=`25N=)4qi|axiLoy=sH}S(rT8;JYN|7d2cI8vzkz-FOsD#)*|A0Z z;An$b%^9+`L@hA&46*2etwyHTu|#O#XVRZUva_fr)G~>1WPUDoG>18Dh~`e8wOX$= zi@Q9a4wZ@+L!OZqzGFR~qvHgzj|bJCACeSg-CW*VK~$}NieIn}y&^xBKXdDZs*7H} zDEZj%Aa=hXDMOlg3Ln+w_`Lp2C2e<59?0$UQuN3Xx1>DllcjKwy6c?~cU^9xTXyML z$Jz=2ggo>}MU(qz^!1dq(Lp;F0CF0~BAsb(tSGxJd|5S)0Xs^#>08mErPBM3 zPtU^G9-M47w*V@AU)0NL?=*zD&wzXTy)P@N^dQaYSqUSzC;!mR5-Apwg9vZayZ6vB zukay^t5Ki>hQu>+hRgoHw;vYAv6?MGcyt|u^9hcOw4zy9T$wo*ErK?wJR1zsyFG2e z?YNH{P~zisLadqJ$ng#lCC-Q6$b<*&BY5lpn36>&%OOi>AOFRA4hqvfvDdd+u@0*v^m62ri-NY!*^$$1@_puyu&4V@$7^Mc|I%Z3$hu#|N4)xK zWJMVR2S6}^%bFiGZ&23nUytf7_akm=x2U|9z9T!HyncX|F`oMPAXIT_zD5FMUaHzP zzqw+{**3oUJI%S6X`zsE(UWBJg7vE{GRDS|*E#_Un9?l)X_tP=-@=pbr>}638iM(j zamawvtq_Vp-j=}8sSw9Gpe8<(DlfF_Ei1re7F?%_ zW>R}HfgJ~YHlL_~UUfy|!&JcrTMuqcPde=>{%w&$v#iIc^E-ksfJ)j45N>y@5?`=^ ze)78hBbR)kMJeF8fLDX7* zQi87{S0KKQ&d@^S2^q2ObU*6xT|&KeQ876 znXLFNOsp*6Z<)|fkh0Mg%eli28`hS;c^BRhj5b&_F?N$|An~KXP^xVrsHMw zex?h&cq6%)t>p|+v*-Knnr|2*{?L9 zbO9fk9;W2tLb*cz@Y*uEqAR_NAWrdX>xX=6UCS<|d`tD-+RqLlo{E1pR<(8&>IUeQ);Nvt-lj6Ah+eUk;olM~?7 z8INA?ix$1d?>+8+3nyeN;!QFYJzNaC4p_mopf; zmwgpG0IO`CX4f7b&u#hdX5BDq0;k#gz4>zeCt^pipqgt8DElYodf8}l^*zXrC}<;e zE#_7Gd`Nreg4%A;g}%$U8JI#qr2V{+8wjlS$n0X?t^&W;sd!HA-RBXow{^0q!UZJ%4PfNx A&j0`b literal 0 HcmV?d00001 From 90b68051c57fafe6f245f133d5ff2956bf0a6ad4 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 11 Dec 2022 22:09:16 +0100 Subject: [PATCH 262/342] astrocalc - Compatibility with Bangle.js 2 - Get location from My Location --- .gitignore | 1 + apps/astrocalc/ChangeLog | 1 + apps/astrocalc/astrocalc-app.js | 107 ++++++-------------------------- apps/astrocalc/metadata.json | 7 ++- modules/suncalc.js | 2 +- 5 files changed, 27 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index f4588ac6f..7687a770a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ _site .owncloudsync.log Desktop.ini .sync_*.db* +*.swp diff --git a/apps/astrocalc/ChangeLog b/apps/astrocalc/ChangeLog index 746ab2162..11b2d7177 100644 --- a/apps/astrocalc/ChangeLog +++ b/apps/astrocalc/ChangeLog @@ -1,3 +1,4 @@ 0.01: Create astrocalc app 0.02: Store last GPS lock, can be used instead of waiting for new GPS on start 0.03: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps +0.04: Compatibility with Bangle.js 2, get location from My Location diff --git a/apps/astrocalc/astrocalc-app.js b/apps/astrocalc/astrocalc-app.js index 46fb855ec..3c879779d 100644 --- a/apps/astrocalc/astrocalc-app.js +++ b/apps/astrocalc/astrocalc-app.js @@ -11,8 +11,7 @@ const SunCalc = require("suncalc"); // from modules folder const storage = require("Storage"); -const LAST_GPS_FILE = "astrocalc.gps.json"; -let lastGPS = (storage.readJSON(LAST_GPS_FILE, 1) || null); +const BANGLEJS2 = process.env.HWVERSION == 2; // check for bangle 2 function drawMoon(phase, x, y) { const moonImgFiles = [ @@ -73,7 +72,7 @@ function drawTitle(key) { */ function drawPoint(angle, radius, color) { const pRad = Math.PI / 180; - const faceWidth = 80; // watch face radius + const faceWidth = g.getWidth()/3; // watch face radius const centerPx = g.getWidth() / 2; const a = angle * pRad; @@ -141,6 +140,7 @@ function drawData(title, obj, startX, startY) { function drawMoonPositionPage(gps, title) { const pos = SunCalc.getMoonPosition(new Date(), gps.lat, gps.lon); + const moonColor = g.theme.dark ? {r: 1, g: 1, b: 1} : {r: 0, g: 0, b: 0}; const pageData = { Azimuth: pos.azimuth.toFixed(2), @@ -150,13 +150,13 @@ function drawMoonPositionPage(gps, title) { }; const azimuthDegrees = parseInt(pos.azimuth * 180 / Math.PI); - drawData(title, pageData, null, 80); + drawData(title, pageData, null, g.getHeight()/2 - Object.keys(pageData).length/2*20); drawPoints(); - drawPoint(azimuthDegrees, 8, {r: 1, g: 1, b: 1}); + drawPoint(azimuthDegrees, 8, moonColor); let m = setWatch(() => { let m = moonIndexPageMenu(gps); - }, BTN3, {repeat: false, edge: "falling"}); + }, BANGLEJS2 ? BTN : BTN3, {repeat: false, edge: "falling"}); } function drawMoonIlluminationPage(gps, title) { @@ -166,43 +166,45 @@ function drawMoonIlluminationPage(gps, title) { ]; const phase = SunCalc.getMoonIllumination(new Date()); + const phaseIdx = Math.round(phase.phase*8), const pageData = { - Phase: phaseNames[phase.phase], + Phase: phaseNames[phaseIdx], }; drawData(title, pageData, null, 35); - drawMoon(phase.phase, g.getWidth() / 2, g.getHeight() / 2); + drawMoon(phaseIdx, g.getWidth() / 2, g.getHeight() / 2); let m = setWatch(() => { let m = moonIndexPageMenu(gps); - }, BTN3, {repease: false, edge: "falling"}); + }, BANGLEJS2 ? BTN : BTN3, {repease: false, edge: "falling"}); } function drawMoonTimesPage(gps, title) { const times = SunCalc.getMoonTimes(new Date(), gps.lat, gps.lon); + const moonColor = g.theme.dark ? {r: 1, g: 1, b: 1} : {r: 0, g: 0, b: 0}; const pageData = { Rise: dateToTimeString(times.rise), Set: dateToTimeString(times.set), }; - drawData(title, pageData, null, 105); + drawData(title, pageData, null, g.getHeight()/2 - Object.keys(pageData).length/2*20 + 5); drawPoints(); // Draw the moon rise position const risePos = SunCalc.getMoonPosition(times.rise, gps.lat, gps.lon); const riseAzimuthDegrees = parseInt(risePos.azimuth * 180 / Math.PI); - drawPoint(riseAzimuthDegrees, 8, {r: 1, g: 1, b: 1}); + drawPoint(riseAzimuthDegrees, 8, moonColor); // Draw the moon set position const setPos = SunCalc.getMoonPosition(times.set, gps.lat, gps.lon); const setAzimuthDegrees = parseInt(setPos.azimuth * 180 / Math.PI); - drawPoint(setAzimuthDegrees, 8, {r: 1, g: 1, b: 1}); + drawPoint(setAzimuthDegrees, 8, moonColor); let m = setWatch(() => { let m = moonIndexPageMenu(gps); - }, BTN3, {repease: false, edge: "falling"}); + }, BANGLEJS2 ? BTN : BTN3, {repease: false, edge: "falling"}); } function drawSunShowPage(gps, key, date) { @@ -224,7 +226,7 @@ function drawSunShowPage(gps, key, date) { Degrees: azimuthDegrees }; - drawData(key, pageData, null, 85); + drawData(key, pageData, null, g.getHeight()/2 - Object.keys(pageData).length/2*20 + 5); drawPoints(); @@ -233,7 +235,7 @@ function drawSunShowPage(gps, key, date) { m = setWatch(() => { m = sunIndexPageMenu(gps); - }, BTN3, {repeat: false, edge: "falling"}); + }, BANGLEJS2 ? BTN : BTN3, {repeat: false, edge: "falling"}); return null; } @@ -300,7 +302,7 @@ function indexPageMenu(gps) { "Moon": () => { m = moonIndexPageMenu(gps); }, - "< Exit": () => { load(); } + "< Back": () => { load(); } }; return E.showMenu(menu); @@ -310,78 +312,9 @@ function getCenterStringX(str) { return (g.getWidth() - g.stringWidth(str)) / 2; } -/** - * GPS wait page, shows GPS locating animation until it gets a lock, then moves to the Sun page - */ -function drawGPSWaitPage() { - const img = require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AW43GF1wwsFwYwqFwowoFw4wmFxIwdE5YAPF/4vM5nN6YAE5vMF8YtHGIgvhFpQxKF7AuOGA4vXFyAwGF63MFyIABF6xeWMC4UDLwvNGpAJG5gwSdhIIDRBLyWCIgcJHAgJJDoouQF4vMQoICBBJoeGFx6GGACIfHL6YvaX6gvZeCIdFc4gAFXogvGFxgwFDwovQCAguOGAnMMBxeG5guTGAggGGAwNKFySREcA3N5vM5gDBdpQvXEY4AKXqovGGCKbFF7AwPZQwvZGJgtGF7vGdQItG5gSIF7gASF/44WEzgwRF0wwHF1AwFF1QwDF1gvwAH4A/AFAA==")); - const str1 = "Astrocalc v0.02"; - const str2 = "Locating GPS"; - const str3 = "Please wait..."; - - g.clear(); - g.drawImage(img, 100, 50); - g.setFont("6x8", 1); - g.drawString(str1, getCenterStringX(str1), 105); - g.drawString(str2, getCenterStringX(str2), 140); - g.drawString(str3, getCenterStringX(str3), 155); - - if (lastGPS) { - lastGPS = JSON.parse(lastGPS); - lastGPS.time = new Date(); - - const str4 = "Press Button 3 to use last GPS"; - g.setColor("#d32e29"); - g.fillRect(0, 190, g.getWidth(), 215); - g.setColor("#ffffff"); - g.drawString(str4, getCenterStringX(str4), 200); - - setWatch(() => { - clearWatch(); - Bangle.setGPSPower(0); - m = indexPageMenu(lastGPS); - }, BTN3, {repeat: false}); - } - - g.flip(); - - const DEBUG = false; - if (DEBUG) { - clearWatch(); - - const gps = { - "lat": 56.45783133333, - "lon": -3.02188583333, - "alt": 75.3, - "speed": 0.070376, - "course": NaN, - "time":new Date(), - "satellites": 4, - "fix": 1 - }; - - m = indexPageMenu(gps); - - return; - } - - Bangle.on('GPS', (gps) => { - if (gps.fix === 0) return; - clearWatch(); - - if (isNaN(gps.course)) gps.course = 0; - require("Storage").writeJSON(LAST_GPS_FILE, JSON.stringify(gps)); - Bangle.setGPSPower(0); - Bangle.buzz(); - Bangle.setLCDPower(true); - - m = indexPageMenu(gps); - }); -} - function init() { - Bangle.setGPSPower(1); - drawGPSWaitPage(); + let location = require("Storage").readJSON("mylocation.json",1)||{"lat":51.5072,"lon":0.1276,"location":"London"}; + indexPageMenu(location); } let m; diff --git a/apps/astrocalc/metadata.json b/apps/astrocalc/metadata.json index d77474700..1f238be12 100644 --- a/apps/astrocalc/metadata.json +++ b/apps/astrocalc/metadata.json @@ -1,12 +1,13 @@ { "id": "astrocalc", "name": "Astrocalc", - "version": "0.03", + "version": "0.04", "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.", "icon": "astrocalc.png", - "tags": "app,sun,moon,cycles,tool,outdoors", - "supports": ["BANGLEJS"], + "tags": "app,sun,moon,cycles,tool", + "supports": ["BANGLEJS", "BANGLEJS2"], "allow_emulator": true, + "dependencies": {"mylocation":"app"}, "storage": [ {"name":"astrocalc.app.js","url":"astrocalc-app.js"}, {"name":"astrocalc.img","url":"astrocalc-icon.js","evaluate":true}, diff --git a/modules/suncalc.js b/modules/suncalc.js index 0c22c6cb2..fe17148e1 100644 --- a/modules/suncalc.js +++ b/modules/suncalc.js @@ -279,7 +279,7 @@ function hoursLater(date, h) { // calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article SunCalc.getMoonTimes = function (date, lat, lng, inUTC) { - var t = new Date(date); + var t = typeof(date) === "object" ? date : new Date(date); if (inUTC) t.setUTCHours(0, 0, 0, 0); else t.setHours(0, 0, 0, 0); From 340fc0667831bf058d2023615f8d39ba0c23d8c1 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 11 Dec 2022 22:16:39 +0100 Subject: [PATCH 263/342] astrocalc fix typo --- apps/astrocalc/astrocalc-app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/astrocalc/astrocalc-app.js b/apps/astrocalc/astrocalc-app.js index 3c879779d..7b41ad136 100644 --- a/apps/astrocalc/astrocalc-app.js +++ b/apps/astrocalc/astrocalc-app.js @@ -166,7 +166,7 @@ function drawMoonIlluminationPage(gps, title) { ]; const phase = SunCalc.getMoonIllumination(new Date()); - const phaseIdx = Math.round(phase.phase*8), + const phaseIdx = Math.round(phase.phase*8); const pageData = { Phase: phaseNames[phaseIdx], }; From f6ee8333c46ec812fb9291f8f577bb152ed73ee4 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 11 Dec 2022 22:36:31 +0100 Subject: [PATCH 264/342] astrocalc translations --- apps/astrocalc/astrocalc-app.js | 16 ++++++++-------- lang/de_DE.json | 10 +++++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/astrocalc/astrocalc-app.js b/apps/astrocalc/astrocalc-app.js index 7b41ad136..6629842cf 100644 --- a/apps/astrocalc/astrocalc-app.js +++ b/apps/astrocalc/astrocalc-app.js @@ -161,8 +161,8 @@ function drawMoonPositionPage(gps, title) { function drawMoonIlluminationPage(gps, title) { const phaseNames = [ - "New Moon", "Waxing Crescent", "First Quarter", "Waxing Gibbous", - "Full Moon", "Waning Gibbous", "Last Quater", "Waning Crescent", + /*LANG*/"New Moon", /*LANG*/"Waxing Crescent", /*LANG*/"First Quarter", /*LANG*/"Waxing Gibbous", + /*LANG*/"Full Moon", /*LANG*/"Waning Gibbous", /*LANG*/"Last Quater", /*LANG*/"Waning Crescent", ]; const phase = SunCalc.getMoonIllumination(new Date()); @@ -275,15 +275,15 @@ function moonIndexPageMenu(gps) { }, "Times": () => { m = E.showMenu(); - drawMoonTimesPage(gps, "Times"); + drawMoonTimesPage(gps, /*LANG*/"Times"); }, "Position": () => { m = E.showMenu(); - drawMoonPositionPage(gps, "Position"); + drawMoonPositionPage(gps, /*LANG*/"Position"); }, "Illumination": () => { m = E.showMenu(); - drawMoonIlluminationPage(gps, "Illumination"); + drawMoonIlluminationPage(gps, /*LANG*/"Illumination"); }, "< Back": () => m = indexPageMenu(gps), }; @@ -294,12 +294,12 @@ function moonIndexPageMenu(gps) { function indexPageMenu(gps) { const menu = { "": { - "title": "Select", + "title": /*LANG*/"Select", }, - "Sun": () => { + /*LANG*/"Sun": () => { m = sunIndexPageMenu(gps); }, - "Moon": () => { + /*LANG*/"Moon": () => { m = moonIndexPageMenu(gps); }, "< Back": () => { load(); } diff --git a/lang/de_DE.json b/lang/de_DE.json index 84f29a6c2..5ae7e449f 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -193,7 +193,15 @@ "cyan": "Cyan", "orange": "Orange", "purple": "Violett", - "grey": "Grau" + "grey": "Grau", + "New Moon": "Neumond", + "Waxing Crescent": "Zunehmender Sichelmond ", + "First Quarter": "Zunehmender Halbmond", + "Waxing Gibbous": "Zunehmender Mond", + "Full Moon": "Vollmond,", + "Waning Gibbous": "Abnehmender Mond", + "Last Quater": "Abnehmender Halbmond", + "Waning Crescent": "Abnehmender Sichelmond" }, "alarm": { "//": "App-specific overrides", From 5fe0a7ad6a2c2158f4a42a099a9bd8c4a3deb1cc Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 12 Dec 2022 07:37:36 +0100 Subject: [PATCH 265/342] astrocalc: Update description --- apps/astrocalc/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/astrocalc/metadata.json b/apps/astrocalc/metadata.json index 1f238be12..653c097da 100644 --- a/apps/astrocalc/metadata.json +++ b/apps/astrocalc/metadata.json @@ -2,7 +2,7 @@ "id": "astrocalc", "name": "Astrocalc", "version": "0.04", - "description": "Calculates interesting information on the sun and moon cycles for the current day based on your location.", + "description": "Calculates interesting information on the sun like sunset and sunrise and moon cycles for the current day based on your location from MyLocation app", "icon": "astrocalc.png", "tags": "app,sun,moon,cycles,tool", "supports": ["BANGLEJS", "BANGLEJS2"], From 214a018843f08d3bb8da00ffba5f231ab5bdea3a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 12 Dec 2022 09:01:00 +0000 Subject: [PATCH 266/342] update shortnames --- apps/health/metadata.json | 1 + apps/simplestpp/metadata.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/health/metadata.json b/apps/health/metadata.json index d4eab1f38..12f6b617f 100644 --- a/apps/health/metadata.json +++ b/apps/health/metadata.json @@ -1,6 +1,7 @@ { "id": "health", "name": "Health Tracking", + "shortName": "Health", "version": "0.17", "description": "Logs health data and provides an app to view it", "icon": "app.png", diff --git a/apps/simplestpp/metadata.json b/apps/simplestpp/metadata.json index cf7648d85..d808b132b 100644 --- a/apps/simplestpp/metadata.json +++ b/apps/simplestpp/metadata.json @@ -1,6 +1,7 @@ { "id": "simplestpp", - "name": "Simplest++", + "name": "Simplest++ Clock", + "shortName": "Simplest++", "version": "0.01", "description": "The simplest working clock, with fast load and clock_info, acts as a tutorial piece", "readme": "README.md", From 6a434f35ccf3aa8fa2254c221dab731e238c426a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 12 Dec 2022 11:32:20 +0000 Subject: [PATCH 267/342] 0.03: Fix icons broken in 0v02 (#2386) + Store all icons in a separate binary file (much faster lookup) --- apps/messageicons/icons.img | Bin 0 -> 5168 bytes apps/messageicons/icons/bibel.png | Bin 0 -> 204 bytes apps/messageicons/icons/bring.png | Bin 0 -> 210 bytes apps/messageicons/icons/default.png | Bin 0 -> 207 bytes apps/messageicons/icons/etar.png | Bin 0 -> 182 bytes apps/messageicons/icons/generate.js | 143 +++++++++++++++++++++ apps/messageicons/icons/gmx.png | Bin 0 -> 227 bytes apps/messageicons/icons/home assistant.png | Bin 0 -> 269 bytes apps/messageicons/icons/icon_names.json | 111 ++++++++++++++++ apps/messageicons/icons/kalender.png | Bin 0 -> 249 bytes apps/messageicons/icons/music.png | Bin 0 -> 209 bytes apps/messageicons/icons/n26.png | Bin 0 -> 188 bytes apps/messageicons/icons/nextbike.png | Bin 0 -> 228 bytes apps/messageicons/icons/nina.png | Bin 0 -> 261 bytes apps/messageicons/icons/warnapp.png | Bin 0 -> 247 bytes apps/messageicons/icons/wordfeud.png | Bin 0 -> 213 bytes apps/messageicons/lib.js | 80 +----------- apps/messageicons/metadata.json | 5 +- 18 files changed, 262 insertions(+), 77 deletions(-) create mode 100644 apps/messageicons/icons.img create mode 100644 apps/messageicons/icons/bibel.png create mode 100644 apps/messageicons/icons/bring.png create mode 100644 apps/messageicons/icons/default.png create mode 100644 apps/messageicons/icons/etar.png create mode 100755 apps/messageicons/icons/generate.js create mode 100644 apps/messageicons/icons/gmx.png create mode 100644 apps/messageicons/icons/home assistant.png create mode 100644 apps/messageicons/icons/icon_names.json create mode 100644 apps/messageicons/icons/kalender.png create mode 100644 apps/messageicons/icons/music.png create mode 100644 apps/messageicons/icons/n26.png create mode 100644 apps/messageicons/icons/nextbike.png create mode 100644 apps/messageicons/icons/nina.png create mode 100644 apps/messageicons/icons/warnapp.png create mode 100644 apps/messageicons/icons/wordfeud.png diff --git a/apps/messageicons/icons.img b/apps/messageicons/icons.img new file mode 100644 index 0000000000000000000000000000000000000000..104168357f754ea3bd419eb544afd41ea7d297f9 GIT binary patch literal 5168 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 Cl2Dxh literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/bring.png b/apps/messageicons/icons/bring.png new file mode 100644 index 0000000000000000000000000000000000000000..673d1b7be024acf0f943766bca951af24b0536a4 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|dOTemLp;3S zP7UO1FyL^0`mg<1f|Jp6x78=)>t@dQx-lpqB((pKyHvxSr8+_r+xc!=NhLJ#eJW=Y zVhWqOUZ>L`nn6470Nb4$`Ppyf>o%WgefDn&L$S*Jb1Xg=Bkt-&u9U9eS$ty|W5)d{ z%!?A6Z5^)G&r7jBv4(rghZVWIcC{Xy_#-sszfmB^DP1c@=QGQ9sunD$0=kRA)78&q Iol`;+0E%=`3jhEB literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/default.png b/apps/messageicons/icons/default.png new file mode 100644 index 0000000000000000000000000000000000000000..1f85079df4e48ecf3280039a267fb380a4a05afc GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Iz3$+Lp;3S zPQA$2pupk!_`m%ux7mKaJCv?XJFPC?z$_k+lx8PqvxUE*V;a}gDeG0DST%1~F{%`( zv1w~QK4Hu3GGAlK*Zqu26XJ?u5Ae9Gj$y4(n6^eOfu*U6jZut+)qmerk<8i4Y{N71 z+q62?eCKa?m8&xGN|zhotBVqQe#=*E{(PhU|7CkdEA~S>JyuMx13HSq)78&qol`;+ E00LS_)Bpeg literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/etar.png b/apps/messageicons/icons/etar.png new file mode 100644 index 0000000000000000000000000000000000000000..24f0cc587b46848dc5c6507bdbfdfcf83d211947 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|3OrpLLp;2b z|NQ^|zn)Es>Da?`MrCDXSH?EEM;eYUD<2w6SB!4D%2f1N_Spf!1V-15XAT^2Fz9HT z&Z_W!(Q>{NJ3TWU5jHjX3pRWgno~_W9*FX7T**A!>Pdz4F-hJhzFx0c_K5N=eJMZt e-@^Ep%nTD6kM6wK-%$&+o59o7&t;ucLK6TUt3VY1 literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/generate.js b/apps/messageicons/icons/generate.js new file mode 100755 index 000000000..e857032af --- /dev/null +++ b/apps/messageicons/icons/generate.js @@ -0,0 +1,143 @@ +#!/usr/bin/node + +// Creates lib.js from icons +// npm install png-js + +// default icon must come first in icon_names + +var imageconverter = require("../../../webtools/imageconverter.js"); +var icons = JSON.parse(require("fs").readFileSync(__dirname+"/icon_names.json")); +const imgOptions = { + mode : "1bit", + inverted : true, + transparent : true, + output: "raw" +}; +var PNG = require('png-js'); +var IMAGE_BYTES = 76; + +var iconTests = []; +var iconImages = []; // array of converted icons +var iconIndices = {}; // maps filename -> index in iconImages + +var promises = []; + +icons.forEach(icon => { + var index = iconIndices[icon.icon]; + if (index===undefined) { // need a new icon + index = iconImages.length; + iconIndices[icon.icon] = index; + iconImages.push(""); // placeholder + // create image + console.log("Loading "+icon.icon); + var png = new PNG(require("fs").readFileSync(__dirname+"/"+icon.icon)); + if (png.width!=24 || png.height!=24) { + console.warn(icon.icon+" should be 24x24px"); + } + + promises.push(new Promise(r => { + png.decode(function (pixels) { + var rgba = new Uint8Array(pixels); + var isTransparent = false; + for (var i=0;i { + // Yay, more JS. Why is it so hard to get the bytes??? + iconData.set(Array.prototype.slice.call(Buffer.from(img,"binary")), idx*IMAGE_BYTES) + }); + + console.log("Saving images"); + require("fs").writeFileSync(__dirname+"/../icons.img", Buffer.from(iconData,"binary")); + + console.log("Saving library"); + require("fs").writeFileSync(__dirname+"/../lib.js", `exports.getImage = function(msg) { + if (msg.img) return atob(msg.img); + let s = (("string"=== typeof msg) ? msg : (msg.src || "")).toLowerCase(); + if (msg.id=="music") s="music"; + let match = ${JSON.stringify(","+icons.map(icon=>icon.app+"|"+icon.index).join(",")+",")}.match(new RegExp(\`,\${s}\\\\|(\\\\d+)\`)) + return require("Storage").read("messageicons.img", (match===null)?0:match[1]*${IMAGE_BYTES}, ${IMAGE_BYTES}); +}; + +exports.getColor = function(msg,options) { + options = options||{}; + var st = options.settings || require('Storage').readJSON("messages.settings.json", 1) || {}; + if (options.default===undefined) options.default=g.theme.fg; + if (st.iconColorMode == 'mono') return options.default; + const s = (("string"=== typeof msg) ? msg : (msg.src || "")).toLowerCase(); + return { + // generic colors, using B2-safe colors + // DO NOT USE BLACK OR WHITE HERE, just leave the declaration out and then the theme's fg color will be used + "airbnb": "#ff385c", // https://news.airbnb.com/media-assets/category/brand/ + "mail": "#ff0", + "music": "#f0f", + "phone": "#0f0", + "sms message": "#0ff", + // brands, according to https://www.schemecolor.com/?s (picking one for multicolored logos) + // all dithered on B2, but we only use the color for the icons. (Could maybe pick the closest 3-bit color for B2?) + "bibel": "#54342c", + "bring": "#455a64", + "discord": "#5865f2", // https://discord.com/branding + "etar": "#36a18b", + "facebook": "#1877f2", // https://www.facebook.com/brand/resources/facebookapp/logo + "gmail": "#ea4335", + "gmx": "#1c449b", + "google": "#4285F4", + "google home": "#fbbc05", +// "home assistant": "#41bdf5", // ha-blue is #41bdf5, but that's the background + "instagram": "#ff0069", // https://about.instagram.com/brand/gradient + "lieferando": "#ff8000", + "linkedin": "#0a66c2", // https://brand.linkedin.com/ + "messenger": "#0078ff", + "mastodon": "#563acc", // https://www.joinmastodon.org/branding + "mattermost": "#00f", + "n26": "#36a18b", + "nextbike": "#00f", + "newpipe": "#f00", + "nina": "#e57004", + "opentasks": "#409f8f", + "outlook mail": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "paypal": "#003087", + "pocket": "#ef4154f", // https://blog.getpocket.com/press/ + "post & dhl": "#f2c101", + "reddit": "#ff4500", // https://www.redditinc.com/brand + "signal": "#3a76f0", // https://github.com/signalapp/Signal-Desktop/blob/main/images/signal-logo.svg + "skype": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "slack": "#e51670", + "snapchat": "#ff0", + "steam": "#171a21", + "teams": "#6264a7", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "telegram": "#0088cc", + "telegram foss": "#0088cc", + "to do": "#3999e5", + "twitch": "#9146ff", // https://brand.twitch.tv/ + "twitter": "#1d9bf0", // https://about.twitter.com/en/who-we-are/brand-toolkit + "vlc": "#ff8800", + "whatsapp": "#4fce5d", + "wordfeud": "#e7d3c7", + "youtube": "#f00", // https://www.youtube.com/howyoutubeworks/resources/brand-resources/#logos-icons-and-colors + }[s]||options.default; +}; + `); +}); diff --git a/apps/messageicons/icons/gmx.png b/apps/messageicons/icons/gmx.png new file mode 100644 index 0000000000000000000000000000000000000000..185c90aa3195fcaeebc433838e2badfaac39fb6c GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|=6bp~hIn|t z4RPdaFyLtZZ!gs>cuA2Z_L1JX+0sjw@7q; z5|8bQCSC)R_nY2{I)Px#$4Nv%R7gv`mD>`4AP7X`|3BKsCLBaAOOEwcLmYu+rPf-z4nBkei0C;+^*j)O zlXIaJND9!&tB?@jC9gnSK$cuWWUOwV39yp$j~O@xc*&)TB1i~`2D%MEOGo2)M$Zg9 zom<1pzUgJ`>p59P@1fNWJ!CIVOL(ZrOR6mbjhkB3UqUSt4G-#Zi&9>nvb<`kKpJc2 zInlm^6(A7QqrwV2&-t`ysJ_uSxJ8TX#6Yc!(6tKmWN6&~6`Z>F(<^fqd>n8C0C)1a TN$tt&00000NkvXXu0mjfXbEl7 literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/icon_names.json b/apps/messageicons/icons/icon_names.json new file mode 100644 index 000000000..0085731cc --- /dev/null +++ b/apps/messageicons/icons/icon_names.json @@ -0,0 +1,111 @@ +[ + { "app":"default", "icon":"default.png" }, + { "app":"airbnb", "icon":"airbnb.png" }, + { "app":"alarm", "icon":"alarm.png" }, + { "app":"alarmclockreceiver", "icon":"alarm.png" }, + { "app":"amazon shopping", "icon":"amazon.png" }, + { "app":"bibel", "icon":"bibel.png" }, + { "app":"bitwarden", "icon":"security.png" }, + { "app":"1password", "icon":"security.png" }, + { "app":"lastpass", "icon":"security.png" }, + { "app":"dashlane", "icon":"security.png" }, + { "app":"bring", "icon":"bring.png" }, + { "app":"calendar", "icon":"etar.png" }, + { "app":"etar", "icon":"etar.png" }, + { "app":"chat", "icon":"google chat.png" }, + { "app":"chrome", "icon":"chrome.png" }, + { "app":"corona-warn", "icon":"coronavirus.png" }, + { "app":"bmo", "icon":"bank.png" }, + { "app":"desjardins", "icon":"bank.png" }, + { "app":"rbc mobile", "icon":"bank.png" }, + { "app":"nbc", "icon":"bank.png" }, + { "app":"rabobank", "icon":"bank.png" }, + { "app":"scotiabank", "icon":"bank.png" }, + { "app":"td (canada)", "icon":"bank.png" }, + { "app":"discord", "icon":"discord.png" }, + { "app":"drive", "icon":"google drive.png" }, + { "app":"element", "icon":"matrix element.png" }, + { "app":"facebook", "icon":"facebook.png" }, + { "app":"messenger", "icon":"facebook messenger.png" }, + { "app":"firefox", "icon":"firefox.png" }, + { "app":"firefox beta", "icon":"firefox.png" }, + { "app":"firefox nightly", "icon":"firefox.png" }, + { "app":"f-droid", "icon":"security.png" }, + { "app":"neo store", "icon":"security.png" }, + { "app":"aurora droid", "icon":"security.png" }, + { "app":"github", "icon":"github.png" }, + { "app":"gitlab", "icon":"gitlab.png" }, + { "app":"gmx", "icon":"gmx.png" }, + { "app":"google", "icon":"google.png" }, + { "app":"google home", "icon":"google home.png" }, + { "app":"google play store", "icon":"google play store.png" }, + { "app":"home assistant", "icon":"home assistant.png" }, + { "app":"instagram", "icon":"instagram.png" }, + { "app":"kalender", "icon":"kalender.png" }, + { "app":"keep notes", "icon":"google keep.png" }, + { "app":"lieferando", "icon":"lieferando.png" }, + { "app":"linkedin", "icon":"linkedin.png" }, + { "app":"maps", "icon":"map.png" }, + { "app":"organic maps", "icon":"map.png" }, + { "app":"osmand", "icon":"map.png" }, + { "app":"mastodon", "icon":"mastodon.png" }, + { "app":"fedilab", "icon":"mastodon.png" }, + { "app":"tooot", "icon":"mastodon.png" }, + { "app":"tusky", "icon":"mastodon.png" }, + { "app":"mattermost", "icon":"mattermost.png" }, + { "app":"n26", "icon":"n26.png" }, + { "app":"netflix", "icon":"netflix.png" }, + { "app":"news", "icon":"news.png" }, + { "app":"cbc news", "icon":"news.png" }, + { "app":"rc info", "icon":"news.png" }, + { "app":"reuters", "icon":"news.png" }, + { "app":"ap news", "icon":"news.png" }, + { "app":"la presse", "icon":"news.png" }, + { "app":"nbc news", "icon":"news.png" }, + { "app":"nextbike", "icon":"nextbike.png" }, + { "app":"nina", "icon":"nina.png" }, + { "app":"outlook mail", "icon":"outlook.png" }, + { "app":"paypal", "icon":"paypal.png" }, + { "app":"phone", "icon":"phone.png" }, + { "app":"plex", "icon":"plex.png" }, + { "app":"pocket", "icon":"pocket.png" }, + { "app":"post & dhl", "icon":"delivery.png" }, + { "app":"proton mail", "icon":"protonmail.png" }, + { "app":"reddit", "icon":"reddit.png" }, + { "app":"sync pro", "icon":"reddit.png" }, + { "app":"sync dev", "icon":"reddit.png" }, + { "app":"boost", "icon":"reddit.png" }, + { "app":"infinity", "icon":"reddit.png" }, + { "app":"slide", "icon":"reddit.png" }, + { "app":"signal", "icon":"signal.png" }, + { "app":"skype", "icon":"skype.png" }, + { "app":"slack", "icon":"slack.png" }, + { "app":"snapchat", "icon":"snapchat.png" }, + { "app":"starbucks", "icon":"cafe.png" }, + { "app":"steam", "icon":"steam.png" }, + { "app":"teams", "icon":"teams.png" }, + { "app":"telegram", "icon":"telegram.png" }, + { "app":"telegram foss", "icon":"telegram.png" }, + { "app":"threema", "icon":"threema.png" }, + { "app":"tiktok", "icon":"tiktok.png" }, + { "app":"to do", "icon":"task.png" }, + { "app":"opentasks", "icon":"task.png" }, + { "app":"tasks", "icon":"task.png" }, + { "app":"transit", "icon":"transit.png" }, + { "app":"twitch", "icon":"twitch.png" }, + { "app":"twitter", "icon":"twitter.png" }, + { "app":"uber", "icon":"taxi.png" }, + { "app":"lyft", "icon":"taxi.png" }, + { "app":"vlc", "icon":"vlc.png" }, + { "app":"warnapp", "icon":"warnapp.png" }, + { "app":"whatsapp", "icon":"whatsapp.png" }, + { "app":"wordfeud", "icon":"wordfeud.png" }, + { "app":"youtube", "icon":"youtube.png" }, + { "app":"newpipe", "icon":"youtube.png" }, + { "app":"zoom", "icon":"videoconf.png" }, + { "app":"meet", "icon":"videoconf.png" }, + { "app":"music", "icon":"music.png" }, + { "app":"sms message", "icon":"default.png" }, + { "app":"mail", "icon":"default.png" }, + { "app":"gmail", "icon":"default.png" } +] diff --git a/apps/messageicons/icons/kalender.png b/apps/messageicons/icons/kalender.png new file mode 100644 index 0000000000000000000000000000000000000000..dd807dd9e9241b33e305dc65c4756ff387b0afc3 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Hha1_hIn{i z4RhpcFyNT{-(JdCh{utOd$!cxlU%MD;+->p7Vryts#tsqs679ng~RRR#E6L+Y>BN7 z)*IexI^NjCt+eLI)B|NvrKzu#--x=ithV;xOgk2on8y<8^jzlMf?%CVzsgxA=A`e_ z3Q1B6E?ucsbv&xLa`9B7t*#SiPv=N;dt~@laOKN49h(YoUR)O5dY^GpQcL#Rgx8be x?;cdv`nBE1`t$#Pn{Hn$ee&kR`Xu$6oHDo4Pncbqb^+*o22WQ%mvv4FO#ptQWV!$V literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/music.png b/apps/messageicons/icons/music.png new file mode 100644 index 0000000000000000000000000000000000000000..62f7acfeef8108ce0f8c7018e3d11a361367301e GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|x;uZ`dLbqk@%!p4}%4DMW@CLJz m!k>Kys@J_wci7(Yfsg;e?43p}b1Q%@VDNPHb6Mw<&;$TQXi9Vd literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/nextbike.png b/apps/messageicons/icons/nextbike.png new file mode 100644 index 0000000000000000000000000000000000000000..467bed8ac11be9365381c81579f3cc3e89c3d23f GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|=6Sj}hIn|t zo$AeZK!L;M>A&`62V2-Q?QhSxv25MJ=RAv*9SK-OktR~E0tm9u1h?7+FmGS-Y&V)F1g{par2rxbN|L){{El+ ces}@H<{hW^GjqJV3Un!hr>mdKI;Vst0G$h4B>(^b literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/nina.png b/apps/messageicons/icons/nina.png new file mode 100644 index 0000000000000000000000000000000000000000..2669b640155d5e3b008316621bccd36f5d55e849 GIT binary patch literal 261 zcmV+g0s8)lP)Px#zez+vR7gwBmfH@%AP7U{|3BKrWiE(CE4%u(1bQr>PIAsUJ-7q`L?lJHD6a!V z#cL64{=0yyyGJe>2O6*n^KwrBD?S1vjU_-4s0&RQ1sFN;08scC_1(cJKsU~wNA03& zSgi)&HcFMogLs>S02@5JNvad;qI`b?C_BF69CQw}a1;QW>6qG*u)?AjV3ig)1H^sV6aaYbvsI^x(tCe$k`~J_TYg+ctZ4^(?KA`nAB=s#%WJ`o#tm)|n zkF#b9n^;4qYGp7-s8=37@p?sS_r7 Date: Mon, 12 Dec 2022 11:37:19 +0000 Subject: [PATCH 268/342] fix overzealous sanity check --- bin/sanitycheck.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 6537f4389..838f99895 100644 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -245,7 +245,7 @@ apps.forEach((app,appIdx) => { if (!STORAGE_KEYS.includes(key)) ERROR(`App ${app.id} file ${file.name} has unknown key ${key}`, {file:appDirRelative+file.url}); } // warn if JS icon is the wrong size - if (file.name == app.id+".img") { + if (file.name == app.id+".img" && file.evaluate) { let icon; let match = fileContents.match(/^\s*E\.toArrayBuffer\(atob\(\"([^"]*)\"\)\)\s*$/); if (match==null) match = fileContents.match(/^\s*atob\(\"([^"]*)\"\)\s*$/); From 66e35d0d64f9ebc4fad5e32cdb57d8158a03806a Mon Sep 17 00:00:00 2001 From: Hank Date: Mon, 12 Dec 2022 17:14:27 +0100 Subject: [PATCH 269/342] 0.30: Another try on the swipe --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/README.md | 2 + apps/hworldclock/app.js | 151 +++++++++++++++++++++++---------- apps/hworldclock/metadata.json | 2 +- 4 files changed, 112 insertions(+), 44 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 13e3fa809..eef39a6ca 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -13,3 +13,4 @@ 0.27: BJS2: Changed swipe down to swipe up 0.28: Reverted changes to implementation of 0.25 0.29: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps +0.30: BJS2: swipe seems to be working now diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 93780bc2d..905e9987b 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -14,6 +14,8 @@ Provide names and the UTC offsets for up to three other timezones in the app sto The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. +BangleJS2: Swipe up to rotate screen. So you can show the time to a friend real quick. + ## Requests Please use [the Espruino Forum](http://forum.espruino.com/microcosms/1424/) if you have feature requests or notice bugs. diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index 6bd30be8e..38afa5572 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -7,6 +7,7 @@ var showSunInfo; var colorWhenDark; // ------- Settings file +const BANGLEJS2 = process.env.HWVERSION == 2; const big = g.getWidth()>200; // Font for primary time and date const primaryTimeFontSize = big?6:5; @@ -15,7 +16,7 @@ require("Font5x9Numeric7Seg").add(Graphics); require("FontTeletext10x18Ascii").add(Graphics); // Font for single secondary time -const secondaryTimeFontSize = 4; +const secondaryTimeFontSize = 4; const secondaryTimeZoneFontSize = 2; // Font / columns for multiple secondary times @@ -24,6 +25,7 @@ const xcol1 = 10; const xcol2 = g.getWidth() - xcol1; const font = "6x8"; +let drag; /* TODO: we could totally use 'Layout' here and avoid a whole bunch of hard-coded offsets */ @@ -39,7 +41,7 @@ const yposWorld = big ? 170 : 120; const OFFSET_TIME_ZONE = 0; const OFFSET_HOURS = 1; -var PosInterval = 0; +var PosInterval = 0; var offsets = require("Storage").readJSON("hworldclock.settings.json") || []; @@ -87,7 +89,7 @@ const mockOffsets = { //offsets = mockOffsets.fourOffsets; // should render in columns // END TESTING CODE - + // Load settings function loadMySettings() { @@ -141,9 +143,11 @@ function getCurrentTimeFromOffset(dt, offset) { function updatePos() { coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":0,"lon":0,"location":"-"}; //{"lat":53.3,"lon":10.1,"location":"Pattensen"}; if (coord.lat != 0 && coord.lon != 0) { + //pos = SunCalc.getPosition(Date.now(), coord.lat, coord.lon); times = SunCalc.getTimes(Date.now(), coord.lat, coord.lon); rise = "^" + times.sunrise.toString().split(" ")[4].substr(0,5); set = "v" + times.sunset.toString().split(" ")[4].substr(0,5); + //noonpos = SunCalc.getPosition(times.solarNoon, coord.lat, coord.lon); } else { rise = null; set = null; @@ -177,7 +181,7 @@ function drawSeconds() { //console.log(seconds); if (Bangle.isLocked() && secondsMode != "always") seconds = seconds.slice(0, -1) + ':::'; // we use :: as the font does not have an x //console.log(seconds); - g.drawString(`${seconds}`, xyCenterSeconds, yposTime+14, true); + g.drawString(`${seconds}`, xyCenterSeconds, yposTime+14, true); queueDrawSeconds(); } @@ -194,18 +198,18 @@ function draw() { let time = da[4].split(":"); let hours = time[0], minutes = time[1]; - - + + if (_12hour){ //do 12 hour stuff if (hours > 12) { ampm = "PM"; - hours = hours - 12; - if (hours < 10) hours = doublenum(hours); + hours = hours - 12; + if (hours < 10) hours = doublenum(hours); } else { - ampm = "AM"; - } - } + ampm = "AM"; + } + } //g.setFont(font, primaryTimeFontSize); g.setFont("5x9Numeric7Seg",primaryTimeFontSize); @@ -219,18 +223,18 @@ function draw() { g.setColor(g.theme.fg); } g.drawString(`${hours}:${minutes}`, xyCenter-10, yposTime, true); - + // am / PM ? if (_12hour){ //do 12 hour stuff //let ampm = require("locale").medidian(new Date()); Not working g.setFont("Vector", 17); g.drawString(ampm, xyCenterSeconds, yAmPm, true); - } + } if (secondsMode != "none") drawSeconds(); // To make sure... - - // draw Day, name of month, Date + + // draw Day, name of month, Date //DATE let localDate = require("locale").date(new Date(), 1); localDate = localDate.substring(0, localDate.length - 5); @@ -249,7 +253,7 @@ function draw() { if (offsets.length === 1) { - let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; + let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; // For a single secondary timezone, draw it bigger and drop time zone to second line const xOffset = 30; g.setFont(font, secondaryTimeFontSize).drawString(`${hours}:${minutes}`, xyCenter, yposTime2, true); @@ -275,7 +279,7 @@ function draw() { g.setFontAlign(-1, 0).setFont("Vector",12).drawString(`${rise}`, 10, 3 + yposWorld + 3 * 15, true); // draw rise g.setFontAlign(1, 0).drawString(`${set}`, xcol2, 3 + yposWorld + 3 * 15, true); // draw set } else { - g.setFontAlign(-1, 0).setFont("Vector",11).drawString("set city in \'my location\' app!", 10, 3 + yposWorld + 3 * 15, true); + g.setFontAlign(-1, 0).setFont("Vector",11).drawString("set city in \'my location\' app!", 10, 3 + yposWorld + 3 * 15, true); } } //debug settings @@ -285,7 +289,7 @@ function draw() { //g.drawString(colorWhenDark, xcol2, 3 + yposWorld + 3 * 15, true); queueDraw(); - + if (secondsMode != "none") queueDrawSeconds(); } @@ -295,26 +299,63 @@ g.clear(); // Init the settings of the app loadMySettings(); -// Show launcher when middle button pressed -Bangle.setUI({ - mode : "clock", - remove : function() { - // Called to unload all of the clock app - if (PosInterval) clearInterval(PosInterval); - PosInterval = undefined; - if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); - drawTimeoutSeconds = undefined; - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - }}); -Bangle.loadWidgets(); -Bangle.drawWidgets(); + // draw immediately at first, queue update draw(); + + + +//if (BANGLEJS2) { + //Bangle.on("drag", e => { + let onDrag = e => { + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + if (Math.abs(dx)>Math.abs(dy)+10) { + // horizontal + if (dx < dy) { + // for later purpose + } else { + // for later purpose + } + } else if (Math.abs(dy)>Math.abs(dx)+10) { + // vertical + if (dx < dy) { //down + g.clear().setRotation(0); + draw(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + } else { + g.clear().setRotation(2); + draw(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + } + } else { + //console.log("tap " + e.x + " " + e.y); + if (e.x > 145 && e.y > 145) { + // for later purpose + } + } + } + }; //); + Bangle.on("drag", onDrag); + //} else { + //setWatch(xxx, BTN1, { repeat: true, debounce:50 }); // maybe adding this later + //setWatch(xxx, BTN3, { repeat: true, debounce:50 }); + //setWatch(xxx, BTN4, { repeat: true, debounce:50 }); + //setWatch(xxx, BTN5, { repeat: true, debounce:50 }); + // } +//} + + + if (!Bangle.isLocked()) { // Initial state if (showSunInfo) { if (PosInterval != 0 && typeof PosInterval != 'undefined') clearInterval(PosInterval); @@ -326,15 +367,15 @@ if (!Bangle.isLocked()) { // Initial state if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; - } + } if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; draw(); // draw immediately, queue redraw - + }else{ if (secondsMode == "always") secondsTimeout = 1000; if (secondsMode == "when unlocked") secondsTimeout = 10 * 1000; - + if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; @@ -348,11 +389,11 @@ if (!Bangle.isLocked()) { // Initial state updatePos(); } draw(); // draw immediately, queue redraw - } + - -Bangle.on('lock',on=>{ +//Bangle.on('lock',on=>{ +let onLock = on => { if (!on) { // UNlocked if (showSunInfo) { if (PosInterval != 0) clearInterval(PosInterval); @@ -364,7 +405,7 @@ Bangle.on('lock',on=>{ if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; - } + } if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; @@ -373,7 +414,7 @@ Bangle.on('lock',on=>{ if (secondsMode == "always") secondsTimeout = 1000; if (secondsMode == "when unlocked") secondsTimeout = 10 * 1000; - + if (secondsMode != "none") { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = undefined; @@ -386,7 +427,31 @@ Bangle.on('lock',on=>{ PosInterval = setInterval(updatePos, 60*60E3); // refesh every 60 mins updatePos(); } - draw(); // draw immediately, queue redraw + draw(); // draw immediately, queue redraw } - }); -} + }; +Bangle.on('lock', onLock); + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "custom",clock:true, + remove : function() { + // Called to unload all of the clock app + if (typeof PosInterval === "undefined") { + console.log("PosInterval is undefined"); + } else { + if (PosInterval) clearInterval(PosInterval); + } + PosInterval = undefined; + if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); + drawTimeoutSeconds = undefined; + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + if (BANGLEJS2) Bangle.removeListener("drag",onDrag); + Bangle.removeListener("onLock",onLock); + }}); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +// ); +} \ No newline at end of file diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 3b633ead7..401201f51 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.29", + "version": "0.30", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From 8962c2527ee4080e445586634cc5d3f9ca249879 Mon Sep 17 00:00:00 2001 From: pebl-hank Date: Mon, 12 Dec 2022 17:17:47 +0100 Subject: [PATCH 270/342] Update ChangeLog --- apps/messageicons/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/messageicons/ChangeLog b/apps/messageicons/ChangeLog index fefc6ee6e..68494fccc 100644 --- a/apps/messageicons/ChangeLog +++ b/apps/messageicons/ChangeLog @@ -1,2 +1,3 @@ 0.01: Moved message icons from messages into standalone library 0.02: Added several new icons and colors +0.03: ? From 5836d7de6559119866cf6d863c8e74a2d6a43d5e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 12 Dec 2022 16:33:37 +0000 Subject: [PATCH 271/342] oops. didn't commit --- apps/messageicons/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/messageicons/ChangeLog b/apps/messageicons/ChangeLog index fefc6ee6e..26683e38b 100644 --- a/apps/messageicons/ChangeLog +++ b/apps/messageicons/ChangeLog @@ -1,2 +1,4 @@ 0.01: Moved message icons from messages into standalone library 0.02: Added several new icons and colors +0.03: Fix icons broken in 0v02 (#2386) + Store all icons in a separate binary file (much faster lookup) From 186630f0c70f15c38605d031c1ba1cfa81104d4e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 13 Dec 2022 08:51:01 +0000 Subject: [PATCH 272/342] Show installs/favourites with percentage values --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 2a89ea64f..9246a2b35 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 2a89ea64f7874b9264572f68836fe8ecd0a6b191 +Subproject commit 9246a2b350b9b240fe20b2631eac9b92926a50d4 From 821205c63ba4f5f6578f7f00d7eb69cc720c2e36 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 13 Dec 2022 16:00:54 +0000 Subject: [PATCH 273/342] Check for potential clashes (eg installing 2 battery widgets) and prompt for a solution --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 9246a2b35..376824068 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 9246a2b350b9b240fe20b2631eac9b92926a50d4 +Subproject commit 376824068d90986c245b46970fd80ccdca44e431 From dcefe4b393ccc5e6308752514e7ef29c8d354f3c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 09:33:03 +0000 Subject: [PATCH 274/342] Update clock_info's heart rate handling to ensure the HRM value is up to date --- modules/clock_info.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/clock_info.js b/modules/clock_info.js index 50968311e..6f37e5d3d 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -61,12 +61,15 @@ if (stepGoal == undefined) { exports.load = function() { // info used for drawing... - var hrm = "--"; + var hrm = 0; var alt = "--"; // callbacks (needed for easy removal of listeners) function batteryUpdateHandler() { bangleItems[0].emit("redraw"); } function stepUpdateHandler() { bangleItems[1].emit("redraw"); } - function hrmUpdateHandler() { bangleItems[2].emit("redraw"); } + function hrmUpdateHandler(e) { + if (e && e.confidence>60) hrm = Math.round(e.bpm); + bangleItems[2].emit("redraw"); + } function altUpdateHandler() { Bangle.getPressure().then(data=>{ if (!data) return; @@ -99,12 +102,12 @@ exports.load = function() { }, { name : "HRM", hasRange : true, - get : () => { let v = Math.round(Bangle.getHealthStatus("last").bpm); return { - text : v + " bpm", v : v, min : 40, max : 200, + get : () => { return { + text : (hrm||"--") + " bpm", v : hrm, min : 40, max : 200, img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }}, - show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); }, - hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; }, + show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); }, + hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = 0; }, } ], }]; From d0e67164d01d816500db831b560d1eda60543801 Mon Sep 17 00:00:00 2001 From: Hank Date: Wed, 14 Dec 2022 11:14:56 +0100 Subject: [PATCH 275/342] 0.31: Tweaking the swipe option; Added mylocation as a dependency. --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/README.md | 21 ++++-- apps/hworldclock/app.js | 133 +++++++++++++++++---------------- apps/hworldclock/metadata.json | 5 +- apps/hworldclock/settings.js | 3 +- 5 files changed, 89 insertions(+), 74 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index eef39a6ca..df3965698 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -14,3 +14,4 @@ 0.28: Reverted changes to implementation of 0.25 0.29: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps 0.30: BJS2: swipe seems to be working now +0.31: Tweaking the swipe option; Added mylocation as a dependency. diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 905e9987b..273389775 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -1,8 +1,16 @@ + # Hanks World Clock - See the time in four locations In addition to the main clock and date in your current location, you can add up to three other locations. Great for travel or remote working. -Additionally we show the sunset/sunrise and seconds for the current location and the day name is shown in your locale. -If watch is locked, seconds get refreshed every 10 seconds. +Additionally we show the sunset/sunrise and seconds for the current location. The day name is shown in your locale. +Also, you can swipe up to show the current time to a friend. + +All this is configurable: + + - Show seconds only when unlocked (saves battery) / always / do not show seconds + - Green color on dark mode (on/off) + - Show sun info (on/off) (set your location in the mylocation app) + - Rotation degree on swipe (off / 90 / 180 / 270) ![](hworldclock.png) @@ -10,11 +18,11 @@ If watch is locked, seconds get refreshed every 10 seconds. Location for sun set / rise set with mylocation app. -Provide names and the UTC offsets for up to three other timezones in the app store. These are stored in a json file on your watch. UTC offsets can be decimal (e.g., 5.5 for India). +Provide names and the UTC offsets for up to three other timezones in the App Loader before uploading. These are stored in a json file on your watch. UTC offsets can be decimal (e.g., 5.5 for India). -The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the app store and update. Currently the clock only supports 24 hour time format for the additional time zones. +The clock does not handle summer time / daylight saving time changes automatically. If one of your three locations changes its UTC offset, you can simply change the setting in the App Launcher and update. Currently the clock only supports 24 hour time format for the additional time zones. -BangleJS2: Swipe up to rotate screen. So you can show the time to a friend real quick. +BangleJS2: Swipe up to rotate screen (Target rotation can be set in the settings). Swipe up again to go back to the default rotation. So you can show the time to a friend real quick or temporarily change orientation for sports etc. ## Requests @@ -24,5 +32,4 @@ Please use [the Espruino Forum](http://forum.espruino.com/microcosms/1424/) if y Created by Hank. -Based on the great work of "World Clock - 4 time zones". Made by [Scott Hale](https://www.github.com/computermacgyver), based upon the [Simple Clock](https://github.com/espruino/BangleApps/tree/master/apps/sclock). -And Sun Clock [Sun Clock](https://github.com/espruino/BangleApps/tree/master/apps/sunclock) \ No newline at end of file +Based on the great work of "World Clock - 4 time zones". Made by [Scott Hale](https://www.github.com/computermacgyver) diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index 38afa5572..6b10fb4f0 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -2,18 +2,19 @@ // ------- Settings file const SETTINGSFILE = "hworldclock.json"; -var secondsMode; -var showSunInfo; -var colorWhenDark; +let secondsMode; +let showSunInfo; +let colorWhenDark; +let rotationTarget; // ------- Settings file -const BANGLEJS2 = process.env.HWVERSION == 2; +//const BANGLEJS2 = process.env.HWVERSION == 2; const big = g.getWidth()>200; // Font for primary time and date const primaryTimeFontSize = big?6:5; const primaryDateFontSize = big?3:2; -require("Font5x9Numeric7Seg").add(Graphics); -require("FontTeletext10x18Ascii").add(Graphics); +let font5x9 = require("Font5x9Numeric7Seg").add(Graphics); +let font10x18 = require("FontTeletext10x18Ascii").add(Graphics); // Font for single secondary time const secondaryTimeFontSize = 4; @@ -27,8 +28,6 @@ const xcol2 = g.getWidth() - xcol1; const font = "6x8"; let drag; -/* TODO: we could totally use 'Layout' here and -avoid a whole bunch of hard-coded offsets */ const xyCenter = g.getWidth() / 2; const xyCenterSeconds = xyCenter + (big ? 85 : 68); @@ -41,22 +40,27 @@ const yposWorld = big ? 170 : 120; const OFFSET_TIME_ZONE = 0; const OFFSET_HOURS = 1; -var PosInterval = 0; +let PosInterval = 0; -var offsets = require("Storage").readJSON("hworldclock.settings.json") || []; +let offsets = require("Storage").readJSON("hworldclock.settings.json") || []; //=======Sun -setting = require("Storage").readJSON("setting.json",1); +let setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ -SunCalc = require("suncalc"); // from modules folder +//https://raw.githubusercontent.com/pebl-hank/BangleApps/master/modules/suncalc.js +let SunCalc = require("suncalc"); // from modules folder const LOCATION_FILE = "mylocation.json"; -var rise = "read"; -var set = "..."; +let rise = "read"; +let set = "..."; //var pos = {altitude: 20, azimuth: 135}; //var noonpos = {altitude: 37, azimuth: 180}; //=======Sun -var ampm = "AM"; +let ampm = "AM"; + +let defaultRotation = setting.rotate || 0; +let currentRotation = defaultRotation; + // TESTING CODE // Used to test offset array values during development. @@ -91,30 +95,36 @@ const mockOffsets = { // END TESTING CODE -// Load settings -function loadMySettings() { - // Helper function default setting - function def (value, def) {return value !== undefined ? value : def;} - - var settings = require('Storage').readJSON(SETTINGSFILE, true) || {}; - secondsMode = def(settings.secondsMode, "when unlocked"); - showSunInfo = def(settings.showSunInfo, true); - colorWhenDark = def(settings.colorWhenDark, "green"); +// ================ Load settings +// Helper function default setting +let def = function(value, def) { + return value !== undefined ? value : def; } +let settings = require('Storage').readJSON(SETTINGSFILE, true) || {}; +secondsMode = def(settings.secondsMode, "when unlocked"); +showSunInfo = def(settings.showSunInfo, true); +colorWhenDark = def(settings.colorWhenDark, "green"); +rotationTarget = def(settings.rotationTarget, "90"); +rotationTarget = parseInt(rotationTarget) || 0; +if (rotationTarget == 90) rotationTarget = 1; // very lame, but works for now. +if (rotationTarget == 180) rotationTarget = 2; +if (rotationTarget == 270) rotationTarget = 3; +// ================ Load settings + // Check settings for what type our clock should be -var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; +let _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; // timeout used to update every minute -var drawTimeout; -var drawTimeoutSeconds; -var secondsTimeout; +let drawTimeout; +let drawTimeoutSeconds; +let secondsTimeout; g.setBgColor(g.theme.bg); // schedule a draw for the next minute -function queueDraw() { +let queueDraw = function() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { drawTimeout = undefined; @@ -123,7 +133,7 @@ function queueDraw() { } // schedule a draw for the next second -function queueDrawSeconds() { +let queueDrawSeconds = function() { if (drawTimeoutSeconds) clearTimeout(drawTimeoutSeconds); drawTimeoutSeconds = setTimeout(function() { drawTimeoutSeconds = undefined; @@ -132,16 +142,16 @@ function queueDrawSeconds() { }, secondsTimeout - (Date.now() % secondsTimeout)); } -function doublenum(x) { +let doublenum = function(x) { return x < 10 ? "0" + x : "" + x; } -function getCurrentTimeFromOffset(dt, offset) { +let getCurrentTimeFromOffset = function(dt, offset) { return new Date(dt.getTime() + offset * 60 * 60 * 1000); } -function updatePos() { - coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":0,"lon":0,"location":"-"}; //{"lat":53.3,"lon":10.1,"location":"Pattensen"}; +let updatePos = function() { + let coord = require("Storage").readJSON(LOCATION_FILE,1)|| {"lat":0,"lon":0,"location":"-"}; //{"lat":53.3,"lon":10.1,"location":"Pattensen"}; if (coord.lat != 0 && coord.lon != 0) { //pos = SunCalc.getPosition(Date.now(), coord.lat, coord.lon); times = SunCalc.getTimes(Date.now(), coord.lat, coord.lon); @@ -154,8 +164,7 @@ function updatePos() { } } - -function drawSeconds() { +let drawSeconds = function() { // get date let d = new Date(); let da = d.toString().split(" "); @@ -177,16 +186,13 @@ function drawSeconds() { } else { g.setColor(g.theme.fg); } - //console.log("---"); - //console.log(seconds); if (Bangle.isLocked() && secondsMode != "always") seconds = seconds.slice(0, -1) + ':::'; // we use :: as the font does not have an x - //console.log(seconds); g.drawString(`${seconds}`, xyCenterSeconds, yposTime+14, true); queueDrawSeconds(); } -function draw() { +let draw = function() { // get date let d = new Date(); let da = d.toString().split(" "); @@ -211,7 +217,6 @@ function draw() { } } - //g.setFont(font, primaryTimeFontSize); g.setFont("5x9Numeric7Seg",primaryTimeFontSize); if (g.theme.dark) { if (colorWhenDark == "green") { @@ -293,24 +298,10 @@ function draw() { if (secondsMode != "none") queueDrawSeconds(); } -// clean app screen -g.clear(); - -// Init the settings of the app -loadMySettings(); - - - - -// draw immediately at first, queue update -draw(); - - //if (BANGLEJS2) { - //Bangle.on("drag", e => { let onDrag = e => { if (!drag) { // start dragging drag = {x: e.x, y: e.y}; @@ -327,12 +318,20 @@ draw(); } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical if (dx < dy) { //down - g.clear().setRotation(0); - draw(); - Bangle.loadWidgets(); - Bangle.drawWidgets(); + //g.clear().setRotation(defaultRotation); + //currentRotation = defaultRotation; + //draw(); + //Bangle.loadWidgets(); + //Bangle.drawWidgets(); } else { - g.clear().setRotation(2); + if (currentRotation == rotationTarget) { + g.clear().setRotation(defaultRotation); + currentRotation = defaultRotation; + } else { + g.clear().setRotation(rotationTarget); + currentRotation = rotationTarget; + } + draw(); Bangle.loadWidgets(); Bangle.drawWidgets(); @@ -346,13 +345,12 @@ draw(); } }; //); Bangle.on("drag", onDrag); - //} else { + //} <-- BJS2 only } else { //setWatch(xxx, BTN1, { repeat: true, debounce:50 }); // maybe adding this later //setWatch(xxx, BTN3, { repeat: true, debounce:50 }); //setWatch(xxx, BTN4, { repeat: true, debounce:50 }); //setWatch(xxx, BTN5, { repeat: true, debounce:50 }); // } -//} @@ -392,7 +390,6 @@ if (!Bangle.isLocked()) { // Initial state } -//Bangle.on('lock',on=>{ let onLock = on => { if (!on) { // UNlocked if (showSunInfo) { @@ -432,11 +429,13 @@ let onLock = on => { }; Bangle.on('lock', onLock); + // Show launcher when middle button pressed Bangle.setUI({ mode : "custom",clock:true, remove : function() { // Called to unload all of the clock app + g.setRotation(defaultRotation); // bring back default rotation if (typeof PosInterval === "undefined") { console.log("PosInterval is undefined"); } else { @@ -447,9 +446,15 @@ Bangle.setUI({ drawTimeoutSeconds = undefined; if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - if (BANGLEJS2) Bangle.removeListener("drag",onDrag); + //if (BANGLEJS2) + Bangle.removeListener("drag",onDrag); Bangle.removeListener("onLock",onLock); }}); + + +g.clear().setRotation(defaultRotation); // clean app screen and make sure the default rotation is set +draw(); // draw immediately at first, queue update + Bangle.loadWidgets(); Bangle.drawWidgets(); diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 401201f51..590f1dc86 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.30", + "version": "0.31", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", @@ -12,6 +12,7 @@ "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "custom": "custom.html", + "dependencies": {"mylocation":"app"}, "storage": [ {"name":"hworldclock.app.js","url":"app.js"}, {"name":"hworldclock.img","url":"hworldclock-icon.js","evaluate":true}, @@ -19,6 +20,6 @@ ], "data": [ {"name":"hworldclock.settings.json"}, - {"name":"hworldclock.json"} + {"name":"hworldclock.json"} ] } diff --git a/apps/hworldclock/settings.js b/apps/hworldclock/settings.js index 26c946b5f..ad97c161a 100644 --- a/apps/hworldclock/settings.js +++ b/apps/hworldclock/settings.js @@ -42,7 +42,8 @@ settings.showSunInfo = v; writeSettings(); } - } + }, + "Rotation": stringInSettings("rotationTarget", ["off", "90", "180", "270"]), }; E.showMenu(mainmenu); From 51304530f681fb2f90eb3fcc4f2a6fc42194114d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 10:23:22 +0000 Subject: [PATCH 276/342] 0.31: Remove calls to Bangle.loadWidgets as they are not needed and create warnings --- apps/hworldclock/ChangeLog | 1 + apps/hworldclock/app.js | 4 +--- apps/hworldclock/metadata.json | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index eef39a6ca..f571697b7 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -14,3 +14,4 @@ 0.28: Reverted changes to implementation of 0.25 0.29: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps 0.30: BJS2: swipe seems to be working now +0.31: Remove calls to Bangle.loadWidgets as they are not needed and create warnings diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index 38afa5572..3ec4b2c3d 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -329,12 +329,10 @@ draw(); if (dx < dy) { //down g.clear().setRotation(0); draw(); - Bangle.loadWidgets(); Bangle.drawWidgets(); } else { g.clear().setRotation(2); draw(); - Bangle.loadWidgets(); Bangle.drawWidgets(); } } else { @@ -454,4 +452,4 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); // ); -} \ No newline at end of file +} diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 401201f51..eb0e72ddc 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.30", + "version": "0.31", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From 69660b69aa6b00552873c2b0bd0eedcfdd995cea Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 10:23:36 +0000 Subject: [PATCH 277/342] Add BTHome thermometer --- apps/bthometemp/ChangeLog | 1 + apps/bthometemp/README.md | 9 ++++++ apps/bthometemp/app-icon.js | 1 + apps/bthometemp/app.js | 58 ++++++++++++++++++++++++++++++++++ apps/bthometemp/app.png | Bin 0 -> 13318 bytes apps/bthometemp/metadata.json | 14 ++++++++ 6 files changed, 83 insertions(+) create mode 100644 apps/bthometemp/ChangeLog create mode 100644 apps/bthometemp/README.md create mode 100644 apps/bthometemp/app-icon.js create mode 100644 apps/bthometemp/app.js create mode 100644 apps/bthometemp/app.png create mode 100644 apps/bthometemp/metadata.json diff --git a/apps/bthometemp/ChangeLog b/apps/bthometemp/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/bthometemp/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/bthometemp/README.md b/apps/bthometemp/README.md new file mode 100644 index 000000000..1a8212ea4 --- /dev/null +++ b/apps/bthometemp/README.md @@ -0,0 +1,9 @@ +# BTHome Temperature and Pressure + +This app displays temperature and pressure and advertises them over bluetooth using BTHome.io standard (along with battery level) + +This can be used to integrate with [Home Assistant](https://www.home-assistant.io/), so you can use your Bangle as a wireless temperature/pressure sensor. + +More info on the standard at https://bthome.io + +And the data format used is https://bthome.io/format/ diff --git a/apps/bthometemp/app-icon.js b/apps/bthometemp/app-icon.js new file mode 100644 index 000000000..e2dff3eb9 --- /dev/null +++ b/apps/bthometemp/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4kA///1N6BIPf//1gMIwdE8sG2me+9Y/8C/2snXsoUNpdnzdt/xj/AH4AYgMRAAUQCyoYSCQNXs1muoFBFyHm1X//+qtwwPiMX1+YmczxP6uIwNFwN6yeDnGDmc504wNFwOpnGYC4OJweaGBsR9WTmYtBmc4GAOuC5ZGBt4SBAAQEBwf2JBcBiupnIuCmedxGTzVRC5cX1AuDnPZF4OKuIXLi3zIoedMgMzn9hC5uICQON5IDBxAXSznYC6RdDPQYXNO4JcB7pdCO56nBnGZ7p6DU5zXBXgSqDa5sAiPqIgOZd4c510RCxQXBi+pRQIXBxODzVxC5hIBvR1DnE505GMGAevzAvC/QuNGAfm1X//+qtwuOGAURq9ms11AoIWOGAQAEFw1EDBwWFggBCkUgAQMigUAAIIAJoABDCgIXQFwYXBCYYBDHAMCEAIkCFgcEAIIKCCoQFCkAhBAQIlCkAsBOoIXCBoIvEAwQTCAYI2BIwgXIF4YXDQwIVCC4YIBMIwfCAQRfGYBSPNC6TBFACgwBACouWAH4AiA=")) diff --git a/apps/bthometemp/app.js b/apps/bthometemp/app.js new file mode 100644 index 000000000..7b55777d1 --- /dev/null +++ b/apps/bthometemp/app.js @@ -0,0 +1,58 @@ +// history of temperature/pressure readings +var history = []; + +// When we get temperature... +function onTemperature(p) { + // Average the last 5 temperature readings + while (history.length>4) history.shift(); + history.push(p); + var avrTemp = history.reduce((i,h)=>h.temperature+i,0) / history.length; + var avrPressure = history.reduce((i,h)=>h.pressure+i,0) / history.length; + var t = require('locale').temp(avrTemp).replace("'","°"); + // Draw + var rect = Bangle.appRect; + g.reset(1).clearRect(rect.x, rect.y, rect.x2, rect.y2); + var x = (rect.x+rect.x2)/2; + var y = (rect.y+rect.y2)/2 + 10; + g.setFont("6x15").setFontAlign(0,0).drawString("Temperature:", x, y - 65); + g.setFontVector(50).setFontAlign(0,0).drawString(t, x, y-25); + g.setFont("6x15").setFontAlign(0,0).drawString("Pressure:", x, y+15 ); + g.setFont("12x20").setFontAlign(0,0).drawString(Math.round(avrPressure)+" hPa", x, y+40); + // Set Bluetooth Advertising + // https://bthome.io/format/ + var temp100 = Math.round(avrTemp*100); + var pressure100 = Math.round(avrPressure*100); + + Bangle.bleAdvert[0xFCD2] = [ 0x40, /* BTHome Device Information + bit 0: "Encryption flag" + bit 1-4: "Reserved for future use" + bit 5-7: "BTHome Version" */ + + 0x01, // Battery, 8 bit + E.getBattery(), + + 0x02, // Temperature, 16 bit + temp100&255,temp100>>8, + + 0x04, // Pressure, 16 bit + pressure100&255,(pressure100>>8)&255,pressure100>>16 + ]; + NRF.setAdvertising(Bangle.bleAdvert); +} + +// Gets the temperature in the most accurate way with pressure sensor +function drawTemperature() { + Bangle.getPressure().then(p =>{if (p) onTemperature(p);}); +} + +if (!Bangle.bleAdvert) Bangle.bleAdvert = {}; +setInterval(function() { + drawTemperature(); +}, 10000); // update every 10s +Bangle.loadWidgets(); +Bangle.setUI({ + mode : "custom", + back : function() {load();} +}); +E.showMessage("Reading temperature..."); +drawTemperature(); diff --git a/apps/bthometemp/app.png b/apps/bthometemp/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8eb3f14ce0f0ed83734d8a386e0283ce665781 GIT binary patch literal 13318 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 literal 0 HcmV?d00001 diff --git a/apps/bthometemp/metadata.json b/apps/bthometemp/metadata.json new file mode 100644 index 000000000..4bfd08c31 --- /dev/null +++ b/apps/bthometemp/metadata.json @@ -0,0 +1,14 @@ +{ "id": "bthometemp", + "name": "BTHome Temperature and Pressure", + "shortName":"BTHome T", + "version":"0.01", + "description": "Displays temperature and pressure, and advertises them over bluetooth using BTHome.io standard", + "icon": "app.png", + "tags": "bthome,bluetooth,temperature", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"bthometemp.app.js","url":"app.js"}, + {"name":"bthometemp.img","url":"app-icon.js","evaluate":true} + ] +} From f95ce3a84ead7a078216bf99bd3e538145ae100b Mon Sep 17 00:00:00 2001 From: glemco Date: Wed, 14 Dec 2022 12:58:42 +0100 Subject: [PATCH 278/342] circlesclock: fixed crash if item has no image and cutting long overflowing text --- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 3 +++ apps/circlesclock/metadata.json | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index cb5248e32..83abde6df 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -38,3 +38,4 @@ Add fast load capability 0.21: Remade all icons without a palette for dark theme Now re-adds widgets if they were hidden when fast-loading +0.22: Fixed crash if item has no image and cutting long overflowing text diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 444040ef0..30d6a48f4 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -183,9 +183,12 @@ let drawCircle = function(index, item, data) { if (txt.endsWith(" bpm")) txt=txt.slice(0,-4); // hack for heart rate - remove the 'bpm' text if(item.hasRange) percent = (data.v-data.min) / (data.max-data.min); if(data.short) txt = data.short; + //long text can overflow and we do not draw there anymore.. + if(txt.length>6) txt = txt.slice(0,5)+"\n"+txt.slice(5,10) drawGauge(w, h3, percent, color); drawInnerCircleAndTriangle(w); writeCircleText(w, txt); + if(!img) return; //or get it from the clkinfo? g.setColor(getCircleIconColor(index, color, percent)) .drawImage(img, w - iconOffset, h3 + radiusOuter - iconOffset, {scale: 16/24}); } diff --git a/apps/circlesclock/metadata.json b/apps/circlesclock/metadata.json index 7b4c25532..1b94c00b3 100644 --- a/apps/circlesclock/metadata.json +++ b/apps/circlesclock/metadata.json @@ -1,7 +1,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.21", + "version":"0.22", "description": "A clock with three or four circles for different data at the bottom in a probably familiar style", "icon": "app.png", "screenshots": [{"url":"screenshot-dark.png"}, {"url":"screenshot-light.png"}, {"url":"screenshot-dark-4.png"}, {"url":"screenshot-light-4.png"}], From 99065debc71bb7ced9a13a5dc2e7caa3a940587c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 14:52:04 +0000 Subject: [PATCH 279/342] Ensure Agenda supplies an image for clkinfo items (fix #2397) --- apps/agenda/ChangeLog | 1 + apps/agenda/agenda.clkinfo.js | 2 +- apps/agenda/metadata.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index 7f749ff25..cb928213e 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -7,3 +7,4 @@ 0.07: Clkinfo improvements. 0.08: Fix error in clkinfo (didn't require Storage & locale) Fix clkinfo icon +0.09: Ensure Agenda supplies an image for clkinfo items diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index baa8b9516..54677327b 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -19,7 +19,7 @@ agendaItems.items.push({ name: "Agenda "+i, - get: () => ({ text: title + "\n" + dateStr, img: null}), + get: () => ({ text: title + "\n" + dateStr, img: agendaItems.img }), show: function() { agendaItems.items[i].emit("redraw"); }, hide: function () {} }); diff --git a/apps/agenda/metadata.json b/apps/agenda/metadata.json index 7e49e3f96..58a5091cd 100644 --- a/apps/agenda/metadata.json +++ b/apps/agenda/metadata.json @@ -1,7 +1,7 @@ { "id": "agenda", "name": "Agenda", - "version": "0.08", + "version": "0.09", "description": "Simple agenda", "icon": "agenda.png", "screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}], From 1dcf6085d5f284d630dae2556275d335a8446396 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 15:00:29 +0000 Subject: [PATCH 280/342] Ensure Timer supplies an image for clkinfo items --- apps/smpltmr/ChangeLog | 3 ++- apps/smpltmr/clkinfo.js | 6 +++--- apps/smpltmr/metadata.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog index 805e8546f..12b77aacd 100644 --- a/apps/smpltmr/ChangeLog +++ b/apps/smpltmr/ChangeLog @@ -2,4 +2,5 @@ 0.02: Rewrite with new interface 0.03: Added clock infos to expose timer functionality to clocks. 0.04: Improvements of clock infos. -0.05: Updated clkinfo icon. \ No newline at end of file +0.05: Updated clkinfo icon. +0.06: Ensure Timer supplies an image for clkinfo items diff --git a/apps/smpltmr/clkinfo.js b/apps/smpltmr/clkinfo.js index c16e6127e..270a14fc4 100644 --- a/apps/smpltmr/clkinfo.js +++ b/apps/smpltmr/clkinfo.js @@ -69,7 +69,7 @@ items: [ { name: null, - get: () => ({ text: getAlarmMinutesText() + (isAlarmEnabled() ? " min" : ""), img: null}), + get: () => ({ text: getAlarmMinutesText() + (isAlarmEnabled() ? " min" : ""), img: smpltmrItems.img }), show: function() { smpltmrItems.items[0].emit("redraw"); }, hide: function () {}, run: function() { } @@ -81,7 +81,7 @@ offsets.forEach((o, i) => { smpltmrItems.items = smpltmrItems.items.concat({ name: null, - get: () => ({ text: (o > 0 ? "+" : "") + o + " min.", img: null}), + get: () => ({ text: (o > 0 ? "+" : "") + o + " min.", img: smpltmrItems.img }), show: function() { smpltmrItems.items[i+1].emit("redraw"); }, hide: function () {}, run: function() { @@ -94,4 +94,4 @@ }); return smpltmrItems; -}) \ No newline at end of file +}) diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index 2191902de..71e793cc2 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.05", + "version": "0.06", "description": "A very simple app to start a timer.", "icon": "app.png", "tags": "tool,alarm,timer,clkinfo", From 487742f037f926f5a2e84fb5df0184b835e0b4a5 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 14 Dec 2022 17:24:31 +0000 Subject: [PATCH 281/342] 0.61: Fix regression where loading into messages app stops back from working (#2398) --- apps/messagegui/ChangeLog | 1 + apps/messagegui/app.js | 1 + apps/messagegui/metadata.json | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 36ec8191f..834d703ce 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -83,3 +83,4 @@ Don't write messages to flash until the app closes 0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) 0.60: Fix saving of removal messages if UI not open +0.61: Fix regression where loading into messages app stops back from working (#2398) diff --git a/apps/messagegui/app.js b/apps/messagegui/app.js index 0f3d90a9d..9f8a20219 100644 --- a/apps/messagegui/app.js +++ b/apps/messagegui/app.js @@ -370,6 +370,7 @@ function checkMessages(options) { } // If we have a new message, show it if ((toShow||options.showMsgIfUnread) && newMessages.length) { + delete newMessages[0].show; // stop us getting stuck here if we're called a second time showMessage(newMessages[0].id); // buzz after showMessage, so being busy during layout doesn't affect the buzz pattern if (global.BUZZ_ON_NEW_MESSAGE) { diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 5b1cb60c6..811f9baff 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -2,7 +2,7 @@ "id": "messagegui", "name": "Message UI", "shortName": "Messages", - "version": "0.60", + "version": "0.61", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From bc3ab8ef76f7d244fd5b36c80f0025574af19635 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sat, 26 Nov 2022 15:28:09 +0100 Subject: [PATCH 282/342] messagelist: new app --- apps/messagelist/ChangeLog | 1 + apps/messagelist/README.md | 69 ++ apps/messagelist/TODO.txt | 17 + apps/messagelist/app-icon.js | 1 + apps/messagelist/app.js | 1207 ++++++++++++++++++++++++++++++ apps/messagelist/app.png | Bin 0 -> 8988 bytes apps/messagelist/boot.js | 3 + apps/messagelist/lib.js | 246 ++++++ apps/messagelist/metadata.json | 28 + apps/messagelist/screenshot0.png | Bin 0 -> 19719 bytes apps/messagelist/screenshot1.png | Bin 0 -> 20953 bytes apps/messagelist/screenshot2.png | Bin 0 -> 20743 bytes apps/messagelist/screenshot3.png | Bin 0 -> 16791 bytes apps/messagelist/settings.js | 139 ++++ bin/sanitycheck.js | 1 + 15 files changed, 1712 insertions(+) create mode 100644 apps/messagelist/ChangeLog create mode 100644 apps/messagelist/README.md create mode 100644 apps/messagelist/TODO.txt create mode 100644 apps/messagelist/app-icon.js create mode 100644 apps/messagelist/app.js create mode 100644 apps/messagelist/app.png create mode 100644 apps/messagelist/boot.js create mode 100644 apps/messagelist/lib.js create mode 100644 apps/messagelist/metadata.json create mode 100644 apps/messagelist/screenshot0.png create mode 100644 apps/messagelist/screenshot1.png create mode 100644 apps/messagelist/screenshot2.png create mode 100644 apps/messagelist/screenshot3.png create mode 100644 apps/messagelist/settings.js mode change 100644 => 100755 bin/sanitycheck.js diff --git a/apps/messagelist/ChangeLog b/apps/messagelist/ChangeLog new file mode 100644 index 000000000..759f68777 --- /dev/null +++ b/apps/messagelist/ChangeLog @@ -0,0 +1 @@ +0.01: New app! \ No newline at end of file diff --git a/apps/messagelist/README.md b/apps/messagelist/README.md new file mode 100644 index 000000000..776d0d0e6 --- /dev/null +++ b/apps/messagelist/README.md @@ -0,0 +1,69 @@ +# Message List + +Display messages inline as a single list: +Displays one message at a time, if it doesn't fit on the screen you can scroll +up/down. When you reach the bottom, you can scroll on to the next message. + +## Installation +**First** uninstall the default [Message UI](/?id=messagegui) app (`messagegui`, +not the library!). +Then install this app. + +## Screenshots + +### Main menu: +![Screenshot](screenshot0.png) + +### Unread message: +![Screenshot](screenshot1.png) +The chevrons are hints for swipe actions: +- Swipe right to go back +- Swipe left for the message-actions menu +- Swipe down to show the previous message: We are currently viewing message 2 of 2, + so message 1 is "above" this one. + +### Long (read) message: +![Screenshot](screenshot2.png) +The button is disabled until you scroll all the way to the bottom. + +### Music: +![Screenshot](screenshot3.png) +Minimal setup: album name and buttons disabled through settings. +Swipe for next/previous song, tap to pause/resume. + +## Settings + +### Interface +* `Font size` - The font size used when displaying messages/music. +* `On Tap` - If messages are too large to fit on the screen, tapping the screen scrolls down. + This is the action to take when tapping a message after reaching the bottom: + - `Message menu`: Open menu with message actions + - `Dismiss`: Dismiss message right away + - `Back`: Go back to clock/main menu + - `Nothing`: Do nothing +* `Dismiss button` - Show inline button to dismiss message right away + +### Behaviour +* `Vibrate` - The pattern of buzzes when a new message is received. +* `Vibrate for calls` - The pattern of buzzes for incoming calls. +* `Vibrate for alarms` - The pattern of buzzes for (phone) alarms. +* `Repeat` - How often buzzes repeat - the default of 4 means the Bangle will buzz every 4 seconds. +* `Unread timer` - When a new message is received the Messages app is opened. + If there is no user input for this amount of time then the app will exit and return to the clock. +* `Auto-open` - Automatically open app when a new message arrives. +* `Respect quiet mode` - Prevent auto-opening during quiet mode. + +### Music +* `Auto-open` - Automatically open app when music starts playing. +* `Always visible` - Show "music" in the main menu even when nothing is playing. +* `Buttons` - Show `previous`/`play/pause`/`next` buttons on music screen. +* `Show album` - Display album names? + + +### Util +* `Delete all` - Erase all messages. + + +## Attributions + +Some icons used in this app are from https://icons8.com diff --git a/apps/messagelist/TODO.txt b/apps/messagelist/TODO.txt new file mode 100644 index 000000000..3a6d7b664 --- /dev/null +++ b/apps/messagelist/TODO.txt @@ -0,0 +1,17 @@ +## Nice to have: +* Add labels to B1 music HW buttons +* Add volume buttons to B2 music screen (when controls are enabled) +* Draw messages ourselves instead of piling hacks on Layout +* Make sure all icons are 24x24px: icon sizes affect layout +* Check/optimize layout for B1, other fonts (scrolling for just 5px is a shame) + +## Wishlist: +* Option to swipe-dismiss (instead of action menu) +* Maybe refactor showGrid() out into a general-use module? + +* Message replies (needs `android` support) +* Customize replies +* Custom replies (i.e. `textinput`) +* Hooks to add custom replies/actions, + e.g. external code could add "Send intent" option to Home Assistant messages + Maybe just use this for all replies, so we don't hardcode anything in "messages"? diff --git a/apps/messagelist/app-icon.js b/apps/messagelist/app-icon.js new file mode 100644 index 000000000..6ed3c1141 --- /dev/null +++ b/apps/messagelist/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///rkcAYP9ohL/ABMBqoAEoALDioLFqgLDBQoABERIkEBZcFBY9QBed61QAC1oLF7wLD24LF24LD7wLF1vqBQOrvQLFA4IuC9QLFD4IuC1QLGGAQOBBYwgBEwQLHvQBBEZHVq4jI7wWBHY5TLNZaDLTZazLffMBBY9ABZsABY4KCgEVBQtUBYYkGEQYA/AAwA=")) diff --git a/apps/messagelist/app.js b/apps/messagelist/app.js new file mode 100644 index 000000000..c10ac726d --- /dev/null +++ b/apps/messagelist/app.js @@ -0,0 +1,1207 @@ +/* MESSAGES is a list of: + {id:int, + src, + title, + subject, + body, + sender, + tel:string, + new:true // not read yet + } +*/ + +/* For example for maps: + +// a message +{"t":"add","id":1575479849,"src":"Hangouts","title":"A Name","body":"message contents"} +// maps +{"t":"add","id":1,"src":"Maps","title":"0 yd - High St","body":"Campton - 11:48 ETA","img":"GhqBAAAMAAAHgAAD8AAB/gAA/8AAf/gAP/8AH//gD/98B//Pg/4B8f8Afv+PP//n3/f5//j+f/wfn/4D5/8Aef+AD//AAf/gAD/wAAf4AAD8AAAeAAADAAA="} +// call +{"t":"add","id":"call","src":"Phone","name":"Bob","number":"12421312",positive:true,negative:true} +*/ +{ + const B2 = process.env.HWVERSION>1, // Bangle.js 2? + RIGHT = 1, LEFT = -1, // swipe directions + UP = -1, DOWN = 1; // updown directions + const Layout = require("Layout"); + + const settings = () => require("messagegui").settings(); + const fontTiny = "6x8"; // fixed size, don't use this for important things + let fontNormal; + // setFont() is also called after we close the settings screen + const setFont = function() { + const fontSize = settings().fontSize; + if (fontSize===0) // small + fontNormal = g.getFonts().includes("6x15") ? "6x15" : "6x8:2"; + else if (fontSize===2) // large + fontNormal = g.getFonts().includes("6x15") ? "6x15:2" : "6x8:4"; + else // medium + fontNormal = g.getFonts().includes("12x20") ? "12x20" : "6x8:3"; + }; + setFont(); + + let active, back; // active screen, last active screen + + /// List of all our messages + let MESSAGES; + const saveMessages = function() { + const noSave = ["alarm", "call", "music"]; // assume these are outdated once we close the app + noSave.forEach(id => remove({id: id})); + require("messages").write(MESSAGES + .filter(m => m.id && !noSave.includes(m.id)) + .map(m => { + delete m.show; + return m; + }) + ); + }; + const uiRemove = function() { + if (musicTimeout) clearTimeout(musicTimeout); + layout = undefined; + Bangle.removeListener("message", onMessage); + saveMessages(); + clearUnreadStuff(); + delete Bangle.appRect; + }; + try { + MESSAGES = require("messages").getMessages(); + // Apply fast loaded messages + (Bangle.MESSAGES || []).forEach(m => require("messages").apply(m, MESSAGES)); + delete Bangle.MESSAGES; + // Write them back to storage when we're done + E.on("kill", saveMessages); + } catch(e) { + g.reset().clear(); + E.showPrompt(/*LANG*/"Message file corrupt, erase all messages?", {title:/*LANG*/"Delete All Messages"}).then(isYes => { + // We are troubleshooting, so do a clean "load" in both cases (instead of Bangle.load) + if (isYes) { // OK: erase message file and reload this app + require("messages").clearAll(); + load("messagelist.app.js"); + } else { + load(); // well, this app won't work... let's go back to the clock + } + }); + } + + const setUI = function(options, cb) { + options = Object.assign({remove: () => uiRemove()}, options); + Bangle.setUI(options, cb); + Bangle.on("message", onMessage); + }; + + const remove = function(msg) { + if (msg.id==="call") call = undefined; + else if (msg.id==="map") map = undefined; + else if (msg.id==="alarm") alarm = undefined; + else if (msg.id==="music") music = undefined; + else MESSAGES = MESSAGES.filter(m => m.id!==msg.id); + }; + const buzz = function(msg) { + return require("messages").buzz(msg.src); + }; + const show = function(msg) { + delete msg.show; // don't show this again + if (msg.id==="call") showCall(msg); + else if (msg.id==="map") showMap(msg); + else if (msg.id==="alarm") showAlarm(msg); + else if (msg.id==="music") showMusic(msg); + else showMessage(msg); + }; + + const onMessage = function(type, msg) { + if (msg.handled) return; + msg.handled = true; + switch(type) { + case "call": + return onCall(msg); + case "music": + return onMusic(msg); + case "map": + return onMap(msg); + case "alarm": + return onAlarm(msg); + case "text": + return onText(msg); + case "clearAll": + MESSAGES = []; + if (["messages", "menu"].includes(active)) showMenu(); + break; + default: + E.showAlert(/*LANG*/"Unknown message type:"+"\n"+type).then(goBack); + } + }; + Bangle.on("message", onMessage); + + const onCall = function(msg) { + if (msg.t==="remove") { + call = undefined; + return exitScreen("call"); + } + // incoming call: show it + call = msg; + buzz(call); + showCall(); + }; + const onAlarm = function(msg) { + if (msg.t==="remove") { + alarm = undefined; + return exitScreen("alarm"); + } + alarm = msg; + buzz(alarm); + showAlarm(); + }; + let musicTimeout; + const onMusic = function(msg) { + const hadMusic = !!music; + if (musicTimeout) clearTimeout(musicTimeout); + musicTimeout = undefined; + if (msg.t==="remove") { + music = undefined; + if (active==="main" && hadMusic) return showMain(); // refresh menu: remove "Music" entry (if not always visible) + else return exitScreen("music"); + } + + music = Object.assign({}, music, msg); + + // auto-close after being paused + if (music.state!=="play") musicTimeout = setTimeout(function() { + musicTimeout = undefined; + if (active==="music" && (!music || music.state!=="play")) Bangle.showClock(); + }, 60*1000); // paused for 1 minute + // auto-close after "playing" way beyond song duration (because "stop" messages don't seem to exist) + else musicTimeout = setTimeout(function() { + musicTimeout = undefined; + if (active==="music" && (!music || music.state==="play")) Bangle.showClock(); + }, 2*Math.max(music.dur || 0, 5*60)*1000); // playing: assume ended after twice song duration, or at least 10 minutes + + if (active==="music") showMusic(); // update music screen + else if (active==="main" && !hadMusic) { + if (settings().openMusic && music.state==="play" && music.track) showMusic(); + else showMain(); // refresh menu: add "Music" entry + } + }; + const onMap = function(msg) { + const hadMap = !!map; + if (msg.t==="remove") { + map = undefined; + if (back==="map") back = undefined; + if (active==="main" && hadMap) return showMain(); // refresh menu: remove "Map" entry + else return exitScreen("map"); + } + map = msg; + if (["map", "music"].includes(active)) showMap(); // update map screen, or switch away from music (not other screens) + else if (active==="main" && !hadMap) showMain(); // refresh menu: add "Map" entry + }; + const onText = function(msg) { + require("messages").apply(msg, MESSAGES); + const mIdx = MESSAGES.findIndex(m => m.id===msg.id); + if (!MESSAGES[mIdx]) if (back==="messages") back = undefined; + if (active==="main") showMain(); // update message count + if (MESSAGES.length===0) exitScreen("messages"); // removed last message + else if (active==="messages") showMessage(messageNum); + if (msg.new) buzz(msg); + if (active!=="call") {// don't switch away from incoming call + if (active!=="messages" || messageNum===mIdx) showMessage(mIdx); + } + if (active==="messages") drawFooter(); // update footer with new number of messages + }; + + const getImage = function(msg, def) { + // app icons, provided by `messages` app + return require("messageicons").getImage(msg); + }; + const getImageColor = function(msg, def) { + // app colors, provided by `messages` app + return require("messageicons").getColor(msg, {default: def}); + }; + const getIcon = function(icon) { + return require("messagegui").getIcon(icon); + }; + const getIconColor = function(icon) { + return require("messagegui").getColor(icon); + }; + + /* + * icons should be 24x24px with 1bpp colors and transparancy + */ + const getMessageImage = function(msg) { + if (msg.img) return atob(msg.img); + if (msg.id==="music") return getIcon("Music"); + if (msg.id==="back") return getIcon("Back"); + const s = (msg.src || "").toLowerCase(); + + return getImage(s, "notification"); + }; + + const showMap = function() { + setActive("map"); + delete map.new; + let m, distance, street, target, eta; + m = map.title.match(/(.*) - (.*)/); + if (m) { + distance = m[1]; + street = m[2]; + } else { + street = map.title; + } + m = map.body.match(/(.*) - (.*)/); + if (m) { + target = m[1]; + eta = m[2]; + } else { + target = map.body; + } + let layout = new Layout({ + type: "v", c: [ + {type: "txt", font: fontNormal, label: target, bgCol: g.theme.bg2, col: g.theme.fg2, fillx: 1, pad: 2}, + { + type: "h", bgCol: g.theme.bg2, col: g.theme.fg2, fillx: 1, c: [ + {type: "txt", font: "6x8", label: "Towards"}, + {type: "txt", font: fontNormal, label: street}, + ] + }, + { + type: "h", fillx: 1, filly: 1, c: [ + map.img ? {type: "img", src: () => atob(map.img), scale: 2} : {}, + { + type: "v", fillx: 1, c: [ + {type: "txt", font: fontNormal, label: distance || ""}, + ] + }, + ] + }, + {type: "txt", font: "6x8:2", label: eta} + ] + }); + layout.render(); + // go back on any input + setUI({ + mode: "custom", + back: goBack, + btn: b => { + if (B2 || b===2) goBack(); + }, + swipe: dir => { + if (dir===RIGHT) showMain(); + }, + }); + }; + + const toggleMusic = function() { + const mc = cmd => { + if (Bangle.musicControl) Bangle.musicControl(cmd); + }; + if (!music) { + music = {state: "play"}; + mc("play"); + } else if (music.state==="play") { + music.state = "pause"; + mc("pause"); + } else { + music.state = "play"; + mc("play"); + } + if (layout && layout.musicIcon) { + // musicIcon/musicToggle .src returns icon based on current music.state + layout.update(layout.musicIcon); + if (layout.musicToggle) layout.update(layout.musicToggle); + layout.render(); + } + }; + + const doMusic = function(action) { + if (!Bangle.musicControl) return; + Bangle.buzz(50); + if (action==="toggle") toggleMusic(); + else Bangle.musicControl(action); + }; + const showMusic = function() { + if (active!==music) setActive("music"); + if (!music) music = {track: "", artist: "", album: "", state: "pause"}; + delete music.new; + const w = Bangle.appRect.w-50; // title/album need to leave room for icon + let artist, album; + if (music.album && settings().showAlbum) { + // max 2 lines for artist/album + artist = g.setFont(fontNormal).wrapString(music.artist, w).slice(0, 2).join("\n"); + album = g.wrapString(music.album, w).slice(0, 2).join("\n"); + } else { + // no album: artist gets 3 lines + artist = g.setFont(fontNormal).wrapString(music.artist, w).slice(0, 3).join("\n"); + album = ""; + } + // place (subtitle) on a new line + let track = music.track.replace(/ \(/, "\n("); + track = g.wrapString(track, Bangle.appRect.w).slice(0, 5).join("\n"); + // "unknown" n/c/dur can show up as -1 + let num, dur; + if ("n" in music && music.n>0) { + num = "#"+music.n; + if ("c" in music && music.c>0) { + num += "/"+music.c; + } + num = {type: "txt", font: fontTiny, bgCol: g.theme.bg, label: num}; + } + if ("dur" in music && music.dur>0) { + dur = Math.floor(music.dur/60)+":"+(music.dur%60).toString().padStart(2, "0"); + dur = {type: "txt", font: fontTiny, bgCol: g.theme.bg, label: dur}; + } + let info; + if (num && dur) info = {type: "h", fillx: 1, c: [{fillx: 1}, dur, {fillx: 1}, num, {fillx: 1},]}; + else if (num) info = num; + else if (dur) info = dur; + else info = {}; + + layout = new Layout({ + type: "v", c: [ + { + type: "h", fillx: 1, bgCol: g.theme.bg2, col: g.theme.fg2, c: [ + { + id: "musicIcon", type: "img", pad: 10, bgCol: g.theme.bg2, col: g.theme.fg2 + , src: () => getIcon((music.state==="play") ? "music" : "pause") + }, + { + type: "v", fillx: 1, c: [ + {type: "txt", font: fontNormal, col: g.theme.fg2, bgCol: g.theme.bg2, label: artist, pad: 2, id: "artist"}, + album ? {type: "txt", font: fontNormal, col: g.theme.fg2, bgCol: g.theme.bg2, label: album, pad: 2, id: "album"} : {}, + ] + } + ] + }, + {type: "txt", halign: 0, font: fontNormal, bgCol: g.theme.bg, label: track, fillx: 1, filly: 1, pad: 2, id: "track"}, + settings().musicButtons ? { + type: "h", fillx: 1, c: [ + B2 ? {} : {width: 4}, + { + type: "btn", id: "previous", cb: () => doMusic("previous") + , src: () => getIcon("previous") + }, + {fillx: 1}, + { + type: "btn", id: "musicToggle", cb: () => doMusic("toggle") + , src: () => getIcon((music.state==="play") ? "pause" : "play") + }, + {fillx: 1}, + { + type: "btn", id: "next", cb: () => doMusic("next") + , src: () => getIcon("next") + }, + B2 ? {} : {width: 4}, + ] + } : {}, + info, + ] + }); + layout.render(); + let options = {mode: "updown"}; + // B1 with buttons: left hand side of screen is used for "previous" + if (B2 || !settings().musicButtons) options.back = goBack; + setUI(options, ud => { + if (ud) Bangle.musicControl(ud>0 ? "volumedown" : "volumeup"); + else { + if (B2 || settings().musicButtons) goBack(); // B1 left-hand touch is "previous", so we need a way to go back + else doMusic("toggle"); + } + }); + + Bangle.swipeHandler = dir => { + if (dir!==0) doMusic(dir===RIGHT ? "previous" : "next"); + }; + Bangle.on("swipe", Bangle.swipeHandler); + + if (Bangle.touchHandler) Bangle.removeListener("touch", Bangle.touchHandler); + if (settings().musicButtons) { + // visible buttons + // left = previous, middle = toggle, right = next + if (B2) Bangle.touchHandler = (_side, xy) => { + // accept touches on the whole bottom and pick the closest button + if (xy.y2*Bangle.appRect.w/3) doMusic("next"); + else doMusic("toggle"); + }; + else Bangle.touchHandler = (side) => { + if (side===1) doMusic("previous"); + if (side===2) doMusic("next"); + if (side===3) doMusic("toggle"); + }; + } else { + // no buttons: touch = toggle + // B2 setUI sets touchHandler, override that (we only want up/down swipes from the UI) + Bangle.touchHandler = (side, e) => { + // B1: side 1 (left) = back, B2: only toggle for e outside widget area + if ((!B2 && side>1) || (B2 && e.y>Bangle.appRect.y)) doMusic("toggle"); + }; + } + Bangle.on("touch", Bangle.touchHandler); + }; + + let layout; + + const clearStuff = function() { + delete Bangle.appRect; + layout = undefined; + setUI(); + g.reset().clearRect(Bangle.appRect); + }; + const setActive = function(screen, args) { + clearStuff(); + if (active && screen!==active) back = active; + if (screen==="messages") messageNum = args; + active = screen; + }; + /** + * Go back to previous screen, preserving history + */ + const goBack = function() { + if (back==="call" && call) showCall(); + else if (back==="map" && map) showMap(); + else if (back==="music" && music) showMusic(); + else if (back==="messages" && MESSAGES.length) showMessage(); + else if (back) showMain(); // previous screen was "main", or no longer valid + else Bangle.showClock(); // no previous screen: go back to clock + }; + /** + * Leave screen, and make sure goBack() won't take us there anymore; + * @param {string} screen + */ + const exitScreen = function(screen) { + if (back===screen) back = (active==="main") ? undefined : "main"; + if (active===screen) { + active = undefined; + goBack(); + } + }; + const showMain = function() { + setActive("main"); + let grid = {"": {title:/*LANG*/"Messages", align: 0, back: load}}; + if (call) grid[/*LANG*/"Incoming Call"] = {icon: "Phone", cb: showCall}; + if (alarm) grid[/*LANG*/"Alarm"] = {icon: "Alarm", cb: showAlarm}; + const unread = MESSAGES.filter(m => m.new).length; + if (unread) { + grid[unread+" "+/*LANG*/"New"] = {icon: "Unread", cb: () => showMessage(MESSAGES.findIndex(m => m.new))}; + grid[/*LANG*/"All"+` (${MESSAGES.length})`] = {icon: "Notification", cb: showMessage}; + } else { + const allLabel = MESSAGES.length+" "+(MESSAGES.length===1 ?/*LANG*/"Message" :/*LANG*/"Messages"); + if (MESSAGES.length) grid[allLabel] = {icon: "Notification", cb: showMessage}; + else grid[/*LANG*/"No Messages"] = {icon: "Neg", cb: load}; + } + if (unread { + E.showPrompt(/*LANG*/"Are you sure?", {title:/*LANG*/"Dismiss Read Messages"}).then(isYes => { + if (isYes) { + MESSAGES.filter(m => !m.new).forEach(msg => { + Bangle.messageResponse(msg, false); + remove(msg); + }); + } + showMain(); + }); + } + }; + } + if (map) grid[/*LANG*/"Map"] = {icon: "Map", cb: showMap}; + if (music || settings().alwaysShowMusic) grid[/*LANG*/"Music"] = {icon: "Music", cb: showMusic}; + grid[/*LANG*/"settings"] = {icon: "settings", cb: showSettings}; + showGrid(grid); + }; + const clamp = function(val, min, max) { + if (valmax) return max; + return val; + }; + /** + * Show grid of labeled buttons, + * + * items: + * { + * cb: callback, + * img: button image, + * icon: icon name, // string, use getIcon(icon) instead of img + * col: icon color, // optional: defaults to getColor(icon) + * } + * "" item is options: + * { + * title: string, + * back: callback, + * rows/cols: (optional) fit to this many columns/rows, omit for automatic fit + * align: bottom row alignment if items don't fit perfectly into a grid + * -1: left + * 1: right + * 0: left, but move final button to the right + * undefined: spread (can be unaligned with rest of grid!) + * } + * @param items + */ + const showGrid = function(items) { + clearStuff(); + const options = items[""] || {}, + back = options.back || items["< Back"]; + const keys = Object.keys(items).filter(k => k!=="" && k!=="< Back"); + let cols; + if (options.cols) { + cols = options.cols; + } else if (options.rows) { + cols = Math.ceil(keys.length/options.rows); + } else { + const rows = Math.round(Math.sqrt(keys.length)); + cols = Math.ceil(keys.length/rows); + } + + let l = {type: "v", c: []}; + if (options.title) { + l.c.push({id: "title", type: "txt", label: options.title, font: (B2 ? "12x20" : "6x8:2"), fillx: 1}); + } + const w = Bangle.appRect.w/cols, // set explicit width, because labels can stick out + bgs = [g.theme.bgH, g.theme.bg2], // background colors used for buttons + newRow = () => ({type: "h", filly: 1, c: []}); + let row = newRow(), + cbs = [[]]; // callbacks for Bangle.js 2 touchHandler below + keys.forEach(key => { + const item = items[key], + label = g.setFont(fontTiny).wrapString(key, w).join("\n"); + let color = "col" in item ? item.col : getIconColor(item.icon || "Unknown"); + if (color && bgs.includes(g.setColor(color).getColor())) color = undefined; // make sure button is not invisible + row.c.push({ + type: "v", pad: 2, width: w, c: [ + { + type: "btn", + src: item.img || (() => getIcon(item.icon || "Unknown")), + col: color, + cb: B2 + ? undefined // We handle B2 touches below + : () => setTimeout(item.cb), // prevent MEMORY error from running cb() inside the Layout touchHandler + }, + {height: 2}, + {type: "txt", label: label, font: fontTiny}, + ] + }); + if (B2) cbs[cbs.length-1].push(item.cb); + if (row.c.length>=cols) { + l.c.push(row); + row = newRow(); + if (B2) cbs.push([]); + } + }); + if (row.c.length) { + if (options.align!==undefined) { + const filler = {width: w*(cols-row.c.length)}; + if (options.align=== -1) row.c.unshift(filler); // left + else if (options.align===1) row.c.push(filler); // right + else if (options.align===0) row.c.splice(row.c.length-1, 0, filler); // left, but final item on right + } + l.c.push(row); + } + layout = new Layout(l, {back: back}); + layout.render(); + + if (B2) { + // override touchHandler: no need to hit buttons exactly, just pick the nearest + if (Bangle.touchHandler) Bangle.removeListener("touch", Bangle.touchHandler); + Bangle.touchHandler = (side, xy) => { + if (xy.y<=Bangle.appRect.y) return; // widgetbar: ignore + let rows = l.c.length, + y = Bangle.appRect.y, h = Bangle.appRect.h; + if (options.title) { + rows--; + y += layout.title.h; + h -= layout.title.h; + } + const r = clamp(Math.floor(rows*(xy.y-y)/h), 0, rows-1); // row (0-indexed) + let c; // column (0-indexed) + if (rcbs[r].length-2) return; // gap before final item + } else { // spread + c = clamp(Math.floor(cbs[r].length*(xy.x-Bangle.appRect.x)/Bangle.appRect.w), 0, cols-1); + } + } + if (r { + setFont(); + showMain(); + }); + }; + const showCall = function() { + setActive("call"); + delete call.new; + Bangle.setLocked(false); + Bangle.setLCDPower(1); + + const w = g.getWidth()-48, + lines = g.setFont(fontNormal).wrapString(call.title, w), + title = (lines.length>2) ? lines.slice(0, 2).join("\n")+"..." : lines.join("\n"); + const respond = function(accept) { + Bangle.buzz(50); + Bangle.messageResponse(call, accept); + remove(call); + call = undefined; + goBack(); + }; + let options = {}; + if (!B2) { + options.btns = [ + { + label:/*LANG*/"accept", + cb: () => respond(true), + }, { + label:/*LANG*/"ignore", + cb: goBack, + }, { + label:/*LANG*/"reject", + cb: () => respond(false), + } + ]; + } + + layout = new Layout({ + type: "v", c: [ + { + type: "h", fillx: 1, bgCol: g.theme.bg2, col: g.theme.fg2, c: [ + {type: "img", pad: 10, src: () => getIcon("phone"), col: getIconColor("phone")}, + { + type: "v", fillx: 1, c: [ + {type: "txt", font: fontTiny, label: call.src ||/*LANG*/"Incoming Call", bgCol: g.theme.bg2, col: g.theme.fg2, fillx: 1, pad: 2, halign: 1}, + title ? {type: "txt", font: fontNormal, label: title, bgCol: g.theme.bg2, col: g.theme.fg2, fillx: 1, pad: 2} : {}, + ] + }, + ] + }, + {type: "txt", font: fontNormal, label: call.body, fillx: 1, filly: 1, pad: 2, wrap: true}, + { + type: "h", fillx: 1, c: [ + // button callbacks won't actually be used: setUI below overrides the touchHandler set by Layout + {type: B2 ? "btn" : "img", src: () => getIcon("Neg"), cb: () => respond(false)}, + {fillx: 1}, + {type: B2 ? "btn" : "img", src: () => getIcon("Pos"), cb: () => respond(true)}, + ] + } + ] + }, options); + layout.render(); + setUI({ + mode: "custom", + back: goBack, + touch: (side, xy) => { + if (B2 && xy.y { + if (B2 || b===2) goBack(); + else if (b===1) respond(true); + else respond(false); + }, + swipe: dir => { + if (dir===RIGHT) showMain(); + }, + }); + }; + const showAlarm = function() { + // dismissing alarms doesn't seem to work, so this is simple */ + setActive("alarm"); + delete alarm.new; + Bangle.setLocked(false); + Bangle.setLCDPower(1); + + const w = g.getWidth()-48, + lines = g.setFont(fontNormal).wrapString(alarm.title, w), + title = (lines.length>2) ? lines.slice(0, 2).join("\n")+"..." : lines.join("\n"); + layout = new Layout({ + type: "v", c: [ + { + type: "h", fillx: 1, bgCol: g.theme.bg2, col: g.theme.fg2, c: [ + alarm.body ? {type: "img", pad: 10, src: () => getIcon("alarm"), col: getIconColor("alarm")} : {}, + {type: "txt", font: fontNormal, label: title ||/*LANG*/"Alarm", bgCol: g.theme.bg2, col: g.theme.fg2, fillx: 1, pad: 2, halign: 1}, + ] + }, + alarm.body + ? {type: "txt", font: fontNormal, label: alarm.body, fillx: 1, filly: 1, pad: 2, wrap: true} + : {type: "img", pad: 10, scale: 3, src: () => getIcon("alarm"), col: getIconColor("alarm")}, + ] + }); + layout.render(); + setUI({ + mode: "custom", + back: goBack, + btn: b => { + if (B2 || b===2) goBack(); + }, + swipe: dir => { + if (dir===RIGHT) showMain(); + }, + }); + }; + /** + * Send message response, and delete it from list + * @param {string|boolean} reply Response text, false to dismiss (true to open on phone) + */ + const respondToMessage = function(reply) { + const msg = MESSAGES[messageNum]; + if (msg) { + Bangle.messageResponse(msg, reply); + if (reply===false) remove(msg); + } + if (MESSAGES.length<1) goBack(); // no more messages + else showMessage((msg && reply===false) ? messageNum : messageNum+1); // show next message + }; + const showMessageActions = function() { + let title = MESSAGES[messageNum].title || ""; + if (g.setFont(fontNormal).stringMetrics(title).width>Bangle.appRect.w-(B2 ? 0 : 20)) { + title = g.wrapString("..."+title, Bangle.appRect.w-(B2 ? 0 : 20))[0].substring(3)+"..."; + } + clearStuff(); + let grid = { + "": { + title: title ||/*LANG*/"Message", + back: () => showMessage(messageNum), + cols: 3, // fit all replies on first row, dismiss on bottom + } + }; + // Text replies don't work (yet) + // grid[/*LANG*/"OK"] = {icon: "Ok", col: "#0f0", cb: () => respondToMessage("\u{1F44D}")}; // "Thumbs up" emoji + // grid[/*LANG*/"Nak"] = {icon: "Nak", col: "#f00", cb: () => respondToMessage("\u{1F44E}")}; // "Thumbs down" emoji + // grid[/*LANG*/"No Phone"] = {icon: "NoPhone", col: "#f0f", cb: () => respondToMessage("\u{1F4F5}")}; // "No Mobile Phones" emoji + + grid[/*LANG*/"Dismiss"] = {icon: "Trash", col: "#ff0", cb: () => respondToMessage(false)}; + showGrid(grid); + }; + /** + * Show message + * + * @param {number} [num=0] Message to show + * @param {boolean} [bottom=false] Scroll message to bottom right away + */ + let buzzing = false, moving = false, switching = false; + let h, fh, offset; + + /** + * draw (sticky) footer + */ + const drawFooter = function() { + // left hint: swipe from left for main menu + g.reset().clearRect(Bangle.appRect.x, Bangle.appRect.y2-fh, Bangle.appRect.x2, Bangle.appRect.y2) + .setFont(fontTiny) + .setFontAlign(-1, 1) // bottom left + .drawString( + "\0"+atob("CAiBACBA/EIiAnwA")+ // back + "\0"+atob("CAiBAEgkEgkSJEgA"), // >> + Bangle.appRect.x+(B2 ? 1 : 28), Bangle.appRect.y2 + ); + // center message count+hints: swipe up/down for next/prev message + const footer = ` ${messageNum+1}/${MESSAGES.length} `, + fw = g.stringWidth(footer); + g.setFontAlign(0, 1); // bottom center + if (B2 && messageNum>0 && offset<=0) + g.drawString("\0"+atob("CAiBAABBIhRJIhQI"), Bangle.appRect.x+Bangle.appRect.w/2-fw/2, Bangle.appRect.y2); // ^ swipe to prev + g.drawString(footer, Bangle.appRect.x+Bangle.appRect.w/2, Bangle.appRect.y2); + if (B2 && messageNum=h-(Bangle.appRect.h-fh)) + g.drawString("\0"+atob("CAiBABAoRJIoRIIA"), Bangle.appRect.x+Bangle.appRect.w/2+fw/2, Bangle.appRect.y2); // v swipe to next + // right hint: swipe from right for message actions + g.setFontAlign(1, 1) // bottom right + .drawString( + "\0"+atob("CAiBABIkSJBIJBIA")+ // << + "\0"+atob("CAiBAP8AAP8AAP8A"), // = ("hamburger menu") + Bangle.appRect.x2-(B2 ? 1 : 28), Bangle.appRect.y2 + ); + }; + const showMessage = function(num, bottom) { + if (num<0) num = 0; + if (!num) num = 0; // no number: show first + if (num>=MESSAGES.length) num = MESSAGES.length-1; + setActive("messages", num); + if (!MESSAGES.length) { + // I /think/ this should never happen... + return E.showPrompt(/*LANG*/"No Messages", { + title:/*LANG*/"Messages", + img: require("heatshrink").decompress(atob("kkk4UBrkc/4AC/tEqtACQkBqtUDg0VqAIGgoZFDYQIIM1sD1QAD4AIBhnqA4WrmAIBhc6BAWs8AIBhXOBAWz0AIC2YIC5wID1gkB1c6BAYFBEQPqBAYXBEQOqBAnDAIQaEnkAngaEEAPDFgo+IKA5iIOhCGIAFb7RqAIGgtUBA0VqobFgNVA")), + buttons: {/*LANG*/"Ok": 1} + }).then(showMain); + } + Bangle.setLocked(false); + Bangle.setLCDPower(1); + // only clear msg.new on user input + const msg = MESSAGES[messageNum]; // message + fh = 10; // footer height + offset = 0; + let oldOffset = 0; + const move = (dy) => { + offset = Math.max(0, Math.min(h-(Bangle.appRect.h-fh), offset+dy)); // clip at message height + dy = oldOffset-offset; // real dy + // move all elements to new offset + const offsetRecurser = function(l) { + if (l.y) l.y += dy; + if (l.c) l.c.forEach(offsetRecurser); + }; + offsetRecurser(layout.l); + oldOffset = offset; + draw(); + }; + const draw = () => { + g.reset() + .clearRect(Bangle.appRect.x, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y2-fh) + .setClipRect(Bangle.appRect.x, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y2-fh); + g.reset = () => g.setColor(g.theme.fg).setBgColor(g.theme.bg); // stop Layout resetting ClipRect + layout.render(); + if (layout.button && h>Bangle.appRect.h-fh && offset(Bangle.appRect.h-fh)) { + const sbh = (Bangle.appRect.h-fh)/h*(Bangle.appRect.h-fh), // scrollbar height + y1 = Bangle.appRect.y+offset/h*(Bangle.appRect.h-fh), y2 = y1+sbh; + g.setColor(g.theme.bg).drawLine(Bangle.appRect.x2, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y2-fh); + g.setColor(g.theme.fg).drawLine(Bangle.appRect.x2, y1, Bangle.appRect.x2, y2); + } + drawFooter(); + }; + const buzzOnce = () => { + if (buzzing) return; + buzzing = true; + Bangle.buzz(50).then(() => setTimeout(() => {buzzing = false;}, 500)); + }; + + layout = getMessageLayout(msg); + h = layout.l.h; // message height + if (bottom) move(h); // scrolling backwards: jump to bottom of message + else draw(); + const PAGE_SIZE = Bangle.appRect.h-fh; + const // shared B1/B2 handlers + back = () => { + delete msg.new; // we mark messages as read on any input + goBack(); + }, + swipe = dir => { + delete msg.new; + if (dir===RIGHT) showMain(); + else if (dir===LEFT) showMessageActions(); + }, + touch = (side, xy) => { + delete msg.new; + if (h<=Bangle.appRect.h-fh || offset>=h-(Bangle.appRect.h-fh)) { // already at bottom + // B2: check for button-press + // setUI overrides Layout listeners, so we need to check for button presses ourselves + if (B2 && layout.button) { + const b = layout.button; + // the button is at the bottom of the screen, so we accept touches all the way down + if (xy.x>=b.x && xy.y>=b.y && xy.x<=b.x+b.w /*&& xy.y<=b.y+b.h*/) return b.cb(); + } + if (B2 && xy.yBangle.appRect.h-fh && offset { + delete msg.new; + if (!switching) { + const dy = -e.dy; + if (dy>0) { // up + if (h>Bangle.appRect.h-fh && offset0) { + moving = true; // prevent scrolling right into prev message + move(dy); + } else if (messageNum>0) { // already at top: show prev + if (!moving) { // don't scroll right through to previous message + Bangle.buzz(30); + switching = true; // don't process any more drag events until we lift our finger + showMessage(messageNum-1, true); + } + } else { // already at top of first message + buzzOnce(); + } + } + } + if (!e.b) { + // touch end: we can swipe to another message (if we reached the top/bottom) or move the new message + moving = false; + switching = false; + } + }, + touch: touch, + }); + } else { // Bangle.js 1 + setUI({ + mode: "updown", + back: back, + }, dir => { + delete msg.new; + if (dir===DOWN) { + if (h>Bangle.appRect.h-fh && offset0) { + move(-PAGE_SIZE); + } else if (messageNum>0) { // top reached: show previous + Bangle.buzz(30); + showMessage(messageNum-1, true); + } else { + buzzOnce(); // already at top of first message + } + } else { // button + showMessageActions(); + } + }); + Bangle.swipeHandler = swipe; + Bangle.on("swipe", Bangle.swipeHandler); + Bangle.touchHandler = touch; + Bangle.on("touch", Bangle.touchHandler); + } // Bangle.js 1/2 + }; + /** + * Determine message layout information: size, fonts, and wrapped title/body texts + * + * @param msg + * @returns {{h: number, w: number, + * src: (string), + * title: (string), titleFont: (string), + * body: (string), bodyFont: (string)}} + */ + const getMessageLayoutInfo = function(msg) { + // header: [icon][title] + // [ src] + // + // But: no title? -> use src as title + let w, src = msg.src || "", + title = msg.title || "", + body = msg.body || "", + h = 0, // total height + th = 0, // title height + ih = 46; // icon height: // icon(24) + internal padding(20) + icon<->src spacer(2) + if (!title) { + title = src; + src = ""; + } + + // top bar + if (title) { + w = Bangle.appRect.w-59; // icon(24) + padding:left(5) + padding:btn-txt(5) + internal btn padding(20) + padding:right(5) + title = g.setFont(fontNormal).wrapString(title, w).join("\n"); + th += 2+g.stringMetrics(title).height; // 2px padding + } + if (src) { + w = 59; // icon(24) + padding:left(5) + padding:btn-txt(5) + internal btn padding(20) + padding:right(5) + src = g.setFont(fontTiny).wrapString(src, w).join("\n"); + ih += g.stringMetrics(src).height; + } + + h = Math.max(ih, th); // maximum of icon/title + + // body + w = Bangle.appRect.w-4; // padding(2x2) + body = g.setFont(fontNormal).wrapString(msg.body, w).join("\n"); + h += 4+g.stringMetrics(body).height; // padding(2x2) + + if (settings().button) h += 44; // icon(24) + padding(2x2) + internal btn padding(16) + + w = Bangle.appRect.w; + // always expand to -<(10x)footer> + h = Math.max(h, Bangle.appRect.h-10); + + return { + src: src, + title: title, + body: body, + h: h, + w: w, + }; + }; + + const getMessageLayout = function(msg) { + // Crafted so that on B2, with "medium" font, a message with + // icon + src + 2-line title + 2-line body + button + // fits exactly, i.e. no need for scrolling + const info = getMessageLayoutInfo(msg); + const hCol = msg.new ? g.theme.fgH : g.theme.fg2, + hBg = msg.new ? g.theme.bgH : g.theme.bg2; + + // lie to Layout library about available space + Bangle.appRect = Object.assign({}, Bangle.appRect, + {w: info.w, h: info.h, x2: Bangle.appRect.x+info.w-1, y2: Bangle.appRect.y+info.h-1}); + + // make sure icon is not invisible + let imageCol = getImageColor(msg); + if (g.setColor(imageCol).getColor()==hBg) imageCol = hCol; + + layout = new Layout({ + type: "v", c: [ + { + type: "h", fillx: 1, bgCol: hBg, col: hCol, c: [ + {width: 3}, + { + type: "v", c: [ + {type: "img", /*pad: 2,*/ src: () => getMessageImage(msg), col: imageCol}, + {height: 2}, + info.src ? {type: "txt", font: fontTiny, label: info.src, bgCol: hBg, col: hCol} : {}, + ] + }, + info.title ? {type: "txt", font: fontNormal, label: info.title, bgCol: hBg, col: hCol, fillx: 1, pad: 2} : {}, + {width: 3}, + ] + }, + {type: "txt", font: fontNormal, label: info.body, fillx: 1, filly: 1, pad: 2}, + {filly: 1}, + settings().button ? { + type: "h", c: [ + B2 ? {} : {fillx: 1}, // Bangle.js 1: touching right side = press button + {id: "button", type: "btn", pad: 2, src: () => getIcon("trash"), cb: () => respondToMessage(false)}, + ] + } : {}, + ] + }); + layout.update(); + delete Bangle.appRect; + return layout; + }; + + /** this is a timeout if the app has started and is showing a single message + but the user hasn't seen it (e.g. no user input) - in which case + we should start a timeout for settings().unreadTimeout to return + to the clock. */ + let unreadTimeout; + /** + * Stop auto-unload timeout and buzzing, remove listeners for this function + */ + const clearUnreadStuff = function() { + require("messages").stopBuzz(); + if (unreadTimeout) clearTimeout(unreadTimeout); + unreadTimeout = undefined; + ["touch", "drag", "swipe"].forEach(l => Bangle.removeListener(l, clearUnreadStuff)); + watches.forEach(w => clearWatch(w)); + watches = []; + }; + + let messageNum, // currently visible message + watches = [], // button watches + savedMusic = false; // did we find a stored "music" message when loading? +// special messages + let call, music, map, alarm; + /** + * Find special messages, and remove them from MESSAGES + */ + const findSpecials = function() { + let idx = MESSAGES.findIndex(m => m.id==="call"); + if (idx>=0) call = MESSAGES.splice(idx, 1)[0]; + idx = MESSAGES.findIndex(m => m.id==="music"); + if (idx>=0) { + music = MESSAGES.splice(idx, 1)[0]; + savedMusic = true; + } + idx = MESSAGES.findIndex(m => m.id==="map"); + if (idx>=0) map = MESSAGES.splice(idx, 1)[0]; + idx = MESSAGES.findIndex(m => m.src && m.src.toLowerCase().startsWith("alarm")); + if (idx>=0) alarm = MESSAGES.splice(idx, 1)[0]; + }; + if (MESSAGES!==undefined) { // only if loading MESSAGES worked + g.reset().clear(); + Bangle.loadWidgets(); + require("messages").toggleWidget(false); + Bangle.drawWidgets(); + findSpecials(); // sets global vars for special messages + // any message we asked to show? + const showIdx = MESSAGES.findIndex(m => m.show); + // any new text messages? + const newIdx = MESSAGES.findIndex(m => m.new); + + // figure out why the app was loaded + if (showIdx>=0) show(showIdx); + else if (call && call.new) showCall(); + else if (alarm && alarm.new) showAlarm(); + else if (map && map.new) showMap(); + else if (music && music.new && settings().openMusic) { + if (settings().alwaysShowMusic===undefined) { + // if not explicitly disabled, enable this the first time we see music + let s = settings(); + s.alwaysShowMusic = true; + require("Storage").writeJSON("messages.settings.json", s); + } + showMusic(); + } + // check for new message last: Maybe we already showed it, but timed out before + // if that happened, and we're loading for e.g. music now, we want to show the music screen + else if (newIdx>=0) { + showMessage(newIdx); + // auto-loaded for message(s): auto-close after timeout + let unreadTimeoutSecs = settings().unreadTimeout; + if (unreadTimeoutSecs===undefined) unreadTimeoutSecs = 60; + if (unreadTimeoutSecs) { + unreadTimeout = setTimeout(load, unreadTimeoutSecs*1000); + } + } else if (MESSAGES.length) { // not autoloaded, but we have messages to show + back = "main"; // prevent "back" from loading clock + showMessage(); + } else showMain(); + + // stop buzzing, auto-close timeout on input + ["touch", "drag", "swipe"].forEach(l => Bangle.on(l, clearUnreadStuff)); + (B2 ? [BTN1] : [BTN1, BTN2, BTN3]).forEach(b => watches.push(setWatch(clearUnreadStuff, b, false))); + } +} \ No newline at end of file diff --git a/apps/messagelist/app.png b/apps/messagelist/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6eae4bb9691a39f7239c11fbde094a34558d53e0 GIT binary patch literal 8988 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 G3;rJ{)jY%i literal 0 HcmV?d00001 diff --git a/apps/messagelist/boot.js b/apps/messagelist/boot.js new file mode 100644 index 000000000..994a2cfed --- /dev/null +++ b/apps/messagelist/boot.js @@ -0,0 +1,3 @@ +(function() { + Bangle.on("message", require("messagegui").messageListener); +})(); \ No newline at end of file diff --git a/apps/messagelist/lib.js b/apps/messagelist/lib.js new file mode 100644 index 000000000..33b6d9d69 --- /dev/null +++ b/apps/messagelist/lib.js @@ -0,0 +1,246 @@ +// Handle incoming messages while the app is not loaded +// The messages app overrides Bangle.messageListener +// (placed in separate file, so we don't read this all at boot time) +exports.messageListener = function(type, msg) { + if (msg.handled || (global.__FILE__ && __FILE__.startsWith("messagelist."))) return; // already handled/app open + // clean up, in case previous message didn't load the app after all + if (exports.loadTimeout) clearTimeout(exports.loadTimeout); + delete exports.loadTimeout; + delete exports.buzz; + const quiet = () => (require("Storage").readJSON("setting.json", 1) || {}).quiet; + /** + * Quietly load the app for music/map, if not already loading + */ + function loadQuietly(msg) { + if (exports.loadTimeout) return; // already loading + exports.loadTimeout = setTimeout(function() { + Bangle.load("messagelist.app.js"); + }, 500); + } + function loadNormal(msg) { + if (exports.loadTimeout) clearTimeout(exports.loadTimeout); // restart timeout + exports.loadTimeout = setTimeout(function() { + delete exports.loadTimeout; + // check there are still new messages (for #1362) + let messages = require("messages").getMessages(msg); + (Bangle.MESSAGES || []).forEach(m => require("messages").apply(m, messages)); + if (!messages.some(m => m.new)) return; // don't use `status()`: also load for new music! + // if we're in a clock, or it's important, open app + if (Bangle.CLOCK || msg.important) { + if (exports.buzz) require("messages").buzz(msg.src); + Bangle.load("messagelist.app.js"); + } + }, 500); + } + + /** + * Mark message as handled, and save it for the app + */ + const handled = () => { + if (!Bangle.MESSAGES) Bangle.MESSAGES = []; + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; + if (msg.t==="remove") require("messages").save(msg); + else msg.handled = true; + }; + /** + * Write messages to flash after all, when not laoding the app + */ + const saveToFlash = () => { + (Bangle.MESSAGES||[]).forEach(m=>require("messages").save(m)); + delete Bangle.MESSAGES; + } + + switch(type) { + case "music": + if (!Bangle.CLOCK) return; + // only load app if we are playing, and we know which song + if (msg.state!=="play" || !msg.title) return; + if (exports.openMusic===undefined) { + // only read settings for first music message + exports.openMusic = !!(exports.settings().openMusic); + } + if (!exports.openMusic) return; // we don't care about music + if (quiet()) return; + msg.new = true; + handled(); + return loadQuietly(); + + case "map": + handled(); + if (msg.t!=="remove" && Bangle.CLOCK) loadQuietly(); + else saveToFlash(); + return; + + case "text": + handled(); + if (exports.settings().autoOpen===false) return saveToFlash(); + if (quiet()) return saveToFlash(); + if (msg.t!=="add" || !msg.new || !(Bangle.CLOCK || msg.important)) { + // not important enough to load the app + if (msg.t==="add" && msg.new) require("messages").buzz(msg); + return saveToFlash(); + } + if (msg.t==="add" && msg.new) exports.buzz = true; + return loadNormal(msg); + + case "alarm": + if (quiet()<2) return saveToFlash(); + // fall through + case "call": + handled(); + exports.buzz = true; + return loadNormal(msg); + + // case "clearAll": do nothing + } +}; + +exports.settings = function() { + return Object.assign({ + // Interface // + fontSize: 1, + onTap: 0, // [Message menu, Dismiss, Back, Nothing] + button: true, + + // Behaviour // + vibrate: ":", + vibrateCalls: ":", + vibrateAlarms: ":", + repeat: 4, + vibrateTimeout: 60, + unreadTimeout: 60, + autoOpen: true, + + // Music // + openMusic: true, + // no default: alwaysShowMusic (auto-enabled by app when music happens) + showAlbum: true, + musicButtons: false, + + // Widget // + flash: true, + // showRead: false, + + // Utils // + }, + // fall back to default app settings if not set for messagelist + (require("Storage").readJSON("messages.settings.json", true) || {}), + (require("Storage").readJSON("messagelist.settings.json", true) || {})); +}; + +/** + * @param {string} icon Icon name + * @returns string Icon image string, for use with g.drawImage() + */ +exports.getIcon = function(icon) { + // TODO: icons should be 24x24px with 1bpp colors + switch(icon.toLowerCase()) { + // generic icons: + case "alert": + return atob("GBgBAAAAAP8AA//AD8PwHwD4HBg4ODwcODwccDwOcDwOYDwGYDwGYBgGYBgGcBgOcAAOOBgcODwcHDw4Hxj4D8PwA//AAP8AAAAA"); + case "alarm": + case "alarmclockreceiver": + return atob("GBjBAP////8AAAAAAAACAEAHAOAefng5/5wTgcgHAOAOGHAMGDAYGBgYGBgYGBgYGBgYDhgYBxgMATAOAHAHAOADgcAB/4AAfgAAAAAAAAA="); + case "back": // TODO: 22x22 + return atob("FhYBAAAAEAAAwAAHAAA//wH//wf//g///BwB+DAB4EAHwAAPAAA8AADwAAPAAB4AAHgAB+AH/wA/+AD/wAH8AA=="); + case "calendar": + return atob("GBiBAAAAAAAAAAAAAA//8B//+BgAGBgAGBgAGB//+B//+B//+B9m2B//+B//+Btm2B//+B//+Btm+B//+B//+A//8AAAAAAAAAAAAA=="); + case "mail": // TODO: 28x18 + case "sms message": + case "notification": + return atob("HBKBAD///8H///iP//8cf//j4//8f5//j/x/8//j/H//H4//4PB//EYj/44HH/Hw+P4//8fH//44///xH///g////A=="); + case "map": // TODO: 25x25, + return atob("GRmBAAAAAAAAAAAAAAIAYAHx/wH//+D/+fhz75w/P/4f//8P//uH///D///h3f/w4P+4eO/8PHZ+HJ/nDu//g///wH+HwAYAIAAAAAAAAAAAAAA="); + case "menu": + return atob("GBiBAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAAAAAP///////wAAAAAAAAAAAAAAAA=="); + case "music": // TODO: 22x22 + return atob("FhaBAH//+/////////////h/+AH/4Af/gB/+H3/7/f/v9/+/3/7+f/vB/w8H+Dwf4PD/x/////////////3//+A="); + case "nak": // TODO: 22x25 + return atob("FhmBAA//wH//j//+P//8///7///v//+///7//////////////v//////////z//+D8AAPwAAfgAB+AAD4AAPgAAeAAB4AAHAAA=="); + case "neg": // TODO: 22x22 + return atob("FhaBADAAMeAB78AP/4B/fwP4/h/B/P4D//AH/4AP/AAf4AB/gAP/AB/+AP/8B/P4P4fx/A/v4B//AD94AHjAAMA="); + case "next": + return atob("GBiBAAAAAAAAAAAAAAwAcB8A+B+A+B/g+B/4+B/8+B//+B//+B//+B//+B//+B//+B/8+B/4+B/g+B+A+B8A+AwAcAAAAAAAAAAAAA=="); + case "nophone": // TODO: 30x30 + return atob("Hh6BAAAAAAGAAAAHAAAADgAAABwADwA4Af8AcA/8AOB/+AHH/+ADv/8AB//wAA/HAAAeAAACOAAADHAAAHjgAAPhwAAfg4AAfgcAAfwOAA/wHAA/wDgA/gBwA/gA4AfAAcAfAAOAGAAHAAAADgAAABgAAAAA"); + case "ok": // TODO: 22x25 + return atob("FhmBAAHAAAeAAB4AAPgAA+AAH4AAfgAD8AAPwAD//+//////////////7//////////////v//+///7///v//8///gf/+A//wA=="); + case "pause": + return atob("GBiBAAAAAAAAAAAAAAOBwAfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AfD4AOBwAAAAAAAAAAAAA=="); + case "phone": // TODO: 23x23 + case "call": + return atob("FxeBABgAAPgAAfAAB/AAD+AAH+AAP8AAP4AAfgAA/AAA+AAA+AAA+AAB+AAB+AAB+OAB//AB//gB//gA//AA/8AAf4AAPAA="); + case "play": + return atob("GBiBAAAAAAAAAAAAAAcAAA+AAA/gAA/4AA/8AA//AA//wA//4A//8A//8A//4A//wA//AA/8AA/4AA/gAA+AAAcAAAAAAAAAAAAAAA=="); + case "pos": // TODO: 25x20 + return atob("GRSBAAAAAYAAAcAAAeAAAfAAAfAAAfAAAfAAAfAAAfBgAfA4AfAeAfAPgfAD4fAA+fAAP/AAD/AAA/AAAPAAADAAAA=="); + case "previous": + return atob("GBiBAAAAAAAAAAAAAA4AMB8A+B8B+B8H+B8f+B8/+B//+B//+B//+B//+B//+B//+B8/+B8f+B8H+B8B+B8A+A4AMAAAAAAAAAAAAA=="); + case "settings": // TODO: 20x20 + return atob("FBSBAAAAAA8AAPABzzgf/4H/+A//APnwfw/n4H5+B+fw/g+fAP/wH/+B//gc84APAADwAAAA"); + case "to do": + return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); + case "trash": + return atob("GBiBAAAAAAAAAAB+AA//8A//8AYAYAYAYAZmYAZmYAZmYAZmYAZmYAZmYAZmYAZmYAZmYAZmYAZmYAYAYAYAYAf/4AP/wAAAAAAAAA=="); + case "unknown": // TODO: 30x30 + return atob("Hh6BAAAAAAAAAAAAAAAAAAPwAAA/8AAB/+AAD//AAD4fAAHwPgAHwPgAAAPgAAAfAAAA/AAAD+AAAH8AAAHwAAAPgAAAPgAAAPgAAAAAAAAAAAAAAAAAAHAAAAPgAAAPgAAAPgAAAHAAAAAAAAAAAAAAAAAA"); + case "unread": // TODO: 29x24 + return atob("HRiBAAAAH4AAAf4AAB/4AAHz4AAfn4AA/Pz/5+fj/z8/j/n5/j/P//j/Pn3j+PPPx+P8fx+Pw/x+AF/B4A78RiP3xwOPvHw+Pcf/+Ox//+NH//+If//+B///+A=="); + default: //should never happen + return exports.getIcon("unknown"); + } +}; +/** + * @param {string} icon Icon + * @returns {string} Color to use with g.setColor() + */ +exports.getColor = function(icon) { + switch(icon.toLowerCase()) { + // generic colors, using B2-safe colors + case "alert": + return "#ff0"; + case "alarm": + return "#fff"; + case "calendar": + return "#f00"; + case "mail": + return "#ff0"; + case "map": + return "#f0f"; + case "music": + return "#f0f"; + case "neg": + return "#f00"; + case "notification": + return "#0ff"; + case "phone": + case "call": + return "#0f0"; + case "settings": + return "#000"; + case "sms message": + return "#0ff"; + case "trash": + return "#f00"; + case "unknown": + return g.theme.fg; + case "unread": + return "#ff0"; + default: + return g.theme.fg; + } +}; + +/** + * Launch GUI app with given message + * @param {object} msg + */ +exports.open = function(msg) { + if (msg && msg.id && !msg.show) { + // store which message to load + msg.show = 1; + } + + Bangle.load((msg && msg.new && msg.id!=="music") ? "messagelist.new.js" : "messagelist.app.js"); +}; diff --git a/apps/messagelist/metadata.json b/apps/messagelist/metadata.json new file mode 100644 index 000000000..7947e2db4 --- /dev/null +++ b/apps/messagelist/metadata.json @@ -0,0 +1,28 @@ +{ + "id": "messagelist", + "name": "Message List", + "version": "0.01", + "description": "Display notifications from iOS and Gadgetbridge/Android as a list", + "icon": "app.png", + "type": "app", + "tags": "tool,system", + "screenshots": [ + {"url": "screenshot0.png"}, + {"url": "screenshot1.png"}, + {"url": "screenshot2.png"}, + {"url": "screenshot3.png"} + ], + "supports": ["BANGLEJS","BANGLEJS2"], + "dependencies" : { "messageicons":"module" }, + "provides_modules": ["messagegui"], + "readme": "README.md", + "storage": [ + {"name":"messagelist.boot.js","url":"boot.js"}, + {"name":"messagegui","url":"lib.js"}, + {"name":"messagelist.app.js","url":"app.js"}, + {"name":"messagelist.settings.js","url":"settings.js"}, + {"name":"messagelist.img","url":"app-icon.js","evaluate":true} + ], + "data": [{"name":"messagelist.settings.json"}], + "sortorder": -9 +} diff --git a/apps/messagelist/screenshot0.png b/apps/messagelist/screenshot0.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f37c05339a18e22f99416b654884a8730e623e GIT binary patch literal 19719 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 literal 0 HcmV?d00001 diff --git a/apps/messagelist/screenshot1.png b/apps/messagelist/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..f4d4db9fa1e08faa61ae66dd8eb4ed9708d0dada GIT binary patch literal 20953 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 oTU`-?hP3%$;(j`?Rm^sEqj;q6)Fvoz!`Iz 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 updateSetting(setting, v) + }; + } + + function showIfMenu() { + const tapOptions = [/*LANG*/"Message menu",/*LANG*/"Dismiss",/*LANG*/"Back",/*LANG*/"Nothing"]; + E.showMenu({ + "": {"title": /*LANG*/"Interface"}, + "< Back": () => showMainMenu(), + /*LANG*/"Font size": { + value: 0|settings.fontSize, + min: 0, max: 2, + format: v => [/*LANG*/"Small",/*LANG*/"Medium",/*LANG*/"Large",/*LANG*/"Huge"][v], + onchange: v => updateSetting("fontSize", v) + }, + /*LANG*/"On Tap": { + value: settings.onTap, + min: 0, max: tapOptions.length-1, wrap: true, + format: v => tapOptions[v], + onchange: v => updateSetting("onTap", v) + }, + /*LANG*/"Dismiss button": toggler("button"), + }); + } + + function showBMenu() { + E.showMenu({ + "": {"title": /*LANG*/"Behaviour"}, + "< Back": () => showMainMenu(), + /*LANG*/"Vibrate": require("buzz_menu").pattern(settings.vibrate, v => updateSetting("vibrate", v)), + /*LANG*/"Vibrate for calls": require("buzz_menu").pattern(settings.vibrateCalls, v => updateSetting("vibrateCalls", v)), + /*LANG*/"Vibrate for alarms": require("buzz_menu").pattern(settings.vibrateAlarms, v => updateSetting("vibrateAlarms", v)), + /*LANG*/"Repeat": { + value: settings.repeat, + min: 0, max: 10, + format: v => v ? v+"s" :/*LANG*/"Off", + onchange: v => updateSetting("repeat", v) + }, + /*LANG*/"Vibrate timer": { + value: settings.vibrateTimeout, + min: 0, max: 240, step: 10, + format: v => v ? v+"s" :/*LANG*/"Forever", + onchange: v => updateSetting("vibrateTimeout", v) + }, + /*LANG*/"Unread timer": { + value: settings.unreadTimeout, + min: 0, max: 240, step: 10, + format: v => v ? v+"s" :/*LANG*/"Off", + onchange: v => updateSetting("unreadTimeout", v) + }, + /*LANG*/"Auto-open": toggler("autoOpen"), + }); + } + + function showMusicMenu() { + E.showMenu({ + "": {"title": /*LANG*/"Music"}, + "< Back": () => showMainMenu(), + /*LANG*/"Auto-open": toggler("openMusic"), + /*LANG*/"Always visible": toggler("alwaysShowMusic"), + /*LANG*/"Buttons": toggler("musicButtons"), + /*LANG*/"Show album": toggler("showAlbum"), + }); + } + + function showWidMenu() { + E.showMenu({ + "": {"title": /*LANG*/"Widget"}, + "< Back": () => showMainMenu(), + /*LANG*/"Flash icon": toggler("flash"), + // /*LANG*/"Show Read": toggler("showRead"), + }); + } + + function showUtilsMenu() { + let m = E.showMenu({ + "": {"title": /*LANG*/"Utilities"}, + "< Back": () => showMainMenu(), + /*LANG*/"Delete all": () => { + E.showPrompt(/*LANG*/"Are you sure?", + {title:/*LANG*/"Delete All Messages"}) + .then(isYes => { + if (isYes) require("messages").write([]); + showUtilsMenu(); + }); + } + }); + } + + function showMainMenu() { + E.showMenu({ + "": {"title": inApp ?/*LANG*/"Settings" :/*LANG*/"Messages"}, + "< Back": back, + /*LANG*/"Interface": () => showIfMenu(), + /*LANG*/"Behaviour": () => showBMenu(), + /*LANG*/"Music": () => showMusicMenu(), + /*LANG*/"Widget": () => showWidMenu(), + /*LANG*/"Utils": () => showUtilsMenu(), + }); + } + + showMainMenu(); +}); diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js old mode 100644 new mode 100755 index 838f99895..82b2896b8 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -94,6 +94,7 @@ const INTERNAL_FILES_IN_APP_TYPE = { // list of app types and files they SHOULD var KNOWN_WARNINGS = [ "App gpsrec data file wildcard .gpsrc? does not include app ID", "App owmweather data file weather.json is also listed as data file for app weather", + "App messagegui storage file messagegui is also listed as storage file for app messagelist", ]; function globToRegex(pattern) { From c0b7ccf94950db883b91ba7ec0bbcd2de0eab20a Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Wed, 14 Dec 2022 20:51:33 +0100 Subject: [PATCH 283/342] messagelist: no fast unloading Disabled because it is leaking memory (and we don't know why) --- apps/messagelist/app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/messagelist/app.js b/apps/messagelist/app.js index c10ac726d..ebd5d4217 100644 --- a/apps/messagelist/app.js +++ b/apps/messagelist/app.js @@ -63,6 +63,7 @@ clearUnreadStuff(); delete Bangle.appRect; }; + const quitApp = () => load(); // TODO: revert to Bangle.showClock after fixing memory leaks try { MESSAGES = require("messages").getMessages(); // Apply fast loaded messages @@ -167,12 +168,12 @@ // auto-close after being paused if (music.state!=="play") musicTimeout = setTimeout(function() { musicTimeout = undefined; - if (active==="music" && (!music || music.state!=="play")) Bangle.showClock(); + if (active==="music" && (!music || music.state!=="play")) quitApp(); }, 60*1000); // paused for 1 minute // auto-close after "playing" way beyond song duration (because "stop" messages don't seem to exist) else musicTimeout = setTimeout(function() { musicTimeout = undefined; - if (active==="music" && (!music || music.state==="play")) Bangle.showClock(); + if (active==="music" && (!music || music.state==="play")) quitApp(); }, 2*Math.max(music.dur || 0, 5*60)*1000); // playing: assume ended after twice song duration, or at least 10 minutes if (active==="music") showMusic(); // update music screen @@ -460,7 +461,7 @@ else if (back==="music" && music) showMusic(); else if (back==="messages" && MESSAGES.length) showMessage(); else if (back) showMain(); // previous screen was "main", or no longer valid - else Bangle.showClock(); // no previous screen: go back to clock + else quitApp(); // no previous screen: go back to clock }; /** * Leave screen, and make sure goBack() won't take us there anymore; From 9fd4964495775aee694d5abc5581f6873d6c6c9f Mon Sep 17 00:00:00 2001 From: dapgo Date: Wed, 14 Dec 2022 21:59:50 +0100 Subject: [PATCH 284/342] widhwbttm (hw stats) A new bottom widget to show free mem and other stats --- apps/widhwbttm/Changelog | 2 ++ apps/widhwbttm/README.md | 30 +++++++++++++++++++++ apps/widhwbttm/metadata.json | 15 +++++++++++ apps/widhwbttm/widhwbttm.info | 1 + apps/widhwbttm/widhwbttm.png | Bin 0 -> 3763 bytes apps/widhwbttm/widhwbttm.ss1.jpg | Bin 0 -> 43280 bytes apps/widhwbttm/widhwbttm.ss2.jpg | Bin 0 -> 39727 bytes apps/widhwbttm/widhwbttm.wid.js | 45 +++++++++++++++++++++++++++++++ 8 files changed, 93 insertions(+) create mode 100644 apps/widhwbttm/Changelog create mode 100644 apps/widhwbttm/README.md create mode 100644 apps/widhwbttm/metadata.json create mode 100644 apps/widhwbttm/widhwbttm.info create mode 100644 apps/widhwbttm/widhwbttm.png create mode 100644 apps/widhwbttm/widhwbttm.ss1.jpg create mode 100644 apps/widhwbttm/widhwbttm.ss2.jpg create mode 100644 apps/widhwbttm/widhwbttm.wid.js diff --git a/apps/widhwbttm/Changelog b/apps/widhwbttm/Changelog new file mode 100644 index 000000000..7c9547033 --- /dev/null +++ b/apps/widhwbttm/Changelog @@ -0,0 +1,2 @@ +0.01: Fork of widclkbttm (Digital clock bttom widget) + diff --git a/apps/widhwbttm/README.md b/apps/widhwbttm/README.md new file mode 100644 index 000000000..2427ff818 --- /dev/null +++ b/apps/widhwbttm/README.md @@ -0,0 +1,30 @@ +# hw stats bttom widget (bottom widget area) +A basic HW/performance monitor widget that shows on real time some technical info, such as free mem, free storage, trash mem, files, FW version. Also allows to test the unfrequently used widget bottom area. + +Compatible with BangleJS1,BangleJS2,and EMSCRIPTENx emulators + +forked from widclkbttm (Digital clock bttom widget) + + +## Photo + +Example of usage + +![](widhwbttm.ss1.jpg) +![](widhwbttm.ss2.jpg) + + + + +## Usage + +Upload the widget file +Open an app (not a clock/watchface) that supports displaying widgets (included the bottom one) +Different info is refreshed following a predefined frequency and sequence. + + +## Support + +This app is so basic that probably the easiest is to just edit the code ;) + +Otherwise you can contact me [here](https://github.com/dapgo/my_espruino_smartwatch_things) \ No newline at end of file diff --git a/apps/widhwbttm/metadata.json b/apps/widhwbttm/metadata.json new file mode 100644 index 000000000..053be5a36 --- /dev/null +++ b/apps/widhwbttm/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "widhwbttm", + "name": "HW stats (Bottom) widget", + "shortName": "Digital clock Bottom Widget", + "version": "0.01", + "description": "Displays technical info and mem stats in the bottom of the screen (may not be compatible with some apps)", + "icon": "widhwbttm.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"widhwbttm.wid.js","url":"widhwbttm.wid.js"} + ] +} diff --git a/apps/widhwbttm/widhwbttm.info b/apps/widhwbttm/widhwbttm.info new file mode 100644 index 000000000..c92adad11 --- /dev/null +++ b/apps/widhwbttm/widhwbttm.info @@ -0,0 +1 @@ +{"id":"widhwbttm.wid.js","name":"hw stats bttom widget","type":"widget","version":"0.01","files":"widhwbttm.info,widhwbttm.wid.js"} \ No newline at end of file diff --git a/apps/widhwbttm/widhwbttm.png b/apps/widhwbttm/widhwbttm.png new file mode 100644 index 0000000000000000000000000000000000000000..82ad43795b8a80e308ca6001c251350afb33cd1d GIT binary patch literal 3763 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

FYNo*gFdFG2fy~uBHJA*qcRG+JUM!b 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 literal 0 HcmV?d00001 diff --git a/apps/widhwbttm/widhwbttm.ss2.jpg b/apps/widhwbttm/widhwbttm.ss2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7556832b28a8beca7f65b987ebdd8fea431e5f1f GIT binary patch literal 39727 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

5z?RwLAHC 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

4&g&YPzGPy5lc> z^_&Z^h}fe`zN}wORimnE8oxnym63wyr3y+$3bxwO?N(Q>ca+>Dj@Q~)&Yz*}Tb`|@ ztRBfU*gDhn#x?1{CJeorF-MbSS=WV|zMBO0 zlU{zvS%k#U$7kjvl}n+P(I*XUWzro`Ue2UdjR1?1LAS zlDDoyciXf4^)rO{*aiSl%YL`#GGm>6U3)YuZ%f1C=7Qs6XZFu;wK0P8!y05(#Az{T zl+4+R{-mbfH+{IASz%YN&F2OG2M#yLIHyC+Um4OMS%iiiw_Im;(9a4xOXnq19~p8m-kvYQ zT|uTNK?<*M;vY(uQrD_6W1K#WW|;s`Y^Vk}!Qa?6*nFzL6jpWD$-QjZ z^kb7#dU?4Q90bJ>2zO{iA&&Iw#%#)f(8_bo{H34dx*m5-EkkYQb$dqr0x&E?KXNW; zv5Thb&0u-x{uP*@&x3b7-9hM#u7|%s6Ovsd34!=!?D1LN)^6Vt;3IH=Bl-3I;??_VJS!Z04B)DDe5o_oCP*|V2}2<+5qOTPsWH} zNc&z4EOY+`_L6Bkp%69As8g2T5bYEjozDW}!Ak3!c^9wT)TM!5vTRvD&*I2u>2VBK zltU^gVq?WJ<98XQHyRhJ4xbkUzM%r}zGkgC`$(ayO5Mwwu=KyIvdNuVuaZUMoiUt; z72BxO*tXE}iA?`04v1$ZTby$=0(vN-{j}D#SMFrQDEe8GXpDV%>MrGJ`~-D#8c}Tw zoVh^jo~C)B;Gjj*KKG!-apCL~g*>k0usd7`h54b858GTWOfx=b<+ejG21Y(Jb>E9g zgC|V;bKE*vb4pjEZetR2^z-{?I5Wp$gTB(G1yiNHF_FjdvBix4b5|6+?wJ*jP5#o$ z*{YP>Mg8cHYf3Es(y`>;r?D6PS{^=5;VhIxJgiKf5w|EkpqE}jY?M}?E~JIqMvnw# ztmaSXjcDHHq%wL?J2wWl{we03T8Hb!ry`Zyx_pW<@=j@JUWhV~5JGxl()ASNSqoQB zk%&%jcMWO|RMJ3`9tCy6pAJkLU;LAd0 z0f|rFeqmoK<;!>e7_V%+7qQ zs45wHz7IWGYBYGQ7sc0HDdSVLF*yTz+5aEe-C?j|m20t?9r$J;MN?vP{l9-P*>*}`{(Ablc*E>(XDwg`b!rhKN_WQ*KI8=5Bw9?ZfbKWIGo@LFkoIWg)70Z9G zqz`dfy;bx4qj2yzBNc>b2blLYW}8cyw3C}g|LjozBEEb0LSKRmIM<$*Jhb`w};%1#p*MA*rl^u@H zX$iM+O*LS)BO~h1nqLo4c^!MlxPCwV^9UmmD9_IeZj*YoGy)K(fu-B8X5VWGpR3;m zcgEfB{of2<+0yQzU#;-?U7Oc0#UCuK%Kb-{?2sh(tjQu4nDVt*+5?XM3}kPK+e(Wb zVx;B%HrJf}#~c9FPk`BLVcgcIC*i`b& zIqL(Ji_vlWr>Dn7@D~k*>loL<*H4jW>A>9{aWq%j^M3&s7wG75{p<>mvtzH)m4KYc ztWP*U&Xz7)1%EE}3dx5*?D|xN{{Xw|%}5pyu0T9-L&>+->FH3cq_{mh8jwDI=*(ew6SZjbA8Rzt>&nDCUd8i&@K5X&nQN6)w3YH}I&r?7SGUK1& zU(UF{i~bef!4aoB*0OF?tQDt{{U;vcm5H-fc`DN z53}rgJ>0SC;{e9PQvlHCk&+$!3Q>V{Sh$zhW_44XzfEWWfE*BHVY{JwCjewWI5e zVJ*DRZxgMV`4&&Q{N(P()c5?WnpGOv70RCHFD8jFP59icAydvd$9lCVhHf!2+S{Q3 zkO$orqMEx%vO>}PuOX0Uf~4`+^8BjYTHKP{OvHc3(v_2Tc^S{$$g*gy;CUQcP6>WWapn^WcCS0%e_@zzCM>y-&wnn8fx|zOK zmPW$@GoE^9@a^wWeZJtn(7)<(7ij1|&T0E;6Uv)0AHyuxts>y6uo?9A{HnFjhvp2? zvh8K+Ju9TR)nztqZRMeifcy+&o~PHnSGbzv%3FyQaklpzS&8LB>By*==F2Wr3PCCKTGL2T|$#=>F4kyH-81 z#^ulfj1!KZjVD@0aGDWRaV@qy93jXNAs5r%Ms_%1gaID(pzeJG6iF*Pth_Z}au7zqUyQ%E-Sf zFA0&`rau8m9J!n_$MSCN`2JNq?G?&l$)?R3@Ar<^L(<~Pw|11 z-@o`(Vv=bdClSr&C(Ji`s3+;xx(@~1!=`FNNLZ^fRQ2?_Pjg zLGLMj*>0zfc%?wA7t6bjPDklN0?vIs>Cvta0ew2+lQfAU9PP$B_M=nzEu-7hCxJ@o z@{gB~e)RoCTkLT+X50_fqFWUkmbCZVrl%b4&m33NpR$xpx)SH^?#ko8`Tqbt>*hTv zcUh|Xo}Rw>{447Z*}q9`H^WxDzEI1;_vf$q{(Zb`+xRx~J&dwHygjSzVjP>@at2Zn1@<&fN+#Rt zN3iKoB%6+XdFetfM_&HDYI+rJ$Jvvg-H^Sws_g8E{{YscH+$Fv+;dEs%F2HBeFvp| z0prMX$&-wA>&-&ad2g0HV}y>w_Br^Ws7|uUGH8Oz1w+y9?yc;%A7xvT z-|!#6`ox!6ZzzFg)zq);(n#_^m18Y12k6l&bN$-djr0gy9Zr$qYZ)x#+qs>Sa}s)y*nX9xb){IzG(t$(mPp$f?0NpV=bEXd+DI)n zsAW6w2nXiI4hQG|0M@H9#u8Dykl~EUkhn+X;zE&d`&gdqaDX+ zLBAk%>UNyxjlTJ-I)x<=)F0l zkX>82X(MgXuSN%OY<2$tAXXBU-r*HuPwWjeYOfcU=6P`b@lF+0%Mro!#xd`c*jBfR zd^e`qUFb<2y|!<>>z9FWOe$QWtDeUToxj~>Jy_$OiaUh5TxWAk7=k|W9X`KGm1Me> zX&tlX1GJOZoRWVWVn>&MOs>l7BK#2RH?Q2d@}8{{R9iD|>5eJu2&LAiGKAqiy+_PI7-gUY|^g zjp4ff&bpaZm6d@c<+hF4A54-5HD+50t?!_XOBms{5)5#^GK1;^fxBQ|b0^rD;*B#w40%4jbjljPgfp_8-%%QzIQmX+P@# zC)kw-AA!v*(MoTmY;D}@8iIIJkLk&xE$$X7$D-S%jI%5Y=B)c;!N-`tDf)WWy{?C6 zYkhvJ40{SJitW)lWCQ9lN2eL~s+TOtRRCSK>fj7yb?g3m)t5=y!X@3cq&u7z>USKB zemJL6OrBKP1il@H?hADC5G;kAhCblwlaAd#N~;c+Yc7|0GeQeXBF7$m2pRlUhU~)lW;ektdBqaU4y6PX~tQJ*h^cHRbn;w%!=BpHjQs z3dgl_ryM3p$rsi*&%58pDVZP%5 zhI7~v`DgR0_KjhPv?(nj>_6=d&pUr4#~8VKZuNHKZ)nu)>SJvvmdia z!`1vdXKAXs-8c|_BF42s(qp4 z^Au+CK(39+2jBGOsQ9x|n%hf~-I=!S$X?y~{CWJ3y=_Kq)J+ahRa;dIQEO zp?42{gB0dPSI0%qCFb&ZDC%y z!0*z&Z!)dTK2^~AEWVAS%+07@8RI-uk+#qZwlT&J`TqbsRao0&V0_EzkLgn+nO^?@ zUt01{NVOEBaACXGj@4o*cAgvjnx>7AKiTAFrjC8MBh!y+E;7l$<9Y4pQTlXK(E)F)X~TbHaN$8(a;MD<8RDPd;3$ea5jwp07|Z{^KHu-ncrdB zLhfD;Pa>wpbw0qFW1Ri~dQ>lSwT^lZYLewP{y(KvXH`$)ub@161eYFUUoLT;#-n!H zq!Z40r29tI`?zEMDk-JRXRjj$f=NZnu-n?IU4;jRJ$d(~GacCJ=}rV3y?Wdk`j+G6@=-12~_QpEUNY-Fa@n_UjGs*kRd-Uy2mTrDk8K^F%Eb4!Y zw={r);y@&BItuu^{tESc&G4T?#_#zJ#v5tsKFx8*^7`>#XWV7n{{XYs-o8Ko0D`Uf zeRVH^A86f%)9>x>Mtg$(PCxP~KmB}TqYM0K`kc7W;K=;tCqFKE&IUVBIs@xY18RTu zswQj${>iVXitc>wfW)MJyGMM|4){C~o@vRrYq0B4ryQ7zBsgvcC4F=DLoXA{{UC= zuUheEf}@AVT8wJjR?ka@MkA}11+&wyT-Sw}S6wQntuRmI|t61jFL!X-}r<`GSvB3Okw)$L?-AFg8 zwXM5nsRs%DIj=fW(AqK7ciV~^rpKANfkF@Z#$4y?j(TxSj`mB7x#yFWblOhylOe_j z<(@hUvlfrPPSe|d1n@}2e|Pt+2_F2^km)NPgsmHVzi2Ik-1P1AtW`zLV3c*Slck9! zlGS6|=J~tj2l!NH`P7h4GtYFY3rTmdLy&%Rh0o>Fw@&q=q3Hq}TkDJ_5=i35Q=i@* zJqOGDs?7QV+iSXR-e=KikU3lbj%g<_zXv-&rWV+q+eWVSip(j0m4Ws)u`Kq=J<;bkZU<$0G_<-xrxFl!a+nl>7Rx2SKgCV6rO7=VeasGIsH7<=K9ZIk~i3gFlZNx`& z_QGTz<;6@3dGa%IvVW;uV{zxF=~8I6LVarbW&6u+SCQyI{-9RwwWGyjp=mOzx0&V! z+#9AqSa+TOsVK|*Vk<9zH6VANR_$~fN}Nb`HIfBNi4LOBawf3=QFyIoC1Hy z{{ZXO?y07slTwCEvs%p2ZyXm0ag+7MH&xP>Eo$N~;aGciBb?%^+FwFr9Z2J8E@F}; z8;qFp$M=XBI34*tYB}U-1_vz&Ae`fCdUO7NO4`uul3RT(ve{K6H-1B7`3i?fvW8n* zxugxXneqYZLW;%IMe^C0wPzQK2%E?z{Ww(_2#K+7G-7AW8IZy3^UFF3~~A9oTqd$D{J|*{{Ruia!q506K$L@ajc|c)GH(Ph_W&Nf zew|}oCuO~~g_mrQIvzP@R$L$F&paAz5J@hdYFMu6oScq0$l#AmFs)@PkczEsZqQn; zHnTIhIUl^}e-Hrmr+D7kZlqfo;zgd$+sh$;k1Mzw`tyVCDsQv3&D4sdF3_%xoE2_| z`Bs03{NgTWe=WBIyRQW8V}bP}{Pif$_lQ!~H$0b8gX~vqzuh?LQO7#(=f6YgPSy(@ zMU$J?H`8Lz0m68Hw+ z!}bvQdk!$8j(E^x$F*Y^KHV$6v{4c&ju#wz z)?SZnutqz#T>f9@{PU#_Srvb}aDNKzbA#RC@YVML1*M zajA#y!w>G(W`)#Y5XtMF{VGV=WN-I+)iT~%79e_xo+&bZ?mH2lwIw3bwoOasj^}G< z)4fzlb~y)k%aM=E{Qm%+W{yTHf!iaewM>B*VqvgqXEX|JjFf5##^> literal 0 HcmV?d00001 diff --git a/apps/widhwbttm/widhwbttm.wid.js b/apps/widhwbttm/widhwbttm.wid.js new file mode 100644 index 000000000..d251cf2f0 --- /dev/null +++ b/apps/widhwbttm/widhwbttm.wid.js @@ -0,0 +1,45 @@ +(function() { + var v_switch; // show stats + if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=16 + else v_font_size=13; + var v_str_hw=new String(); + if (v_switch == null || v_switch == '') v_switch=0; + function draw(){ + if (!Bangle.CLOCK == !this.width) { // if we're the wrong size for if we have a clock or not... + this.width = Bangle.CLOCK?0:60; + return setTimeout(Bangle.drawWidgets,1); // widget changed size - redraw + } + if (!this.width) return; // if size not right, return + + if (v_switch==0) { + //var v_hw=process.memory(); + v_str_hw=process.memory().free+"/"+process.memory().total; + v_switch++; + } else if (v_switch==1) { + // var v_hw=process.env.VERSION; + v_str_hw="V:"+process.env.VERSION; + v_switch++; + } else if (v_switch==2) { + v_str_hw="M:"+process.env.BOARD; + v_switch++; + } else { + stor=require("Storage").getStats(); + if (v_switch==3) { + v_str_hw="St:"+stor.freeBytes; + v_switch++; + } else if (v_switch==4) { + v_str_hw="TrB:"+stor.trashBytes; + v_switch++; + } else if (v_switch==5) { + v_str_hw="Fil:"+stor.fileCount; + v_switch=0; + } + } + g.reset().setFontVector(v_font_size).setFontAlign(-1, 0).setColor("#0ff"); + //clean a longer previous string + g.drawString(" ", this.x, this.y+11, true); + g.drawString(v_str_hw, this.x, this.y+11, true); + } //end draw + +WIDGETS["wdhwbttm"]={area:"bl",width:Bangle.CLOCK?0:60,draw:draw}; +})() From 1da832101d35efff3db116dc5e45906b879cacf8 Mon Sep 17 00:00:00 2001 From: dapgo Date: Wed, 14 Dec 2022 22:10:17 +0100 Subject: [PATCH 285/342] file name with caps corrected --- apps/widhwbttm/Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widhwbttm/Changelog b/apps/widhwbttm/Changelog index 7c9547033..1d7b3be61 100644 --- a/apps/widhwbttm/Changelog +++ b/apps/widhwbttm/Changelog @@ -1,2 +1,2 @@ -0.01: Fork of widclkbttm (Digital clock bttom widget) +0.01: 1st ver, inspired in some code from widclkbttm (Digital clock bttom widget) From 9a44643d0100a20147b78611eb0f20a09178337f Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 14 Dec 2022 22:14:01 +0100 Subject: [PATCH 286/342] kbswipe: Input of symbols. --- apps/kbswipe/ChangeLog | 1 + apps/kbswipe/README.md | 2 +- apps/kbswipe/lib.js | 63 +++++++++++++++++++++++++++++++++----- apps/kbswipe/metadata.json | 2 +- 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/apps/kbswipe/ChangeLog b/apps/kbswipe/ChangeLog index 568db372e..a7b2d44c2 100644 --- a/apps/kbswipe/ChangeLog +++ b/apps/kbswipe/ChangeLog @@ -4,3 +4,4 @@ 0.04: Fix issue if going back without typing. 0.05: Keep drag-function in ram, hopefully improving performance and input reliability somewhat. 0.06: Support input of numbers and uppercase characters. +0.07: Support input of symbols. diff --git a/apps/kbswipe/README.md b/apps/kbswipe/README.md index c4c3fbd99..105d7cd9b 100644 --- a/apps/kbswipe/README.md +++ b/apps/kbswipe/README.md @@ -4,7 +4,7 @@ A library that provides the ability to input text by swiping PalmOS Graffiti-sty To get a legend of available characters, just tap the screen. -To switch between the input of alphabetic and numeric characters tap the widget which displays either "123" or "ABC". +To switch between the input of alphabetic, numeric and symbol characters tap the widget which displays either "123", "ABC" or "?:$". To switch between lowercase and uppercase characters do an up swipe. diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 75a434999..cd17d42f4 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -1,5 +1,6 @@ exports.INPUT_MODE_ALPHA = 0; exports.INPUT_MODE_NUM = 1; +exports.INPUT_MODE_SYM = 2; /* To make your own strokes, type: @@ -47,9 +48,42 @@ exports.getStrokes = function(mode, cb) { cb("7", new Uint8Array([47, 38, 48, 38, 53, 38, 66, 38, 85, 38, 103, 38, 117, 38, 125, 38, 129, 38, 134, 41, 135, 47, 135, 54, 135, 66, 131, 93, 124, 126, 116, 149, 109, 161, 105, 168])); cb("8", new Uint8Array([122, 61, 102, 61, 83, 61, 60, 61, 47, 62, 45, 78, 58, 99, 84, 112, 105, 122, 118, 134, 121, 149, 113, 165, 86, 171, 59, 171, 47, 164, 45, 144, 50, 132, 57, 125, 67, 117, 78, 109, 87, 102, 96, 94, 105, 86, 113, 85])); cb("9", new Uint8Array([122, 58, 117, 55, 112, 51, 104, 51, 95, 51, 86, 51, 77, 51, 68, 51, 60, 51, 54, 56, 47, 64, 46, 77, 46, 89, 46, 96, 51, 103, 64, 109, 74, 110, 83, 110, 94, 107, 106, 102, 116, 94, 124, 84, 127, 79, 128, 78, 128, 94, 128, 123, 128, 161, 128, 175])); + } else if (mode === exports.INPUT_MODE_SYM) { + cb("?", new Uint8Array([36, 69, 39, 68, 44, 65, 52, 60, 61, 56, 70, 51, 78, 47, 87, 46, 96, 46, 108, 46, 121, 49, 128, 56, 129, 63, 126, 76, 119, 91, 108, 105, 103, 114, 98, 118, 93, 124, 91, 131, 91, 143, 91, 155, 91, 163])); + cb(".", new Uint8Array([105, 158, 97, 157, 80, 150, 60, 140, 44, 127, 34, 110, 31, 97, 31, 84, 35, 74, 48, 59, 78, 55, 115, 57, 145, 70, 159, 89, 162, 112, 160, 138, 153, 153, 144, 164, 125, 170, 103, 171])); + cb(",", new Uint8Array([140, 44, 139, 45, 138, 46, 137, 47, 135, 49, 132, 51, 127, 55, 123, 58, 117, 62, 112, 67, 105, 71, 100, 77, 93, 82, 86, 86, 80, 91, 74, 96, 69, 101, 64, 105, 60, 108, 57, 112, 53, 115, 51, 117, 49, 119, 48, 121, 47, 122, 46, 122, 46, 123])); + cb("'", new Uint8Array([100, 50, 100, 160])); + cb("`", new Uint8Array([111, 170, 110, 168, 107, 163, 105, 154, 100, 145, 93, 133, 82, 120, 72, 107, 63, 96, 55, 86, 49, 79, 45, 74, 40, 70, 38, 67, 36, 65, 35, 63, 37, 64, 42, 68, 55, 78, 71, 90, 89, 106, 107, 122, 121, 136, 130, 145, 137, 151, 141, 156])); + cb("-", new Uint8Array([34, 63, 36, 63, 40, 63, 46, 63, 54, 63, 63, 63, 72, 63, 82, 63, 92, 63, 103, 63, 113, 63, 124, 63, 132, 63, 139, 63, 143, 63, 145, 63, 147, 63, 149, 63, 152, 63])); + cb("_", new Uint8Array([34, 84, 36, 84, 40, 84, 47, 84, 56, 84, 67, 84, 81, 84, 95, 84, 108, 84, 120, 84, 131, 84, 139, 84, 146, 84, 149, 84, 151, 84, 154, 84, 155, 83, 154, 81, 150, 78, 143, 74, 130, 71, 111, 68, 90, 65, 73, 64, 60, 64, 51, 64, 46, 64])); + cb("\"", new Uint8Array([24, 168, 24, 158, 28, 132, 33, 102, 37, 82, 41, 66, 46, 54, 50, 47, 54, 46, 60, 49, 67, 64, 73, 88, 80, 114, 87, 138, 95, 149, 109, 145, 123, 128, 130, 108, 135, 87, 136, 70, 136, 57, 136, 50])); + cb(":", new Uint8Array([24, 62, 24, 63, 24, 68, 26, 73, 27, 80, 29, 88, 31, 94, 33, 101, 35, 108, 37, 114, 39, 121, 39, 127, 39, 131, 39, 134, 39, 135, 39, 133, 39, 130, 41, 125, 45, 114, 48, 100, 51, 89, 52, 81, 52, 74, 52, 70, 52, 67, 52, 63, 52, 60, 52, 57])); + cb(";", new Uint8Array([142, 58, 139, 59, 136, 61, 131, 65, 124, 71, 116, 79, 105, 87, 94, 98, 82, 109, 70, 121, 58, 132, 49, 141, 40, 149, 33, 156, 28, 160, 24, 164, 23, 166, 22, 164, 25, 156, 33, 138, 47, 111, 66, 81, 82, 58, 95, 41, 103, 30])); + cb("(", new Uint8Array([72, 51, 70, 51, 68, 51, 66, 54, 63, 56, 61, 59, 58, 61, 56, 65, 54, 70, 51, 74, 49, 79, 47, 83, 45, 87, 44, 92, 44, 94, 44, 96, 44, 99, 44, 101, 44, 104, 44, 107, 44, 114, 44, 120, 46, 127, 49, 135, 52, 141, 56, 145])); + cb(")", new Uint8Array([18, 42, 21, 43, 24, 45, 28, 47, 32, 50, 37, 53, 40, 58, 44, 62, 46, 69, 48, 76, 50, 81, 52, 85, 53, 90, 53, 94, 53, 98, 53, 103, 53, 106, 53, 111, 53, 119, 53, 129, 52, 137, 50, 142, 47, 146])); + cb("[", new Uint8Array([121, 138, 118, 143, 114, 146, 110, 149, 105, 152, 98, 152, 91, 152, 83, 152, 77, 152, 67, 151, 59, 146, 52, 138, 47, 131, 47, 124, 48, 118, 57, 115, 64, 115, 67, 113, 64, 106, 59, 95, 53, 85, 48, 80, 47, 74, 47, 64, 53, 57, 65, 56, 83, 56, 99, 61])); + cb("]", new Uint8Array([36, 136, 42, 140, 54, 145, 70, 149, 84, 151, 98, 149, 109, 143, 113, 135, 113, 127, 104, 115, 87, 105, 75, 103, 76, 98, 87, 84, 96, 67, 100, 54, 97, 48, 90, 45, 76, 45, 60, 47, 44, 52])); + cb("<", new Uint8Array([154, 122, 151, 122, 149, 121, 147, 118, 144, 116, 139, 114, 133, 112, 126, 110, 118, 107, 108, 105, 97, 102, 86, 97, 75, 93, 64, 90, 56, 88, 49, 85, 46, 84, 41, 82, 40, 80, 47, 76, 63, 69, 86, 59, 106, 50, 121, 44, 128, 40])); + cb(">", new Uint8Array([28, 115, 31, 115, 38, 113, 48, 110, 57, 107, 68, 103, 79, 98, 90, 94, 98, 92, 104, 90, 111, 88, 117, 85, 122, 83, 125, 81, 127, 80, 129, 80, 132, 80, 130, 78, 126, 75, 120, 72, 110, 69, 98, 66, 85, 63, 72, 60, 59, 57, 45, 53, 36, 49, 30, 46])); + cb("@", new Uint8Array([82, 50, 76, 50, 67, 50, 59, 50, 50, 51, 43, 57, 38, 68, 34, 83, 33, 95, 33, 108, 34, 121, 42, 136, 57, 148, 72, 155, 85, 157, 98, 155, 110, 149, 120, 139, 128, 127, 134, 119, 137, 114, 138, 107, 138, 98, 138, 88, 138, 77, 137, 71, 134, 65, 128, 60, 123, 58])); + cb("#", new Uint8Array([23, 70, 23, 76, 26, 85, 30, 97, 36, 112, 40, 129, 45, 142, 49, 152, 53, 158, 59, 161, 67, 155, 78, 130, 84, 98, 88, 76, 90, 68, 96, 62, 102, 61, 108, 61, 119, 67, 126, 80, 131, 101, 135, 129, 136, 152])); + cb("$", new Uint8Array([159, 72, 157, 70, 155, 68, 151, 66, 145, 63, 134, 60, 121, 58, 108, 56, 96, 55, 83, 55, 73, 55, 64, 56, 57, 60, 52, 65, 49, 71, 49, 76, 50, 81, 55, 87, 71, 94, 94, 100, 116, 104, 131, 108, 141, 114, 145, 124, 142, 135, 124, 146, 97, 153, 70, 157, 52, 158])); + cb("%", new Uint8Array([31, 39, 39, 54, 51, 78, 60, 97, 62, 107, 59, 118, 47, 118, 44, 109, 46, 92, 56, 73, 69, 62, 92, 61, 115, 70, 125, 90, 126, 110, 125, 122, 118, 127, 111, 127, 105, 124, 105, 115, 105, 97, 109, 75, 117, 56, 124, 45])); + cb("^", new Uint8Array([28, 175, 28, 168, 33, 156, 37, 142, 41, 128, 46, 111, 51, 95, 58, 82, 62, 75, 68, 68, 74, 57, 81, 49, 88, 44, 93, 44, 102, 56, 113, 79, 118, 95, 123, 110, 131, 130, 135, 146, 136, 158])); + cb("&", new Uint8Array([122, 61, 102, 61, 83, 61, 60, 61, 47, 62, 45, 78, 58, 99, 84, 112, 105, 122, 118, 134, 121, 149, 113, 165, 86, 171, 59, 171, 47, 164, 45, 144, 50, 132, 57, 125, 67, 117, 78, 109, 87, 102, 96, 94, 105, 86, 113, 85])); + cb("*", new Uint8Array([35, 61, 41, 62, 53, 68, 72, 78, 91, 91, 103, 99, 113, 103, 119, 106, 124, 107, 131, 107, 139, 107, 150, 107, 161, 104, 166, 97, 166, 89, 165, 78, 162, 70, 158, 61, 151, 54, 144, 51, 132, 51, 115, 57, 98, 66, 82, 78, 65, 89, 52, 100, 44, 109])); + cb("!", new Uint8Array([100, 160, 100, 50])); + cb("~", new Uint8Array([133, 40, 133, 48, 133, 65, 133, 87, 133, 105, 132, 116, 128, 125, 124, 133, 120, 140, 114, 146, 107, 148, 101, 147, 91, 139, 82, 126, 74, 108, 70, 91, 70, 82, 70, 75, 70, 65, 68, 57, 62, 51, 57, 50, 49, 57, 41, 76, 36, 96, 33, 114, 33, 132])); + cb("+", new Uint8Array([151, 41, 146, 46, 133, 55, 116, 71, 101, 87, 87, 98, 74, 105, 63, 109, 54, 110, 43, 106, 36, 94, 36, 80, 36, 68, 42, 60, 60, 58, 91, 64, 115, 77, 129, 88, 139, 99, 144, 106])); + cb("=", new Uint8Array([34, 46, 47, 46, 70, 46, 87, 46, 96, 46, 101, 46, 104, 46, 102, 50, 96, 58, 80, 78, 62, 100, 49, 117, 40, 127, 43, 132, 61, 132, 84, 132, 99, 132])); + cb("\\", new Uint8Array([25, 38, 26, 40, 30, 43, 35, 48, 43, 54, 54, 63, 65, 74, 76, 85, 87, 96, 98, 108, 108, 121, 116, 131, 123, 138, 127, 144, 131, 148, 134, 152, 136, 155])); + cb("|", new Uint8Array([66, 146, 66, 144, 66, 140, 66, 134, 66, 125, 66, 114, 66, 102, 66, 92, 66, 83, 66, 77, 66, 71, 66, 67, 66, 62, 66, 58, 66, 53, 66, 49, 66, 48, 66, 46, 64, 42, 61, 41, 58, 42, 54, 47, 51, 55, 46, 67, 40, 81, 37, 93, 34, 102, 30, 109, 28, 116])); + cb("/", new Uint8Array([24, 173, 26, 171, 30, 166, 36, 158, 44, 148, 53, 137, 63, 126, 73, 115, 82, 104, 91, 95, 99, 87, 105, 80, 112, 74, 117, 70, 122, 65, 125, 61, 127, 60, 129, 57, 133, 53, 136, 50, 137, 47])); + } + if (mode === exports.INPUT_MODE_ALPHA || mode === exports.INPUT_MODE_NUM) { + cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); + cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); } - cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); - cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); }; exports.input = function(options) { @@ -129,14 +163,25 @@ exports.input = function(options) { flashInterval = undefined; g.reset(); - g.clearRect(R).setColor("#f00"); - var n=0; + g.setFont("6x8"); + g.clearRect(R); + let n=0; exports.getStrokes(input_mode, (id,s) => { - var x = n%6; - var y = (n-x)/6; + let x = n%6; + let y = (n-x)/6; s = g.transformVertices(s, {scale:0.16, x:R.x+x*30-4, y:R.y+y*30-4}); g.fillRect(s[0]-1,s[1]-2,s[0]+1,s[1]+1); - g.drawPoly(s); + g.setColor("#f00").drawPoly(s); + switch(id) { + case 'SHIFT': + g.setBgColor(0).setColor("#00f").drawImage(atob("CgqBAfP4fh8D4fh+H4fh+HA="), R.x+x*30+20, R.y+y*30+20); + break; + case '\b': + case ' ': + break; + default: + g.setColor("#00f").drawString(shift ? id.toUpperCase() : id, R.x+x*30+20, R.y+y*30+20); + } n++; }); } @@ -177,7 +222,7 @@ exports.input = function(options) { // Switches between alphabetic and numeric input function cycleInput() { input_mode++; - if (input_mode > exports.INPUT_MODE_NUM) input_mode = 0; + if (input_mode > exports.INPUT_MODE_SYM) input_mode = 0; shift = false; setupStrokes(); show(); @@ -201,6 +246,8 @@ exports.input = function(options) { g.drawString(shift ? "ABC" : "abc", this.x, this.y); } else if (input_mode === exports.INPUT_MODE_NUM) { g.drawString("123", this.x, this.y); + } else if (input_mode === exports.INPUT_MODE_SYM) { + g.drawString("?:$", this.x, this.y); } } }; diff --git a/apps/kbswipe/metadata.json b/apps/kbswipe/metadata.json index 5e290e1dd..6b597a371 100644 --- a/apps/kbswipe/metadata.json +++ b/apps/kbswipe/metadata.json @@ -1,6 +1,6 @@ { "id": "kbswipe", "name": "Swipe keyboard", - "version":"0.06", + "version":"0.07", "description": "A library for text input via PalmOS style swipe gestures (beta!)", "icon": "app.png", "type":"textinput", From aa3495d983c26fae7e4018f30d65f894e00ad303 Mon Sep 17 00:00:00 2001 From: dapgo Date: Wed, 14 Dec 2022 22:17:30 +0100 Subject: [PATCH 287/342] Delete Changelog --- apps/widhwbttm/Changelog | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 apps/widhwbttm/Changelog diff --git a/apps/widhwbttm/Changelog b/apps/widhwbttm/Changelog deleted file mode 100644 index 1d7b3be61..000000000 --- a/apps/widhwbttm/Changelog +++ /dev/null @@ -1,2 +0,0 @@ -0.01: 1st ver, inspired in some code from widclkbttm (Digital clock bttom widget) - From af51bedb65af282cc747d38de16330a7f167724d Mon Sep 17 00:00:00 2001 From: dapgo Date: Wed, 14 Dec 2022 22:18:23 +0100 Subject: [PATCH 288/342] now ChangeLog has caps on L --- apps/widhwbttm/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 apps/widhwbttm/ChangeLog diff --git a/apps/widhwbttm/ChangeLog b/apps/widhwbttm/ChangeLog new file mode 100644 index 000000000..1d7b3be61 --- /dev/null +++ b/apps/widhwbttm/ChangeLog @@ -0,0 +1,2 @@ +0.01: 1st ver, inspired in some code from widclkbttm (Digital clock bttom widget) + From 6427068d722323371c78b1cf07c1662392badd2d Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Wed, 14 Dec 2022 23:03:33 +0100 Subject: [PATCH 289/342] widmessages: Fix messages not showing if UI auto-open is disabled Fixes #2390 --- apps/widmessages/ChangeLog | 1 + apps/widmessages/metadata.json | 2 +- apps/widmessages/widget.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/widmessages/ChangeLog b/apps/widmessages/ChangeLog index 598068920..709fb19c3 100644 --- a/apps/widmessages/ChangeLog +++ b/apps/widmessages/ChangeLog @@ -1,3 +1,4 @@ 0.01: Moved messages widget into standalone widget app 0.02: Fix 'srcs' being defined in global scope Remove library stub +0.03: Fix messages not showing if UI auto-open is disabled \ No newline at end of file diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json index a8a23df19..47a1151da 100644 --- a/apps/widmessages/metadata.json +++ b/apps/widmessages/metadata.json @@ -1,7 +1,7 @@ { "id": "widmessages", "name": "Message Widget", - "version": "0.02", + "version": "0.03", "description": "Widget showing new messages", "icon": "app.png", "type": "widget", diff --git a/apps/widmessages/widget.js b/apps/widmessages/widget.js index 316957e29..bbf980fd3 100644 --- a/apps/widmessages/widget.js +++ b/apps/widmessages/widget.js @@ -72,6 +72,6 @@ } }; - Bangle.on("message", WIDGETS["messages"].onMsg); + Bangle.on("message", WIDGETS["messages"].onMsg.bind(WIDGETS["messages"])); WIDGETS["messages"].onMsg("init", {}); // abuse type="init" to prevent Bangle.drawWidgets(); })(); From e9c83cbaa818cfa6858639bd9dbe0dde919f582c Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 15 Dec 2022 07:02:59 +0100 Subject: [PATCH 290/342] kbswipe - Add return to alpha - Enable backspace in symbols --- apps/kbswipe/lib.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index cd17d42f4..64984bc67 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -80,9 +80,10 @@ exports.getStrokes = function(mode, cb) { cb("|", new Uint8Array([66, 146, 66, 144, 66, 140, 66, 134, 66, 125, 66, 114, 66, 102, 66, 92, 66, 83, 66, 77, 66, 71, 66, 67, 66, 62, 66, 58, 66, 53, 66, 49, 66, 48, 66, 46, 64, 42, 61, 41, 58, 42, 54, 47, 51, 55, 46, 67, 40, 81, 37, 93, 34, 102, 30, 109, 28, 116])); cb("/", new Uint8Array([24, 173, 26, 171, 30, 166, 36, 158, 44, 148, 53, 137, 63, 126, 73, 115, 82, 104, 91, 95, 99, 87, 105, 80, 112, 74, 117, 70, 122, 65, 125, 61, 127, 60, 129, 57, 133, 53, 136, 50, 137, 47])); } + cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); if (mode === exports.INPUT_MODE_ALPHA || mode === exports.INPUT_MODE_NUM) { - cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); + cb("\n", new Uint8Array([140, 44, 139, 45, 138, 46, 137, 47, 135, 49, 132, 51, 127, 55, 123, 58, 117, 62, 112, 67, 105, 71, 100, 77, 93, 82, 86, 86, 80, 91, 74, 96, 69, 101, 64, 105, 60, 108, 57, 112, 53, 115, 51, 117, 49, 119, 48, 121, 47, 122, 46, 122, 46, 123])); } }; @@ -177,6 +178,7 @@ exports.input = function(options) { g.setBgColor(0).setColor("#00f").drawImage(atob("CgqBAfP4fh8D4fh+H4fh+HA="), R.x+x*30+20, R.y+y*30+20); break; case '\b': + case '\n': case ' ': break; default: From 147283dc743fc5c901ac16aa61b519b717480144 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 15 Dec 2022 07:24:25 +0100 Subject: [PATCH 291/342] kbswipe: remove backtick from symbols --- apps/kbswipe/lib.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 64984bc67..61ac3d240 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -53,7 +53,6 @@ exports.getStrokes = function(mode, cb) { cb(".", new Uint8Array([105, 158, 97, 157, 80, 150, 60, 140, 44, 127, 34, 110, 31, 97, 31, 84, 35, 74, 48, 59, 78, 55, 115, 57, 145, 70, 159, 89, 162, 112, 160, 138, 153, 153, 144, 164, 125, 170, 103, 171])); cb(",", new Uint8Array([140, 44, 139, 45, 138, 46, 137, 47, 135, 49, 132, 51, 127, 55, 123, 58, 117, 62, 112, 67, 105, 71, 100, 77, 93, 82, 86, 86, 80, 91, 74, 96, 69, 101, 64, 105, 60, 108, 57, 112, 53, 115, 51, 117, 49, 119, 48, 121, 47, 122, 46, 122, 46, 123])); cb("'", new Uint8Array([100, 50, 100, 160])); - cb("`", new Uint8Array([111, 170, 110, 168, 107, 163, 105, 154, 100, 145, 93, 133, 82, 120, 72, 107, 63, 96, 55, 86, 49, 79, 45, 74, 40, 70, 38, 67, 36, 65, 35, 63, 37, 64, 42, 68, 55, 78, 71, 90, 89, 106, 107, 122, 121, 136, 130, 145, 137, 151, 141, 156])); cb("-", new Uint8Array([34, 63, 36, 63, 40, 63, 46, 63, 54, 63, 63, 63, 72, 63, 82, 63, 92, 63, 103, 63, 113, 63, 124, 63, 132, 63, 139, 63, 143, 63, 145, 63, 147, 63, 149, 63, 152, 63])); cb("_", new Uint8Array([34, 84, 36, 84, 40, 84, 47, 84, 56, 84, 67, 84, 81, 84, 95, 84, 108, 84, 120, 84, 131, 84, 139, 84, 146, 84, 149, 84, 151, 84, 154, 84, 155, 83, 154, 81, 150, 78, 143, 74, 130, 71, 111, 68, 90, 65, 73, 64, 60, 64, 51, 64, 46, 64])); cb("\"", new Uint8Array([24, 168, 24, 158, 28, 132, 33, 102, 37, 82, 41, 66, 46, 54, 50, 47, 54, 46, 60, 49, 67, 64, 73, 88, 80, 114, 87, 138, 95, 149, 109, 145, 123, 128, 130, 108, 135, 87, 136, 70, 136, 57, 136, 50])); From 34aeae7449df6dbfcef613859dd0f54531ee9597 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 15 Dec 2022 07:38:44 +0100 Subject: [PATCH 292/342] kbswipe: remove return --- apps/kbswipe/lib.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/kbswipe/lib.js b/apps/kbswipe/lib.js index 61ac3d240..ea6d78255 100644 --- a/apps/kbswipe/lib.js +++ b/apps/kbswipe/lib.js @@ -82,7 +82,6 @@ exports.getStrokes = function(mode, cb) { cb("\b", new Uint8Array([183, 103, 182, 103, 180, 103, 176, 103, 169, 103, 159, 103, 147, 103, 133, 103, 116, 103, 101, 103, 85, 103, 73, 103, 61, 103, 52, 103, 38, 103, 34, 103, 29, 103, 27, 103, 26, 103, 25, 103, 24, 103])); if (mode === exports.INPUT_MODE_ALPHA || mode === exports.INPUT_MODE_NUM) { cb(" ", new Uint8Array([39, 118, 40, 118, 41, 118, 44, 118, 47, 118, 52, 118, 58, 118, 66, 118, 74, 118, 84, 118, 94, 118, 104, 117, 114, 116, 123, 116, 130, 116, 144, 116, 149, 116, 154, 116, 158, 116, 161, 116, 163, 116])); - cb("\n", new Uint8Array([140, 44, 139, 45, 138, 46, 137, 47, 135, 49, 132, 51, 127, 55, 123, 58, 117, 62, 112, 67, 105, 71, 100, 77, 93, 82, 86, 86, 80, 91, 74, 96, 69, 101, 64, 105, 60, 108, 57, 112, 53, 115, 51, 117, 49, 119, 48, 121, 47, 122, 46, 122, 46, 123])); } }; From a567016172b678e6e2a7638b8e74be9bb853f291 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 15 Dec 2022 09:19:10 +0000 Subject: [PATCH 293/342] iOS Making ANCS message receive more resilient (#2402) --- apps/ios/ChangeLog | 1 + apps/ios/boot.js | 12 ++++++++++-- apps/ios/metadata.json | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/ios/ChangeLog b/apps/ios/ChangeLog index 5763801f5..8ab99b4db 100644 --- a/apps/ios/ChangeLog +++ b/apps/ios/ChangeLog @@ -10,3 +10,4 @@ 0.10: Added more bundleIds 0.11: Added letters with caron to unicodeRemap, to properly display messages in Czech language 0.12: Use new message library +0.13: Making ANCS message receive more resilient (#2402) diff --git a/apps/ios/boot.js b/apps/ios/boot.js index ee19ca14b..8952a047e 100644 --- a/apps/ios/boot.js +++ b/apps/ios/boot.js @@ -26,7 +26,7 @@ E.on('ANCS',msg=>{ // not a remove - we need to get the message info first function ancsHandler() { var msg = Bangle.ancsMessageQueue[0]; - NRF.ancsGetNotificationInfo( msg.uid ).then( info => { + NRF.ancsGetNotificationInfo( msg.uid ).then( info => { // success if(msg.preExisting === true){ info.new = false; @@ -38,6 +38,10 @@ E.on('ANCS',msg=>{ Bangle.ancsMessageQueue.shift(); if (Bangle.ancsMessageQueue.length) ancsHandler(); + }, err=>{ // failure + console.log("ancsGetNotificationInfo failed",err); + if (Bangle.ancsMessageQueue.length) + ancsHandler(); }); } Bangle.ancsMessageQueue.push(msg); @@ -196,7 +200,11 @@ Bangle.messageResponse = (msg,response) => { // error/warn here? }; // remove all messages on disconnect -NRF.on("disconnect", () => require("messages").clearAll()); +NRF.on("disconnect", () => { + require("messages").clearAll(); + // Remove any messages from the ANCS queue + Bangle.ancsMessageQueue = []; +}); /* // For testing... diff --git a/apps/ios/metadata.json b/apps/ios/metadata.json index 5042ff1c0..42e0060d0 100644 --- a/apps/ios/metadata.json +++ b/apps/ios/metadata.json @@ -1,7 +1,7 @@ { "id": "ios", "name": "iOS Integration", - "version": "0.12", + "version": "0.13", "description": "Display notifications/music/etc from iOS devices", "icon": "app.png", "tags": "tool,system,ios,apple,messages,notifications", From 1c7eb92ad5e2672154565b6ac0c487f50aa0a366 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 15 Dec 2022 10:34:40 +0000 Subject: [PATCH 294/342] messages Remove '.show' field, tidyup and fix .open if fast load not enabled --- apps/messagegui/ChangeLog | 1 + apps/messagegui/app.js | 31 ++++++++++++++----------------- apps/messagegui/boot.js | 4 +--- apps/messagegui/lib.js | 27 +++++++++++++++++++-------- apps/messagegui/metadata.json | 2 +- apps/messages/lib.js | 2 +- apps/messagesmusic/ChangeLog | 3 ++- apps/messagesmusic/app.js | 3 ++- apps/messagesmusic/metadata.json | 3 ++- 9 files changed, 43 insertions(+), 33 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 834d703ce..46634985a 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -84,3 +84,4 @@ 0.59: Ensure we do write messages if messages app can't be fast loaded (see #2373) 0.60: Fix saving of removal messages if UI not open 0.61: Fix regression where loading into messages app stops back from working (#2398) +0.62: Remove '.show' field, tidyup and fix .open if fast load not enabled diff --git a/apps/messagegui/app.js b/apps/messagegui/app.js index 9f8a20219..b158310a1 100644 --- a/apps/messagegui/app.js +++ b/apps/messagegui/app.js @@ -72,10 +72,7 @@ var onMessagesModified = function(type,msg) { Bangle.on("message", onMessagesModified); function saveMessages() { - require("messages").write(MESSAGES.map(m => { - delete m.show; - return m; - })); + require("messages").write(MESSAGES); } E.on("kill", saveMessages); @@ -116,11 +113,12 @@ function showMapMessage(msg) { Bangle.setUI({mode:"updown", back: back}, back); // any input takes us back } -let updateLabelsInterval, - music = {artist: "", album: "", title: ""}; // defaults, so e.g. msg.title.length doesn't error +let updateLabelsInterval; + function showMusicMessage(msg) { active = "music"; - msg = Object.assign(music, msg); // combine+remember "musicinfo" and "musicstate" messages + // defaults, so e.g. msg.xyz.length doesn't error. `msg` should contain up to date info + msg = Object.assign({artist: "", album: "", track: "Music"}, msg); openMusic = msg.state=="play"; var trackScrollOffset = 0; var artistScrollOffset = 0; @@ -349,6 +347,7 @@ function showMessage(msgid) { clockIfNoMsg : bool clockIfAllRead : bool showMsgIfUnread : bool + openMusic : bool // open music if it's playing } */ function checkMessages(options) { @@ -364,12 +363,8 @@ function checkMessages(options) { } // we have >0 messages var newMessages = MESSAGES.filter(m=>m.new&&m.id!="music"); - var toShow = MESSAGES.find(m=>m.show); - if (toShow) { - newMessages.unshift(toShow); - } // If we have a new message, show it - if ((toShow||options.showMsgIfUnread) && newMessages.length) { + if (options.showMsgIfUnread && newMessages.length) { delete newMessages[0].show; // stop us getting stuck here if we're called a second time showMessage(newMessages[0].id); // buzz after showMessage, so being busy during layout doesn't affect the buzz pattern @@ -382,8 +377,8 @@ function checkMessages(options) { } return; } - // no new messages: show playing music? (only if we have playing music to show) - if (options.openMusic && MESSAGES.some(m=>m.id=="music" && m.track && m.state=="play")) + // no new messages: show playing music? Only if we have playing music, or state=="show" (set by messagesmusic) + if (options.openMusic && MESSAGES.some(m=>m.id=="music" && ((m.track && m.state=="play") || m.state=="show"))) return showMessage('music'); // no new messages - go to clock? if (options.clockIfAllRead && newMessages.length==0) @@ -449,7 +444,9 @@ setTimeout(() => { if (!isFinite(settings.unreadTimeout)) settings.unreadTimeout=60; if (settings.unreadTimeout) unreadTimeout = setTimeout(load, settings.unreadTimeout*1000); - // only openMusic on launch if music is new - var newMusic = MESSAGES.some(m => m.id === "music" && m.new); - checkMessages({ clockIfNoMsg: 0, clockIfAllRead: 0, showMsgIfUnread: 1, openMusic: newMusic && settings.openMusic }); + // only openMusic on launch if music is new, or state=="show" (set by messagesmusic) + var musicMsg = MESSAGES.find(m => m.id === "music"); + checkMessages({ + clockIfNoMsg: 0, clockIfAllRead: 0, showMsgIfUnread: 1, + openMusic: ((musicMsg&&musicMsg.new) && settings.openMusic) || (musicMsg&&musicMsg.state=="show") }); }, 10); // if checkMessages wants to 'load', do that diff --git a/apps/messagegui/boot.js b/apps/messagegui/boot.js index 4592f825d..ce7f1b99c 100644 --- a/apps/messagegui/boot.js +++ b/apps/messagegui/boot.js @@ -1,3 +1 @@ -(function() { - Bangle.on("message", (type, msg) => require("messagegui").listener(type, msg)); -})(); \ No newline at end of file +Bangle.on("message", (type, msg) => require("messagegui").listener(type, msg)); diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index 57dc3c1e2..90791b5d6 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -1,3 +1,11 @@ +// Will calling Bangle.load reset everything? if false, we fast load +function loadWillReset() { + return Bangle.load === load || !Bangle.uiRemove; + /* FIXME: Maybe we need a better way of deciding if an app will + be fast loaded than just hard-coding a Bangle.uiRemove check. + Bangle.load could return a bool (as the load doesn't happen immediately). */ +} + /** * Listener set up in boot.js, calls into here to keep boot.js short */ @@ -26,11 +34,8 @@ exports.listener = function(type, msg) { if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true; else return; } - if (Bangle.load === load || !Bangle.uiRemove) { + if (loadWillReset()) { // no fast loading: store message to flash - /* FIXME: Maybe we need a better way of deciding if an app will - be fast loaded than just hard-coding a Bangle.uiRemove check. - Bangle.load could return a bool (as the load doesn't happen immediately). */ require("messages").save(msg); } else { if (!Bangle.MESSAGES) Bangle.MESSAGES = []; @@ -79,11 +84,17 @@ exports.listener = function(type, msg) { * @param {object} msg */ exports.open = function(msg) { - if (msg && msg.id && !msg.show) { - msg.show = 1; - if (Bangle.load === load) { - // no fast loading: store message to load in flash + if (msg && msg.id) { + // force a display by setting it as new and ensuring it ends up at the beginning of messages list + msg.new = 1; + if (loadWillReset()) { + // no fast loading: store message to load in flash - `msg` will be put in first require("messages").save(msg, {force: 1}); + } else { + // fast load - putting it at the end of Bangle.MESSAGES ensures it goes at the start of messages list + if (!Bangle.MESSAGES) Bangle.MESSAGES=[]; + Bangle.MESSAGES = Bangle.MESSAGES.filter(m => m.id!=msg.id) + Bangle.MESSAGES.push(msg); // putting at the } } diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 811f9baff..270d80543 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -2,7 +2,7 @@ "id": "messagegui", "name": "Message UI", "shortName": "Messages", - "version": "0.61", + "version": "0.62", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/apps/messages/lib.js b/apps/messages/lib.js index a710c81c4..f301a91cd 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -72,7 +72,7 @@ exports.apply = function(event, messages) { messages.splice(mIdx, 1); } else if (event.t==="add") { if (mIdx>=0) messages.splice(mIdx, 1); // duplicate ID! erase previous version - messages.unshift(event); + messages.unshift(event); // add at the beginning } else if (event.t==="modify") { if (mIdx>=0) messages[mIdx] = Object.assign(messages[mIdx], event); else messages.unshift(event); diff --git a/apps/messagesmusic/ChangeLog b/apps/messagesmusic/ChangeLog index 8cc3079a3..cd1c49b60 100644 --- a/apps/messagesmusic/ChangeLog +++ b/apps/messagesmusic/ChangeLog @@ -2,4 +2,5 @@ 0.02: Remove one line of code that didn't do anything other than in some instances hinder the function of the app. 0.03: Use the new messages library 0.04: Fix dependency on messages library - Fix loading message UI \ No newline at end of file + Fix loading message UI +0.05: Ensure we don't clear artist info diff --git a/apps/messagesmusic/app.js b/apps/messagesmusic/app.js index 26fedecc1..68e88c2d8 100644 --- a/apps/messagesmusic/app.js +++ b/apps/messagesmusic/app.js @@ -1 +1,2 @@ -setTimeout(()=>require('messages').openGUI({"t":"add","artist":" ","album":" ","track":" ","dur":0,"c":-1,"n":-1,"id":"music","title":"Music","state":"play","new":true})); +// don't define artist/etc here so we don't wipe them out of memory if they were stored from before +setTimeout(()=>require('messages').openGUI({"t":"add","id":"music","state":"show","new":true})); diff --git a/apps/messagesmusic/metadata.json b/apps/messagesmusic/metadata.json index 22e0eff52..eef528f55 100644 --- a/apps/messagesmusic/metadata.json +++ b/apps/messagesmusic/metadata.json @@ -1,7 +1,8 @@ { "id": "messagesmusic", "name":"Messages Music", - "version":"0.04", + "shortName": "Music", + "version":"0.05", "description": "Uses Messages library to push a music message which in turn displays Messages app music controls", "icon":"app.png", "type": "app", From 964ee01617fb2773a27e78047cace0291bc5b8ec Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 15 Dec 2022 11:41:27 +0000 Subject: [PATCH 295/342] Ensure that we hide widgets if in fullscreen mode (So that widgets are still hidden if launcher is fast-loaded) --- apps/iconlaunch/ChangeLog | 4 +++- apps/iconlaunch/app.js | 5 +++++ apps/iconlaunch/metadata.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/iconlaunch/ChangeLog b/apps/iconlaunch/ChangeLog index b03599ae6..0c33a4871 100644 --- a/apps/iconlaunch/ChangeLog +++ b/apps/iconlaunch/ChangeLog @@ -17,4 +17,6 @@ 0.12: Use Bangle.load and Bangle.showClock 0.13: Fix automatic switch to clock 0.14: Revert use of Bangle.load to classic load calls since widgets would -still be loaded when they weren't supposed to. + still be loaded when they weren't supposed to. +0.15: Ensure that we hide widgets if in fullscreen mode + (So that widgets are still hidden if launcher is fast-loaded) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index ccc39f3bb..acf695ddb 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -12,6 +12,8 @@ if (!settings.fullscreen) { Bangle.loadWidgets(); Bangle.drawWidgets(); + } else { // for fast-load, if we had widgets then we should hide them + require("widget_utils").hide(); } let launchCache = s.readJSON("iconlaunch.cache.json", true)||{}; let launchHash = s.hash(/\.info/); @@ -190,6 +192,9 @@ btn: _=> { if (settings.oneClickExit) Bangle.showClock(); }, remove: function() { if (timeout) clearTimeout(timeout); + if (settings.fullscreen) { // for fast-load, if we hid widgets then we should show them again + require("widget_utils").show(); + } } }; diff --git a/apps/iconlaunch/metadata.json b/apps/iconlaunch/metadata.json index 155e7bd9b..27f6386d3 100644 --- a/apps/iconlaunch/metadata.json +++ b/apps/iconlaunch/metadata.json @@ -2,7 +2,7 @@ "id": "iconlaunch", "name": "Icon Launcher", "shortName" : "Icon launcher", - "version": "0.14", + "version": "0.15", "icon": "app.png", "description": "A launcher inspired by smartphones, with an icon-only scrollable menu.", "tags": "tool,system,launcher", From cb4534a2afd17bca1f53d2985616f23f637bff35 Mon Sep 17 00:00:00 2001 From: dapgo Date: Thu, 15 Dec 2022 13:02:10 +0100 Subject: [PATCH 296/342] New app, and correction on widgets --- apps/tempmonitor/ChangeLog | 1 + apps/tempmonitor/README.md | 40 ++++++++ apps/tempmonitor/app.png | Bin 0 -> 2783 bytes apps/tempmonitor/metadata.json | 15 +++ apps/tempmonitor/photo_banglejs1.jpg | Bin 0 -> 1388563 bytes apps/tempmonitor/ss_emul_bjs1.png | Bin 0 -> 3602 bytes apps/tempmonitor/ss_emul_bjs2.png | Bin 0 -> 2494 bytes apps/tempmonitor/tempmonitor.app.js | 136 +++++++++++++++++++++++++++ apps/tempmonitor/tempmonitor.img | Bin 0 -> 579 bytes apps/tempmonitor/tempmonitor.info | 1 + apps/testuserinput/README.md | 2 +- apps/widclkbttm/ChangeLog | 2 + apps/widclkbttm/metadata.json | 2 +- apps/widclkbttm/widclkbttm.info | 1 + apps/widclkbttm/widclkbttm.wid.js | 6 +- apps/widhwbttm/ChangeLog | 2 +- apps/widhwbttm/metadata.json | 2 +- apps/widhwbttm/widhwbttm.info | 2 +- apps/widhwbttm/widhwbttm.wid.js | 12 ++- 19 files changed, 212 insertions(+), 12 deletions(-) create mode 100644 apps/tempmonitor/ChangeLog create mode 100644 apps/tempmonitor/README.md create mode 100644 apps/tempmonitor/app.png create mode 100644 apps/tempmonitor/metadata.json create mode 100644 apps/tempmonitor/photo_banglejs1.jpg create mode 100644 apps/tempmonitor/ss_emul_bjs1.png create mode 100644 apps/tempmonitor/ss_emul_bjs2.png create mode 100644 apps/tempmonitor/tempmonitor.app.js create mode 100644 apps/tempmonitor/tempmonitor.img create mode 100644 apps/tempmonitor/tempmonitor.info create mode 100644 apps/widclkbttm/widclkbttm.info diff --git a/apps/tempmonitor/ChangeLog b/apps/tempmonitor/ChangeLog new file mode 100644 index 000000000..2d9536fb9 --- /dev/null +++ b/apps/tempmonitor/ChangeLog @@ -0,0 +1 @@ +0.01: 1st version: saves values to csv diff --git a/apps/tempmonitor/README.md b/apps/tempmonitor/README.md new file mode 100644 index 000000000..094a47868 --- /dev/null +++ b/apps/tempmonitor/README.md @@ -0,0 +1,40 @@ +# Temperature Monitor (with logging) +Temperature monitor that shows temperature on real time but also allows to store in a file for a later process. + +Compatible with BangleJS1,BangleJS2,and EMSCRIPTENx emulators + +## Pictures: + +Bangle JS1 + +![](photo_banglejs1.jpg) + +Screenshot BJS2 + +![](ss_emul_bjs2.png) + +Screenshot BJS1 + +![](ss_emul_bjs1.png) + + + +## Usage + +Open and see a temperature in the screen +Download the CSV file and process in your favourite spreadsheet software + +## Features + +Colours, all inputs , graph, widgets loaded +Counter for Times Display + + +## Controls + +exit: left side + + +## Creator + +Daniel Perez \ No newline at end of file diff --git a/apps/tempmonitor/app.png b/apps/tempmonitor/app.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e576134a1c7bc69947fbcd26b3ab42e0fe9cc3 GIT binary patch literal 2783 zcmV<53Ly1~P)(efR9%-OcVM**r)fF;5HuBnm_*CNfxxZynni znXx`#oQ`D}pM6MRaoEm~yGSWaXSBAqV`&w&TB~Dc@KKy16F{X!ji3Z2LI{L6$!1^o z?!D*hADh?a0eMcx-%MtbbH4kX-|w97eCInSz;_%pkKPeWI6tT7=js_5DgBqjxUImVK)`9(?Ew%y=};9}In_()o}~LMpGr+f!jq#h{@}X$ z`akN4#1rE+?zpVL_4W005)SoK0#;4QbJE6he8i8`(Y;O-I60b%QsJW$bQ@T0pI) zRU`;6f%)1=*$zxCal>Z2{DNkt+c9@mhWO@a1ZU3c5MpeJaO47*saDfgg0RUh6#JE> z9^_;VKI=mcYEw`-)r+!XH&pxBqIg6C7H!;^Z*JJ|Cnmbhmu}~ZGA}vQ(GwUed0+$r zYJ?DpqCv^2wGmlfq6#pM(eMko|E@!7$4 zfcZ_CNc?1PAaLPQ_Lme;8w}pe%v*^lx1=ylxnjzIQ-4Bm{A3JATcZr{S%8)eR*H0E zPyq`zZ+3}zd;SfnnYk)I z*Mah4&yWX9w=-S01OPZ3!Wv3!G;X2stB^%f(lup{?H_()+}F1vU9f)rJfSEW1B(mu zT_`Jd4=KX37)OqUaq6rNB5G7j^R8V_J@u`UoKe1ynX6`2cu`U29g=)3ZlUo|NM@xG zmj56F#C)%zTTNda3dy)`rPxZzIM@`jRKfJ*-Py{r@B5zbOCA9Bu3h^{!|K&bK(wXx zR1Bxi#)lLj1finLir(KC?d`A={dxDAHFwqqgP%v^*7y2;+jb^yO)qvSrIYNmbw>yOb2zpZ zz!3ni0O$nKOlE$94CBFCr}Kx9(r=pbqjMK^Wm-&p!71uK@t~ z{eY%@s~cACU;{O*UcFw`fn$R&mo@Hvr5BXd?)3 zwVgBn*?25|n=e!4k=9%j5<&pr_1I8UkcQn~#_-C{P|tqwxfRSV?@g0mpER)LtqT@| zxT4fE;;L&xLZ}-hg~`%j_m>fT)*O=yrl%<-c`8%^obR;IcvR=FT6A(b1*)cd#b|DK zV-?WC%&!p9JphUZGbkx^BP&xy%gH!>@L7bJBR#Y1bP8E|gRfV0T^dPQFn5Klop}?VvF<7Gh!ABK?(poa%a{kDEH!{ zrWp1$#fG&hh9w|jG7cOHNuO8n(uH0CfW-h2sQ^Gk4>QY|7ut<70GL*o^3XMC4U-Bk zGA+8YBWh8$SKvt7W&bTOG6Ah^QCN~`#jTl&O%OJ{aREn98vtt)?|HFstiNi<$4+qiF{L%;;_>qI)WfX&ZoN$6bI> zNJisQ0RWFn!MTnEWLK^{+ioy`vjD(ES^aY;DZEiyxC#J>Xq5s~c6H4Fu$!412rv>t z?5)oFX~(DSFN}o$@C2lL?c&ShhGkkTZk*%Bwtt84;ycFy0HKIU(+kzt?r3=0`}Qtt zK)i2RQLwi=hX5mCvuy97=*OojO_C<16X5gYLBqN=nRx6M!ghlI85 zNP2qP(p5l%-~Tdzmw|zyH4=2c%-tiUe2Ius(rQUz8j1?iQa*^qEu229BNn&70Mc9n zc{vWaoC3#Mqd0aVif2~l_t-!3+^L>@O$0o6VK98O#?d+ctX=fTa@$#LMi`E+r%0YE~Ctv1tC l85r5W8~;z}o6WxS_#c6YTU}Jf{YL-*002ovPDHLkV1oJ}KH~rY literal 0 HcmV?d00001 diff --git a/apps/tempmonitor/metadata.json b/apps/tempmonitor/metadata.json new file mode 100644 index 000000000..50842150c --- /dev/null +++ b/apps/tempmonitor/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "tempmonitor", + "name": "Temperature monitor", + "version": "0.01", + "description": "Displays the current temperature and stores in a CSV file", + "icon": "app.png", + "tags": "tool", + "supports": ["BANGLEJS", "BANGLEJS2"], + "screenshots": [{"url":"photo_banglejs1.jpg"}], + "allow_emulator": true, + "storage": [ + {"name":"tempmonitor.app.js","url":"tempmonitor.app.js"}, + {"name":"tempmonitor.img","url":"tempmonitor.img","evaluate":true} + ] +} diff --git a/apps/tempmonitor/photo_banglejs1.jpg b/apps/tempmonitor/photo_banglejs1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58c64b01c301fbd45ac1775cf838e168bd5b3aa2 GIT binary patch literal 1388563 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

tAio7>y5> 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℞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

PpsggtMQNG{-bBUHgm{f6e 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%0A$m!`azbd99=jql6y}m`e?Sgo}GJM7;DZsQ) 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

  • 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 z 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 z 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

    qw$xv%mLxB1e! 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∋bgJi5TLK)#SycKmUDa6b~HIa6pNR%JW%###GN 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 z

    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

    ?TEYvYm;<=6u2&zbP7yrya=c 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

    T2jH>MbOM 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 Av;Y7A literal 0 HcmV?d00001 diff --git a/apps/tempmonitor/ss_emul_bjs1.png b/apps/tempmonitor/ss_emul_bjs1.png new file mode 100644 index 0000000000000000000000000000000000000000..da7a53bd1a40e1548e1babffcb52dfdc209f896d GIT binary patch literal 3602 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 literal 0 HcmV?d00001 diff --git a/apps/tempmonitor/ss_emul_bjs2.png b/apps/tempmonitor/ss_emul_bjs2.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4f8ec6c676b7eed6e6184e80d4615b9c32eeed GIT binary patch literal 2494 zcmeH}`#;l*AIE3k(KhAUC^;+CQWm8zZE`tBE=k8NLyd6=ownI1* zG8#7X-NuL1+$wxCw=nk{p=grZj`RIDzUPPc`}KG|-mf3tKfRytR5usL9dI2u2n5>U zblT2iOJDw7P^GP2Svx`45``-sj<%qRce*nm5G=~c?ibG}!d$`ZweiE-9kRbCeCk-N zDNd%U^S)t^t*z%pUPd>D;NPf_=QG9Q;nkbh8{{?lnAbWFuBr8%k`5y=%aE?MM=hxFxoRqbw&!PT#nybE|+2>5y{|2q60MTkf z-Ls+Zr61`z!6qLemo;r3w{JeI@DP|x%EJXBKXn@42YjTW#YMW~mk;Wj3wjke_skXs zunV=1n(#49mYEewkxLjqA2swSKLw)q=FK{1)HEoCz`|Rd8oD1v-4=9{j4@0Oz)d+u zU>zxK3svbyQH?n`!murED&4=_o0dc4!2HMX&N%yrFcD$U2W_n0(z zT>am8-DCRl@p#VHWkus{?UgELTy=}3QR>(}an@yLdR=Qo%| z(}?Px`VMzS(dsQ=A@^N3I2V(3vCgjU-=Q0pGEKVriqoUoLefvfp(^LrCFRGw`Z=!a zPr3!Q+#uLpd2pfYg+AzN_w#bAW9TQmff|X3d7lgac%cp28RwbyG*?ZO!k4T@PECv8 zbthaXejDx~sTS4cfPQ^343!8pCc^eQgXlp&G_3A}z}xDt+?f1WM zAZi$YvC6AU>7MtcU>tFTf856NIkZushTDkHOZ>xf5oc%*f(Sy%&nn`_vleQRS-?JaGJd9 zJ3(0R7|aN{m|Y_qO)detuy*|65%YDpkR7v-$Ay+Zxa)#6p$mv@C7=Yh&}MGQ?#Ci; zR4!lllFo5<(5>9}X5IuAwiCf4%F)rv;UBGXp-__MN(sUlsy$z8akju2w<{uAWhb@L(M}D?6>kPU+p2U-(2tjQG7mtUZ$F-1sO;K&v1FOqd+Aj2=8ljA zfAWW<0k6~c8SV|jjLi6_)|2k_w)p>mjV3%MzG!^V2;I-QK!ET%9&q0F7*R9mHb;VU z^sDloSR9V9GhMya*KXZ>Xe+v+)T+P6F9+_rrLqkY0Sn1R_`XCy!3|dSf9+nz&5X$@ z(7Cw(PIT0|J>$)s>@E*)U+}D+>KHs^UK!UWdWd=YE|e zJBsmSVusHY`oiQhfJI-13|S0W3~QF2=$ed<9WSo$N#30*+0*;UCtjGNr_G-*AJaYX zv2-tMyld>)iYuMycFur^;QG#JeQj&RALK|X%EPqiL~zxQLQ%%$+iM>5&BrYvtpBZ@`6Z@i{WK(W> zXWmzWDV!S~ww);W_8cgS;7Wu{d=%Tn;E@PFSpv7rdT;uJwTm^*6g)a`>uIIq;91eO zFkH`oMU>a3aJ4tAfIA*6U`|Bed@-~bf_i0IA@R7#OE9Zo3SJq?Kk+9wqKMYZ!)D8A z>&L*El3Z?N7@3S8&cOFHpty?lwSZ`|;0TrCV(lPJ36?Aqkonu_0pQO!p-N|0e70EG zp8KhBi1) console.log("v_temp in "+v_temp); + ClearBox(); + //g.setFont("6x8",2).setFontAlign(0,0); + g.setFontVector(v_font_size1).setFontAlign(0,0); + var x = (rect.x+rect.x2)/2; + var y = (rect.y+rect.y2)/2 + 20; + g.drawString("Records:"+v_saved_entries, x, rect.y+30); + g.drawString("Temperature:", x, rect.y+35+v_font_size1); + //dynamic font (g.getWidth() > 200 ? 60 : 40) + g.setFontVector(v_font_size2).setFontAlign(0,0); + // Avg of temperature readings + while (history.length>4) history.shift(); + history.push(v_temp); + var avrTemp = E.sum(history) / history.length; + //var t = require('locale').temp(avrTemp); + //.replace("'","°"); + lastMeasure=avrTemp.toString(); + if (lastMeasure.length>4) lastMeasure=lastMeasure.substr(0,4); + //DRAW temperature in the center + g.drawString(v_temp+v_t_symbol, x, y); + g.flip(); +} +// from: BJS2 pressure sensor, BJS1 inbuilt thermistor +function drawTemperature() { + if(v_model.substr(0,10)!='EMSCRIPTEN'){ + if (Bangle.getPressure) { + Bangle.getPressure().then(p =>{if (p) onTemperature(p);}); + } else onTemperature(E.getTemperature()); + } + else onTemperature(11);//fake temp for emulators +} + +function saveToFile() { + //input global vars: lastMeasure + var a=new Date(); + var strlastSaveTime=new String(); + var strlastSaveTime=a.toISOString(); + //strlastSaveTime=strlastSaveTime.concat(a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes());; + if (v_mode_debug==1) console.log("saving="+strlastSaveTime+","+lastMeasure); + + if (v_saveToFile=='Y'){ + require("Storage").open(filename,"a").write(strlastSaveTime+","+lastMeasure+"\n"); + //(getTime()+","); + v_saved_entries=v_saved_entries+1; + } +} + +function drawGraph(){ + var img_obj_thermo = { + width : 36, height : 36, bpp : 3, + transparent : 0, + buffer : require("heatshrink").decompress(atob("AEFt2AMKm3bsAMJjdt23ABhEB+/7tgaJ///DRUP//7tuADRP923YDRXbDRfymwaJhu/koaK7eyiwaK3cLDRlWDRY1NKBY1Ztu5kjmJg3cyVI7YMHgdu5Mkyu2fxHkyVJjdgDRFJkmRDRPsDQNbDQ5QBGoONKBJrBoxQIQwO2eRcbtu24AMIFIQLJAH4AMA==")) + }; + g.drawImage(img_obj_thermo,rect.x2-50,rect.y2/2); + g.flip(); +} +function ClearScreen(){ + //avoid widget areas + g.reset(1).clearRect(rect.x, rect.y+24, rect.x2, rect.y2-24); + g.flip(); +} +function ClearBox(){ + //custom boxarea , left space for static graph at right + g.reset(1).clearRect(rect.x, rect.y+24, rect.x2-50, rect.y2-24); + g.flip(); +} +function introPage(){ + //g.setFont("6x8",2).setFontAlign(0,0); + g.setFontVector(v_font_size1).setFontAlign(-1,0); + //x alignment. -1=left (default), 0=center, 1=right + var x=3; + //dynamic positions as height for BJS1 is double than BJS2 + var y = (rect.y+rect.y2)/2 + 10; + g.drawString(" Default values ", x, y - ((v_font_size1*3)+2)); + g.drawString("--------------------", x, y - ((v_font_size1*2)+2)); + g.drawString("Mode debug: "+v_mode_debug, x, y - ((v_font_size1*1)+2)); + g.drawString("Read freq(ms): "+readFreq, x, y ); + g.drawString("Save to file: "+v_saveToFile, x, y+ ((v_font_size1*1)+2) ); + g.drawString("Save freq(ms):"+saveFreq, x, y+((v_font_size1*2)+2) ); + fr=require("Storage").read(filename+"\1");//suffix required + if (fr) g.drawString("Current filesize:"+fr.length.toString()+"kb", x, y+((v_font_size1*3)+2) ) + else g.drawString("File not exist", x, y+((v_font_size1*3)+2)); +} +//MAIN +Bangle.loadWidgets(); +Bangle.setUI({ + mode : "custom", + back : function() {load();} +}); + +ClearScreen(); +introPage(); + +setInterval(function() { + drawTemperature(); +}, readFreq); //ms + +if (v_saveToFile=="Y") { + setInterval(function() { + saveToFile(); + }, saveFreq); //ms +} +setTimeout(ClearScreen, 3500); +setTimeout(drawGraph,4000); +setTimeout(drawTemperature,4500); \ No newline at end of file diff --git a/apps/tempmonitor/tempmonitor.img b/apps/tempmonitor/tempmonitor.img new file mode 100644 index 0000000000000000000000000000000000000000..2751097591a5d4cb2072d1e511cb9ab96f9ad5d8 GIT binary patch literal 579 zcmZ{iu}T9$5QZ1G&TVbwE2Ol$r`QxWsTC9p?UeWkHdfa5O9EDgTiC+ZW)-|ruCv&% zTp=W^|IFPb8^M7KAH(d-KmTMrJ`n$e3W{Pp*mhzFf?$4|5-?$=~KZhgq<0 zPeZN^ywjZgWYxk4?1EX-yIXB&NAShrkv9GAH?!9V(|dBY`tpNU*Kcvll!wnMz#pn- r&%xY>Z{hs(eo0-;}}_pk%q@#XOg0-hVi literal 0 HcmV?d00001 diff --git a/apps/tempmonitor/tempmonitor.info b/apps/tempmonitor/tempmonitor.info new file mode 100644 index 000000000..1824c5c86 --- /dev/null +++ b/apps/tempmonitor/tempmonitor.info @@ -0,0 +1 @@ +{"id":"tempmonitor","name":"tempmonitor","src":"tempmonitor.app.js","icon":"tempmonitor.img","version":"0.01","files":"tempmonitor.info,tempmonitor.app.js,tempmonitor.img"} \ No newline at end of file diff --git a/apps/testuserinput/README.md b/apps/testuserinput/README.md index 47c1779be..7e1160bfb 100644 --- a/apps/testuserinput/README.md +++ b/apps/testuserinput/README.md @@ -43,7 +43,7 @@ Colours, font, user input, image, load widgets - Press center area - Prints Touch3 - Swipe Left - Displays Switch OFF image - Swipe Right - Displays Switch ON image - - BTN1 - Prints Button1 + - BTN1 - Prints Button1, Down (moves selection to next row) - BTN2 - Prints Button2 - BTN3 - Quit to Launcher diff --git a/apps/widclkbttm/ChangeLog b/apps/widclkbttm/ChangeLog index 9dc8f8d2c..a7141a7dd 100644 --- a/apps/widclkbttm/ChangeLog +++ b/apps/widclkbttm/ChangeLog @@ -2,3 +2,5 @@ 0.02: Modification for bottom widget area and text color 0.03: based in widclk v0.05 compatible at same time, bottom area and color 0.04: refactored to use less memory, and allow turning on/off when quick-switching apps +0.05: Different font size for bangle.js2 and bangle.js1 + diff --git a/apps/widclkbttm/metadata.json b/apps/widclkbttm/metadata.json index 7c5fe4b63..2bcd6bc58 100644 --- a/apps/widclkbttm/metadata.json +++ b/apps/widclkbttm/metadata.json @@ -2,7 +2,7 @@ "id": "widclkbttm", "name": "Digital clock (Bottom) widget", "shortName": "Digital clock Bottom Widget", - "version": "0.04", + "version": "0.05", "description": "Displays time in the bottom of the screen (may not be compatible with some apps)", "icon": "widclkbttm.png", "type": "widget", diff --git a/apps/widclkbttm/widclkbttm.info b/apps/widclkbttm/widclkbttm.info new file mode 100644 index 000000000..ac349a3dc --- /dev/null +++ b/apps/widclkbttm/widclkbttm.info @@ -0,0 +1 @@ +{"id":"widclkbttm.wid.js","name":"Digital clock bttom widget","type":"widget","version":"0.05","files":"widclkbttm.info,widclkbttm.wid.js"} \ No newline at end of file diff --git a/apps/widclkbttm/widclkbttm.wid.js b/apps/widclkbttm/widclkbttm.wid.js index c5e85318c..74957826b 100644 --- a/apps/widclkbttm/widclkbttm.wid.js +++ b/apps/widclkbttm/widclkbttm.wid.js @@ -1,10 +1,12 @@ WIDGETS["wdclkbttm"]={area:"br",width:Bangle.CLOCK?0:60,draw:function() { if (!Bangle.CLOCK == !this.width) { // if we're the wrong size for if we have a clock or not... - this.width = Bangle.CLOCK?0:60; + this.width = Bangle.CLOCK?0:60; return setTimeout(Bangle.drawWidgets,1); // widget changed size - redraw } if (!this.width) return; // if size not right, return - g.reset().setFont("6x8", 2).setFontAlign(-1, 0).setColor("#0ff"); // cyan + if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=16 + else v_font_size=13; + g.reset().setFontVector(v_font_size).setFontAlign(-1, 0); var time = require("locale").time(new Date(),1); g.drawString(time, this.x, this.y+11, true); // 5 * 6*2 = 60 // queue draw in one minute diff --git a/apps/widhwbttm/ChangeLog b/apps/widhwbttm/ChangeLog index 1d7b3be61..23192b302 100644 --- a/apps/widhwbttm/ChangeLog +++ b/apps/widhwbttm/ChangeLog @@ -1,2 +1,2 @@ 0.01: 1st ver, inspired in some code from widclkbttm (Digital clock bttom widget) - +0.02: Correction, intervals, dynamic color and font size depending on device diff --git a/apps/widhwbttm/metadata.json b/apps/widhwbttm/metadata.json index 053be5a36..f455e90a7 100644 --- a/apps/widhwbttm/metadata.json +++ b/apps/widhwbttm/metadata.json @@ -2,7 +2,7 @@ "id": "widhwbttm", "name": "HW stats (Bottom) widget", "shortName": "Digital clock Bottom Widget", - "version": "0.01", + "version": "0.02", "description": "Displays technical info and mem stats in the bottom of the screen (may not be compatible with some apps)", "icon": "widhwbttm.png", "type": "widget", diff --git a/apps/widhwbttm/widhwbttm.info b/apps/widhwbttm/widhwbttm.info index c92adad11..e73dfcc89 100644 --- a/apps/widhwbttm/widhwbttm.info +++ b/apps/widhwbttm/widhwbttm.info @@ -1 +1 @@ -{"id":"widhwbttm.wid.js","name":"hw stats bttom widget","type":"widget","version":"0.01","files":"widhwbttm.info,widhwbttm.wid.js"} \ No newline at end of file +{"id":"widhwbttm.wid.js","name":"hw stats bttom widget","type":"widget","version":"0.02","files":"widhwbttm.info,widhwbttm.wid.js"} \ No newline at end of file diff --git a/apps/widhwbttm/widhwbttm.wid.js b/apps/widhwbttm/widhwbttm.wid.js index d251cf2f0..688ceaa7e 100644 --- a/apps/widhwbttm/widhwbttm.wid.js +++ b/apps/widhwbttm/widhwbttm.wid.js @@ -1,7 +1,8 @@ (function() { + let intervalRef = null; var v_switch; // show stats - if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=16 - else v_font_size=13; + if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=15 + else v_font_size=12; var v_str_hw=new String(); if (v_switch == null || v_switch == '') v_switch=0; function draw(){ @@ -35,11 +36,12 @@ v_switch=0; } } - g.reset().setFontVector(v_font_size).setFontAlign(-1, 0).setColor("#0ff"); - //clean a longer previous string - g.drawString(" ", this.x, this.y+11, true); + g.reset().setFontVector(v_font_size).setFontAlign(-1, 0); + //clean a longer previous string, care with br widgets + g.drawString(" ", this.x, this.y+11, true); g.drawString(v_str_hw, this.x, this.y+11, true); } //end draw WIDGETS["wdhwbttm"]={area:"bl",width:Bangle.CLOCK?0:60,draw:draw}; +if (Bangle.isLCDOn) intervalRef = setInterval(()=>WIDGETS["wdhwbttm"].draw(), 10*1000); })() From 316631cccce53db1722126f836e52c518897c80f Mon Sep 17 00:00:00 2001 From: dapgo Date: Thu, 15 Dec 2022 13:19:37 +0100 Subject: [PATCH 297/342] replace img by code --- apps/tempmonitor/app-icon.js | 1 + apps/tempmonitor/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 apps/tempmonitor/app-icon.js diff --git a/apps/tempmonitor/app-icon.js b/apps/tempmonitor/app-icon.js new file mode 100644 index 000000000..807f58d38 --- /dev/null +++ b/apps/tempmonitor/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4X/AoPzvswnmT54cQgWAhWq1ALGlWoBZOptUKqtoBQsK0ta1QLHlWVqwLHgWpqtVtQLGEQILBrQLGCYIADBYgiDBY8KyoLJIQIAEtQiDHIQADrWALgYLFqyECEQpiDLggHC1QdBrWgEQVqAQOmLAQkBlIUB02lq28gFpKoQLBq2+1NW+2qGwVolQIB20prPaBYVq1ALCuwLB8sC02VBYMAhILB1Nb/uqgWVsBfBBYdZ/wLIEYP//TwBC41a/9v+wLHq1/7/6BYxjBz//9IXHqtpuqWBBY9aOwQjHAAYXHBZSNBAAOpBYsq3//AAPZBYda+wLJrawB34GBgwLEs9l0QLChILFz9i3+qxWrBYuvC4ILB1ALEtdqy2/4WKgALErPVuwXIrV/7QLIqxyB3+f4EoBYUqUgVVC4N60/ZtWolS4BAAO/qv1r/ZrWoV4iDEqtolSjDAAojBBZRIBABIA=")) \ No newline at end of file diff --git a/apps/tempmonitor/metadata.json b/apps/tempmonitor/metadata.json index 50842150c..bba8c6095 100644 --- a/apps/tempmonitor/metadata.json +++ b/apps/tempmonitor/metadata.json @@ -10,6 +10,6 @@ "allow_emulator": true, "storage": [ {"name":"tempmonitor.app.js","url":"tempmonitor.app.js"}, - {"name":"tempmonitor.img","url":"tempmonitor.img","evaluate":true} + {"name":"tempmonitor.img","url":"app-icon.js","evaluate":true} ] } From 1fb5c0433d22a2af2b7f5b7e9045fa4703b21281 Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Thu, 15 Dec 2022 21:05:52 +0300 Subject: [PATCH 298/342] clkinfo: repeating selection if menu is empty --- modules/clock_info.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/clock_info.js b/modules/clock_info.js index 6f37e5d3d..643a9f6f7 100644 --- a/modules/clock_info.js +++ b/modules/clock_info.js @@ -239,10 +239,15 @@ exports.addInteractive = function(menu, options) { } else if (lr) { if (menu.length==1) return; // 1 item - can't move oldMenuItem = menu[options.menuA].items[options.menuB]; - options.menuA += lr; - if (options.menuA<0) options.menuA = menu.length-1; - if (options.menuA>=menu.length) options.menuA = 0; - options.menuB = 0; + do { + options.menuA += lr; + if (options.menuA<0) options.menuA = menu.length-1; + if (options.menuA>=menu.length) options.menuA = 0; + options.menuB = 0; + //get the next one if the menu is empty + //can happen for dynamic ones (alarms, events) + //in the worst case we come back to 0 + } while(menu[options.menuA].items.length==0); } if (oldMenuItem) { menuHideItem(oldMenuItem); From 650d04ab99c73df53cf123fe0111bbc940a82007 Mon Sep 17 00:00:00 2001 From: dapgo Date: Thu, 15 Dec 2022 23:59:52 +0100 Subject: [PATCH 299/342] corrections suggested on #2404 --- apps/tempmonitor/tempmonitor.app.js | 13 +++--- apps/widclkbttm/widclkbttm.info | 1 - apps/widclkbttm/widclkbttm.wid.js | 4 +- apps/widhwbttm/widhwbttm.info | 1 - apps/widhwbttm/widhwbttm.wid.js | 64 +++++++++++++++++------------ 5 files changed, 45 insertions(+), 38 deletions(-) delete mode 100644 apps/widclkbttm/widclkbttm.info delete mode 100644 apps/widhwbttm/widhwbttm.info diff --git a/apps/tempmonitor/tempmonitor.app.js b/apps/tempmonitor/tempmonitor.app.js index 514378151..36b4bb654 100644 --- a/apps/tempmonitor/tempmonitor.app.js +++ b/apps/tempmonitor/tempmonitor.app.js @@ -23,7 +23,7 @@ if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') { v_font_size2=60; //g.setColor("#0ff"); //light color }else{ - v_font_size1=10; + v_font_size1=11; v_font_size2=40; //g.setColor("#000"); //black or dark } @@ -35,8 +35,8 @@ function onTemperature(v_temp) { g.setFontVector(v_font_size1).setFontAlign(0,0); var x = (rect.x+rect.x2)/2; var y = (rect.y+rect.y2)/2 + 20; - g.drawString("Records:"+v_saved_entries, x, rect.y+30); - g.drawString("Temperature:", x, rect.y+35+v_font_size1); + g.drawString("Records: "+v_saved_entries, x, rect.y+35); + g.drawString("Temperature:", x, rect.y+37+v_font_size1); //dynamic font (g.getWidth() > 200 ? 60 : 40) g.setFontVector(v_font_size2).setFontAlign(0,0); // Avg of temperature readings @@ -48,7 +48,8 @@ function onTemperature(v_temp) { lastMeasure=avrTemp.toString(); if (lastMeasure.length>4) lastMeasure=lastMeasure.substr(0,4); //DRAW temperature in the center - g.drawString(v_temp+v_t_symbol, x, y); + g.drawString(" ", x-20, y); + g.drawString(v_temp+v_t_symbol, x-20, y); g.flip(); } // from: BJS2 pressure sensor, BJS1 inbuilt thermistor @@ -65,7 +66,7 @@ function saveToFile() { //input global vars: lastMeasure var a=new Date(); var strlastSaveTime=new String(); - var strlastSaveTime=a.toISOString(); + strlastSaveTime=a.toISOString(); //strlastSaveTime=strlastSaveTime.concat(a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes());; if (v_mode_debug==1) console.log("saving="+strlastSaveTime+","+lastMeasure); @@ -109,7 +110,7 @@ function introPage(){ g.drawString("Save to file: "+v_saveToFile, x, y+ ((v_font_size1*1)+2) ); g.drawString("Save freq(ms):"+saveFreq, x, y+((v_font_size1*2)+2) ); fr=require("Storage").read(filename+"\1");//suffix required - if (fr) g.drawString("Current filesize:"+fr.length.toString()+"kb", x, y+((v_font_size1*3)+2) ) + if (fr) g.drawString("Current filesize:"+fr.length.toString()+"kb", x, y+((v_font_size1*3)+2) ); else g.drawString("File not exist", x, y+((v_font_size1*3)+2)); } //MAIN diff --git a/apps/widclkbttm/widclkbttm.info b/apps/widclkbttm/widclkbttm.info deleted file mode 100644 index ac349a3dc..000000000 --- a/apps/widclkbttm/widclkbttm.info +++ /dev/null @@ -1 +0,0 @@ -{"id":"widclkbttm.wid.js","name":"Digital clock bttom widget","type":"widget","version":"0.05","files":"widclkbttm.info,widclkbttm.wid.js"} \ No newline at end of file diff --git a/apps/widclkbttm/widclkbttm.wid.js b/apps/widclkbttm/widclkbttm.wid.js index 74957826b..2278b5380 100644 --- a/apps/widclkbttm/widclkbttm.wid.js +++ b/apps/widclkbttm/widclkbttm.wid.js @@ -4,9 +4,7 @@ WIDGETS["wdclkbttm"]={area:"br",width:Bangle.CLOCK?0:60,draw:function() { return setTimeout(Bangle.drawWidgets,1); // widget changed size - redraw } if (!this.width) return; // if size not right, return - if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=16 - else v_font_size=13; - g.reset().setFontVector(v_font_size).setFontAlign(-1, 0); + g.reset().setFont("6x8", 2).setFontAlign(-1, 0); var time = require("locale").time(new Date(),1); g.drawString(time, this.x, this.y+11, true); // 5 * 6*2 = 60 // queue draw in one minute diff --git a/apps/widhwbttm/widhwbttm.info b/apps/widhwbttm/widhwbttm.info deleted file mode 100644 index e73dfcc89..000000000 --- a/apps/widhwbttm/widhwbttm.info +++ /dev/null @@ -1 +0,0 @@ -{"id":"widhwbttm.wid.js","name":"hw stats bttom widget","type":"widget","version":"0.02","files":"widhwbttm.info,widhwbttm.wid.js"} \ No newline at end of file diff --git a/apps/widhwbttm/widhwbttm.wid.js b/apps/widhwbttm/widhwbttm.wid.js index 688ceaa7e..ec7b568a0 100644 --- a/apps/widhwbttm/widhwbttm.wid.js +++ b/apps/widhwbttm/widhwbttm.wid.js @@ -1,47 +1,57 @@ (function() { let intervalRef = null; var v_switch; // show stats - if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') v_font_size=15 - else v_font_size=12; var v_str_hw=new String(); + if (process.env.BOARD=='BANGLEJS'||process.env.BOARD=='EMSCRIPTEN') var v_font_size=16; + else var v_font_size=14; if (v_switch == null || v_switch == '') v_switch=0; - function draw(){ - if (!Bangle.CLOCK == !this.width) { // if we're the wrong size for if we have a clock or not... - this.width = Bangle.CLOCK?0:60; - return setTimeout(Bangle.drawWidgets,1); // widget changed size - redraw - } - if (!this.width) return; // if size not right, return + function draw(){ + if (Bangle.CLOCK) return; - if (v_switch==0) { - //var v_hw=process.memory(); - v_str_hw=process.memory().free+"/"+process.memory().total; - v_switch++; - } else if (v_switch==1) { + if (v_switch==0) { // var v_hw=process.env.VERSION; - v_str_hw="V:"+process.env.VERSION; - v_switch++; - } else if (v_switch==2) { - v_str_hw="M:"+process.env.BOARD; + v_str_hw="V "+process.env.VERSION.substr(0,6); + v_switch++; + } else if (v_switch==1) { + v_str_hw=process.env.BOARD.substr(0,3)+".."+process.env.BOARD.substr(process.env.BOARD.length-3,3); + v_switch++; + } + else if (v_switch==2) { + v_str_hw="Bat "+E.getBattery()+"%"; v_switch++; - } else { - stor=require("Storage").getStats(); - if (v_switch==3) { - v_str_hw="St:"+stor.freeBytes; + } + else { + // text prefix has to be 4char + stor=require("Storage").getStats(); + if (v_switch==3) { + v_str_hw="Fre "+process.memory().free; + //+"/"+process.memory().total; + v_switch++; + } + else if (v_switch==4) { + v_str_hw="Sto "+stor.freeBytes; v_switch++; - } else if (v_switch==4) { - v_str_hw="TrB:"+stor.trashBytes; + } else if (v_switch==5) { + v_str_hw="Tra "+stor.trashBytes; v_switch++; - } else if (v_switch==5) { - v_str_hw="Fil:"+stor.fileCount; + } else if (v_switch==6) { + v_str_hw="Fil "+stor.fileCount; v_switch=0; } - } + // 4 char are prefix + if (v_str_hw.length>7) { + //replace 3 digits by k + //substring betw x and y + v_str_hw=v_str_hw.substr(0,v_str_hw.length-3)+"k"; + } + } //else storage g.reset().setFontVector(v_font_size).setFontAlign(-1, 0); //clean a longer previous string, care with br widgets g.drawString(" ", this.x, this.y+11, true); g.drawString(v_str_hw, this.x, this.y+11, true); } //end draw -WIDGETS["wdhwbttm"]={area:"bl",width:Bangle.CLOCK?0:60,draw:draw}; +WIDGETS["wdhwbttm"]={area:"bl",width:60,draw:draw}; +//{area:"bl",width:Bangle.CLOCK?0:60,draw:draw}; if (Bangle.isLCDOn) intervalRef = setInterval(()=>WIDGETS["wdhwbttm"].draw(), 10*1000); })() From 993af2903e775cfa83bb15675dabc45ff4ea7fda Mon Sep 17 00:00:00 2001 From: dapgo Date: Fri, 16 Dec 2022 00:16:48 +0100 Subject: [PATCH 300/342] photos and screenshots --- apps/tempmonitor/ss_emul_bjs1.png | Bin 3602 -> 3429 bytes apps/tempmonitor/ss_emul_bjs2.png | Bin 2494 -> 2510 bytes apps/widhwbttm/widhwbttm.ss1.jpg | Bin 43280 -> 133689 bytes apps/widhwbttm/widhwbttm.ss2.jpg | Bin 39727 -> 514293 bytes apps/widhwbttm/widhwbttm.ss3.jpg | Bin 0 -> 675 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/widhwbttm/widhwbttm.ss3.jpg diff --git a/apps/tempmonitor/ss_emul_bjs1.png b/apps/tempmonitor/ss_emul_bjs1.png index da7a53bd1a40e1548e1babffcb52dfdc209f896d..1865ebc85fa7f387c9859486f51e841f5cdf278e 100644 GIT binary patch literal 3429 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 aeNvLInLPO+o5lM#A*?Oz&8tmG*Zu{D66jz6 literal 3602 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 diff --git a/apps/tempmonitor/ss_emul_bjs2.png b/apps/tempmonitor/ss_emul_bjs2.png index 4d4f8ec6c676b7eed6e6184e80d4615b9c32eeed..1cc2140f9e4280fdb778b4e25d0af082963742c4 100644 GIT binary patch literal 2510 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 oRR$3Z&icW!8T`K2a7rpPZ|FJ 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

    yzkh5|oMaj*eKV9rK6_YVrGiC{ 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�>c-1!v^ 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


    kokc|==MUv7Ki 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

    5z?RwLAHC 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

    4&g&YPzGPy5lc> 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 diff --git a/apps/widhwbttm/widhwbttm.ss3.jpg b/apps/widhwbttm/widhwbttm.ss3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90fc5eecb12ba77653ad45733e4bc63c784c3c18 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^?}1o{gAGXb^1NRRq!^2X+?^QKos)S9a~60+7Besi_<}HFdJp3R1_mYzPZ!6KinzCTZu`A<;Awr>u;ayV`&|7A z4T4)Yw0XXgv6(sb-~5)0;B-Dd?Yq03_V`}@^7S*T!SRacLP*)J;Hy7sx~#a$D5J~mF>|9a~2e>*omUVD98gw*l#rB`aytm2N{QI5LY zAGO3i{9R&J#oN3z-#(MwOYPE6ODv0Xe$uzQblPUb>R{w+iPZn;F9l=XpZe>^o4=Fct8D&z z*@DwQtFK+$e6H@oqU4nyf1l#Wvt0i!cFT02XO{eLyBZT5C4Th!uj|ptYj&=1Es;&X z64@)edVc)T7=53;|1G_1XIXE5m%1e{WqD14>GcIKKI-!Jt$VyCdEVZCZ`vjPr^Zdc zSn~638pH9|{~ARbk_F-%L>{ub2qIG|zL(8sy`0XsH|oN5V8UYXboFyt=akR{0NO%8 A>;M1& literal 0 HcmV?d00001 From 1cc536d718b110b8b8d1f936e24c5d7cdc31cfdf Mon Sep 17 00:00:00 2001 From: dapgo Date: Fri, 16 Dec 2022 00:18:55 +0100 Subject: [PATCH 301/342] resize image --- apps/widhwbttm/widhwbttm.ss2.jpg | Bin 514293 -> 21964 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/widhwbttm/widhwbttm.ss2.jpg b/apps/widhwbttm/widhwbttm.ss2.jpg index 5e1764d943f56919dcdeb653e1ac51412947023d..17942d0be2bf878dc4bd90c099ba74ecb0493b4e 100644 GIT binary patch literal 21964 zcmbTccR-U%6E_+JLAszcDM7mQ-XRLo1*CTn>Ai!rL_|Q5j`XI|yY$`!3`J__p;tri zH3>JK_nh;-_x^RiZ<8m_WHUSY&F;?ZGqZa;bGr<e z0_zdr?tj_>zGKn;OE+S1{LO=rfFMIKX1o;I8B?T~VQAR=GKZLLZ z0KoDt{U1bkQr~6$OMm&m^j~xz*#D-l0f0CF01qP{2P2F>4*MUZcZ%Y0{-s;vvHrt@ zbq5=efCV7<52ib#33vXLKa+s{Z~bxt&cF2UguDOp946rX7efO6-!w*80>QsLmkHs2 z{TDH&M*sNIFTl_L1?z8_m>&Cb=bzps?fioM4^24w zETdSNi+{nPdjedoW}^05Dh#`y;)_S3w(f7d_4@Zg8!*! z{0l!3Mz25P`=|UFV?oSyh`Fr)9a#}ZK_N+DAn~(D+7g(b?)*J7Fg^R97XN&z3JAVRp|^&YcaRTqW!*ddG1YtMK11e8?NG>=%> z*g2kX3X6z}iAzYzKUYvxQdUvb(bdy8Ff=l@vbM3cvv+Xx^7irdd*dGv`aUc?;={+t zgv8HD$tkI6>ECkm@(T)!ic6|%YU}D78k?GbboccBg!c6hjKd}-r>19S=T=tN);Bh{ zej~Pzj!#a{&Mz*nuK(zTneG2k>tD_OKYEd2^tyu?101|RdSTu1!(7;8ICmcl;F3Sn z!n5>vz$6%Q@1b1$*QzdjW+ClEir1cF1e7eoE38L;^^yakZJ((M=st8Lc<&c zbev;JWXC%b2~?*^3pgvggx>s!F`BBKkM_RTo`xFo7%ZpDBO zyIR2&d1@|@-FjXLYh(9_ypPSxZ1)?2HRD4cjIO(~yanJMnX|M%JepvVn9LO&o|TF} ziI0<_dll?-CZ%a}eA2HUrW-P|*R_li3NbrHKiH_@yNLMR!7TS+t+Sl0G_`{Nc)@PN8 z9n0S>YHg->Q8z43@rXSy%KX*T@K~I_$bnCcs6+Pv+>h4SG>mJ7TI~!uG73~E-og}P zbtUz43!#%OG=bVJ;I8>m4irfBCbVmgXFVPGUW+7)wVGehR8TqSryan~?@2?_>={$L z8!8oI19 z>J71fmb78kQAEh)X=OSbO@KJ${+77f&7=|?#+`RnGacoN_EB9!6OtXWnJpb@FVqNq zArMZP`ErL=I&_}ySc9rCXcC`?T>9gH4^T)pBMXZs=_T~b2z|H{^cLX4N57pz3bDy5F@ z)Mn3hr}EgXi_Uhkx}#gb&tQ@Ju1oLdIB|AV_GU+5J0X&46nys$0kk_C zSZ$(4FB0_qxuvny!c3G+>bsuns3VsF0pG*zblD(&ei3R+e5V7by?(A-3J`)#u{cks!17#tusr6;#Bf^HlUo9O68+ z*{iq(R9<>b74x}-$5z7|7OsGW+NFSwRy`=T`^c6>_ATJh1O-%p1%Z~^UaLt_POv3x zjyru=g-a=t(Nkp5aFQH1EmJ!CNKCce0^S|Hd2DqHP&gcJ6C3PuY801I1nXGjSkyuH zbXGOzI#x~R>PtPOr_gpOPPm#WE|eORTJTc3fEFw4$i?U{nHdPDfb1atBzApCBX-{r z6^uj=$4A}Z@kPpDwqON=y(9lYSDK`6BO@Jdhc3gbZ+?1N)P1ChVdr`{Kq&(Me%Od~ zI)S3^72ojP0<3;dFG^3A>kRpbHbc^wl~`oNvYG&;r4(Dz#fYg6xdMXvme%A!KvRqs z6ey3_F%JqxH1TBTc+95udvW-pR0^Aq-+wwU?VF&Wj`!m$kT_jUsz|or4=!0q@jN_q zv4qmBm4gG2<`|S6m(Who18IdXbM^ro5lWL4-lu-)uVG3=<&P4C-uCbYONc`$&JK3V zkAB_))<(K`*n1yk7@I6OhGpg67trPGh6wT(ls z4!_**NnPg(Uz?8EDy*!N*dtQNG}fU~3Xg8AP;5q!myK5_}iXl`S53!Hod5-C#vES|FldYCMt}gqP zY215kO(RLd@*Z(_@rqvM2mm$CCS%(q)kqp36_xwO^hVa&@2f~B!D`5nwpt!aDIVEH zYG)owY7=}q@?FDl=vK|vqf#`X4n;8 zUhBrq(YjR9m!ERN>@IZNER0udJtr43M|yeOjK{$YJ5=WMjdj7k;@N7#6FhG}&J#uN zQuN``t(YJzG957fH1BBKQCWmoN-5eZmFC+Gi)s({329SY0LG4YDq;P+7fPW%zMop` zADCQyvPc6RYTW`Z+4!QQHIFPzjvC&&2rpP^P8Lv!QSzJJ;|sc&xB1KsXC_)^Ze+K0T&smpoSE`^khFsW)9+s%t3tu;|8Dldh1c+@Ly z1m9z)zY>|=S)y%yypkomy}8vhY78Z^Nre`72}nI%2F#z{0?rIh)+!NbjzhC@{o>`~uf~wl`Uo!MA+4zq)ssqX_9z z?r?5_%pI&Xw$?VJ(*qSgmN}d2TZr19WDSMHXqZg6GP3}jb~G;^yX~G)RHT#!DWwzY zoe(;t+huufcRl?zQWIwLy6c(CjD3v2F!&iN4z!%PD2^(x;PFuim%;l{hO;!+ke@8o z*poqLvZueq*v%kUIXGc$cb>Cs@MB19x#I_l>PG;V{g(P@S^YNh8Hk(Beg+B z?A0p(7oCfyi+B-|>vR@k77b*h49&+okdZ~f&)}QB`g3j>wZtMu?;|!NeNEjxV!@>4 zMp!GMd<<1Y8TH?PYJNwb86hx08a|~?gkr?$Q(6!7ow}b=@JN%0XH$N(dj~iNI z%)80xpD}vv+l9@1QbsF1lSr(krqZIF>TRlthk)(qyqnf`IT4<%2C!J-@&|0uLw8=% z>$tmJrdJDigs|4%0xYaXG+`Yka+)IRb8`w^T^wTm&XQX*V3FirS4$@gLT98(go~^Y zb7Ne;o8(tStSJL&VVn8kNCoF)AV9k5|8{Jh?yxT8wzEQ^Dzq+8SfO zC2|M0HG>)I9EWw7es(y1&xna7yW5C8UMyd`K)blii0m06P*YV^mqMN$1AThZ-+ql3{~!1Z>0UMX>Tx4&3q%deC`x(W zQP2dyIVyDp7M)sY7hy_-M8%j z#buFo9ZN+V^=M}p^dTn!8Ncg(3%Dr}e?z;8G0({@Q>9BiTF_Z(uX%h84OC>ceB`y% z{p{Kekg;u`c4(9zI%$mZnIKVm(`#tJTBYN+i1enyIO}15x~ORdvEs~gkQr!sVKaeC zlR?vrNeer<`g|UL-t+k zu)M|ief`!a2jc~tL+!g8J^JU>>J`b-gy*@akRZYvUH;aoJvZ*NFolmkv=VXy%x2I* zj+I=-ed#?S@vS;eB$L); z*H-TlruK2vXV7w#Bsh}i0L^5k;JqY7FFEd@$AWVw%Em0F41dF2i9Q%4Z$kjAUwmtI zmM3TpsbKb7518`2Xqfq(ESjq?D9yS;%-1DJQIV8CGc$`gugVjU$B`2zz$*}EPY70f zuvochToxyY%JF-al(I8JYJs?%kx28{H13;Sc7>W>Vy5b6n0=qn`J3sto(XR~mVmqh z*Q4nsbe^qsb{h@QkxN#KpL`#d=!2}v5ZC4@Bx%JvDPq3W3y#l>a+7U+oH?t2Pv{t& z4nQ+GE3S2iwC8T4(tN9grElt71oBm;?pwb<@Ei>9WO*AH(uYK8y&`~;EpWNbxv$aS z;bu0Z5FERtZ&EB0xT?=OpTu9j6WDf`$|%*DQwxSXP@YW4-wklMBrp50`_&d^ZJQzf zq&AAAX(y&ld~5DY>v-#psBV3%ci8ta^_{C6h+BnY7iaIo5qo$lvbu-roe)C9@Ivwy zkUQ6ZvM*xqfnU4%hIVI7o)Msm6!l7X#VYzj{6D4a4t=` z!OCJ6pLhVRcNnuseQ#1(80IH7$W2>+2AW20MvnWij_?dwiGJiXg z!vd#g`3Weq37L%+@QIXNC=HIsFo+ag$0&WWy0x3XY!NecdBpzy)J)$^TG{TMmy4{T z9P+o`hi);NgJGxWv5w``B^+syl8Ucxhr`tS<@rWT=_C3zLWU$%we^$pVTlo)yW9p4%LiN*W+rU>`u2j7 zG3_Xcy%2qUgpIANZ>(3n;5~l-ptXuO1tM2b1G4a7Dk%@)$DKP%*97Tm@$SEdL{mJD z*S4a*o*@rOcZ?F$NK)Iaolq%mk7rv@kCyl8z@SQs*9)?J55uN-8U)1k=i59zIuS!p zom;1D(L?X#s!%&l*^N-=TYx6Iwtlp(D69&T2T-$?-M|S&;~kf+tJ-`D*32p`2DS>F zXPCyL?-a~W-%-z1YMkTuI0kOYI8wXKrc=*d89jPUH5}pRk@#mdi)fQ%b;|G;ApYEo zHeGX|k5+nO-$48ce^TfNc?S5o1d7tGtj7*!}Q0t6vcg=2;_` zC;Bgi)S1cbxU9s98)$|h(j-ax5|0e6WF4#GFGvL>7*7z0&>Y8l3L`tt`eWVz)M!Aa z)iE&IhS@&WM19FlzX5#z7ElV73Or+&Ie6))wqdADZ6@CmYqRdNM&ZJP{Ah6D+`>F3 z`h6P$QZ4n~q2ouwo*QlvNnTr9Ej8pT>3nsuI^siTOodzWJlK*Py%?{mnQ72D zTan1+2}NGoLU7Wx*)0GMpR;gJ%85PGI==Q(P&kMmD~|?yblJ-y{ZZ}%Az;Aop>~d2 zKse}HRmK%~3-G(@7|P_Sn!5#r8AiI?)LiNr*5r)mDYBqNR&9?yN zsSc}CDR-u~)SGiqX>uj(lRb;bjzib8O^AJ)=h6fIM7g97`acf4D^H>M;7R-Mwj4&^ zQv5#u^1pf}+rDHm-hx2#O(SE|h9Hq`AbrQq_e{h!)>T%+5Q~vBgz^LTSd{x~6$C>2 z8SWCt-A2qx^h;6gNk3w58bj}t-c>JcUPBp)OJllvLOE(_RdP(H)J~e&jA#dj<6S+D|wFajR4u_4I4v3fDF%$k#l;)a-vUV% z*dX!2o^}sv%3<9C#LMrOe>K)<394U+d3*G-FHC76vC_DPHF;Y9*oemK z9Ua|Gz@r%DD-c)ZsJlag-s_p0;{YN|8qVRh*G(^Cc!R}nCo)~P@8~{uW%rP#>>!@vXjGKwuTmPk$_=ic_boK(-r|Pv zlvYTo)CORj!FYI%SD28}rYC*^f%fWa>hjtsD9&3=#(-dfou^D{PL#NUJgz#V@5a;&vK!p0v7BLPj>k?zIp|w>s(vUO6_gtnepI?C$;#~_dnYV!K#$wylev0XX zct3HVq%S5Pj9OKm6&O>hxafTp{}88qu!Ot?s0KH`tG_x{Q(?x+tdL-r zk?H6wwqaBKZo_6td*_~3T{8pei)=}-(vAU{5ibiT4Elaf@C{zQq%X>`Rp29IqGRRI z6LVUbH>Wf!Rabgn+BN4)2IHS<%f1vCsk7q~daiEEe+b>=`?WjJZrDlxImhxkC!mTb zu>2Ee@d=%E*l$5eub2f+YNNXotQAxnQE#i+9(rRsVTr}#=TkeaoMPweC-i-}}>Lh)r1kg84ZxO`ykqTt?(Ro#J@;6TXr4ue(hXQak0AoSz9{Eg0U@pOrFO_J`% zGXk~#CoxJB48hT0hi$1B2e3*y14JQ`&NG2;Ph=TEG*w*=4IBFy1wKkO9qB*cJFEN! z&!&l;KB|ZsH^_u^15vCDKjk`RZvlG<2;#*uQz9PnNc)>5y0A@OKJjt_!A5#{Uiri| z;C;*tTc+fM|NPQGo{n*E2$RpYV{g?}Ni_pF>GeXpPdRgwAV>kSyhQ)B`^Iq5WZ%~$ zi{M~g=c4|t|2YlH>4H`%!jTv5-)>mHE=p=)jHJcnpl}_Jx^7$?>UVz`@2GY>jr3@_ zkm@KL@9-D?WGV+%X?Ny*D%%!&iV85u)m(v0%Wu}$IL4o%jJ_AwOW?vQ9uqV&BW12{ zCSq=|odYYI1wx=3F!8+?(R#_I!FjGW+FmdunyE11=?{zSon-9CUQ5UmMd;^eQhU7Z z-kBVIvwK$)52Tbw&~cufz-GLwTfn0RnSrcZ079p7B=kc+HYVGegV0iwta3XoIDhEO5+fMdSDLCV(j2{tR~)q(DMbPU*@`Vb2qh2eJ`PZmg?^}t(1ylX6}QEH4$ zpA3;WrSCAF6J#980tGj?6!$}ipoks4=*U4{g<75%uz@tV4s2o}mK-^Gb)}ish3ptP z3s>Xs0apK9lfY4ahU9vFgC%ET6MgU4(0WS>vw%u|=phX5pJvDr#oNFHKIVb$RA`w3 z85KC6=|#!-bAwAaX6c+1I2x*V5CL<<#SJt2N2#;k( zq8XAL@^r7jV;&5+?gs1>4@~!Y&}p=%7TMCklS>#&g~s?V>zc%z)fW&+x1)}22bki% zA{~sf%l2Onfa&7%Q^SYeDR23mu5~bDa^%_ypaq-Ml8XVmYgnA?y%{-=*pv-Wfy{3} z{fjF|6NqFCXI{|jo9 zOrR&@7BI4=J*!1mvqiXhSn`zgz67+2`s{2+;~8Dd7oHY(x#ckFJ0u`U=_Ni_Tli<_ z0rSoLP0SNS(~phvbuHl0{d=fD?_v%^run0W#3@mCt!BGIx9%em7NVnCknq?FT{Lp7 z5;MonbY9mwLvPyhU$5l8a#s|H*H*Y6+JEKxRaT|TEdv_{+^S<%sCv{l{A%!dH%r`0 z(u05-Om}9_(MP-W*j?ly^G-0&SfC`qMIYRyi=E?K!Ts1uJa~Hg6!DTR-frbZzf|Yi zrp(naF;`6Y>qvzd3ixAUSuDEc(-AEg0PVw=cyDO4uVk82(O`eMGM}d{H{LD7KO8~5 zAIps^PTv;0by^7Tudu)<-nDM+-4OmD`OnAlmxDrBj%+ zNYwX6N$y#VLgI}Eo;iJTa~*%$(G+P0qhv4%L@5;>m(o&FG`pnmCrg2K@#uv@-v!GQ zC(n6D)&H6cauzg9Wux=T&e>{{l+a(CugnRyOOsR$YY9R7m)S5odhnH>4<^HdY2cK; z%Bd)KnHrrg2bMwCawjLjw??f^0yDROXag1Ftv#X!04?OvLEH7y5fMctkqp8{HBa5M1+2$OszBQfQ&U1tK534aU za@&(>Kbf%BR4dOR*e&APICnr?M5VP z7j|!n_K1yla}SPjsV9`zHU^eU#l7HcNY^g`CCj6omHAJ0BBc%Co7z#HC3j)jGX5-R zy(`OLU!zp7sEdl-A7UPmg;;b#tO*N@)a?MXL#b*1ullo<05<_J=MM@|sBe~CjHx4kd{WAePOoHDSo@TdCKvkvV)Ew!~J=s)$BzT3knedYm4lZuE&SMhu$dB~BzGZn zz*JR{-GH4)nrHcWpaVqWgicRS3#7~48*kJzL_JOlNS`XX6>jNyC=Yps4ey9T2cy9L z06iXgt@`f-(`2zcsn$hq+&hrQ5*O;LT;KADUR8YElw>q=1=KyUIttTFJ zA9kg-#K@&~d>Va6qCY{c12Y@=SoSGO=4wcVmil~C<>B(0^j40uhhA+tx!V15CUt^( z<$EFE2#2*o^9Z`v6%`Y6l$&nNkSWXtW*LX`uP}K5GuRVq@qxsh1C9IStr`AePllHT zA)tVOC{EXO8p0D=klXsz$0Nu0M*>rDM_zXDg5>EC({7dqPQu*xFcdtfq)% zgz~|d5pwe9E+vD(_=W`avaV|wTi47`g{Cgeu2XypC29kWJUp{6m$y|{oaZ*t*qFbo z7Vlw(+a1u7f)W8uKB%{U`ZF*GU8mya3=?KlvJst`SpgQjK|i1P z;-V*B*r;#Nj_m`JiA4D=z^l{k+Z_Om*;kXotFTwqqG#J6RcNL}0O^gl2P%(PadU|Pm;DnXL-6(-ONwAUtxCHV zrR@1s|8;uE8D#=j*eAV)EHxK=AIwJ4u*`PgCwyL(ruf=Ylgc>2dBVyEiHlR3vJFNp za;duw_Qo!<#|ud+3)snoKP8acLj_+-A3Bkgj0vgEsC~H3#Kb>m+LZNG+59z*=}z4K zk3ToZ^;enTBD;*;F;Z2G=WZo8R}kHikwiX->b$g41&`Pj z(T{C6JBN5ANhOpH+SQ9XMYC;E@RDY@JZ3zZrstfXLNr@28#YGR16!Kqs5;EQeg7Qu zp{MHZuW7BH-?u3nB9Wh)OeK(*91R6Yp<|UvKkHNm(@zOO_~3C71Bze95jxA(C_v-P zeV`kf#sepg?Zmk065_gQAtjICg8r5yucl{xn4ER>rsV5b%>MPI#Fy^iBde95(v|3swPrGa#!$-94x7d9E#UmL`Jw@GEyAH#!qTk{cLAXrS8K zAMTUqbsWZZ=1*(|e7E6>)yV{lpcvlx>X{f$4?~(p`LHvsy)1@Ekq->?%z)<$mj)hL z??4X>i#Y`q5lL?@wj$9fwSn;@8&2U@Z&-784$uKN-W78)V2k3FErD^;=~GEUm1Lnt zGnJNCG+e0Q8vXPG$6Ek&?(mCcT*wII7GS2=(DI|6H&?F{D0qg1ywK}yd^LnlbQF8# z+4iLG=-Ix;IncgtgGN3Kx(1H|<7TTvS^#W+cD$O(euZ?5y3B~FSNl*9HQT!kp>o)H zWp~rQD(iC$T54!MY#ly{?`_csAQ_wr1N0qz42Tp z;FkPU=VEsVprDOSN7SEUh=&?@TuST?=O5r3I%eW=qf!V;Gd31<}Js_ zW`Tw|#K^iZamWiBf>hSEVNRtMJ&Q|ZV=MvQ5QEqCSz&N-yGuh{Jpj<`(#utSuS?2E z-^uTXCqc;dsEg5LhZpvpP+HcXnwsXP2RsYF^}57Ygk5t=nD8t?%_VBK$~DAKiO>1; zKsj90Dab#g+?C1^aBstZ2VQx#nbl-@BIFT>|5BjIlbB@;>dGSJ_GLq<@~T(me8NJ= z<>v8xE;)4R=%Hzz#J(7Jh8xe4XAx@GG*sgaOX{yBo0`VC62+f0vq)m1aWn1^jU4xu zPQZ%S<<`-+K>nXDbLP8An>3z*QQkYy<6=)9Y=^^Hd2WbhTbSOR;u!6v2oZ^P!^Jh% zd@tOYiP!ekoVC*e&$hr9I<-=tA%U2a43Fy0&wUyV&(w_G#fi=3gw-tEZMa0ea8-hyfe>uaPrW){d*O>3e!k6XV;|9kL_8zT-zg%Cu-dK z=Lx1Mp}Mej{45ugG#ymv9B;;{LF~=s7ou%EyeaA z^WMx&Om?C4XiC|pCc9zu049a!L#5d>F<3Yx9BHBsJ9yVU_>55}=ZkFiWMaGq%aeSU zn1zBdBe{e{n>_g2oj!&ul*4($eKOIp2|QeEt#j0Y-EUpvk-TDP$y=2?r%s?B_Ep|*rfi+)fq$F^ZjI|G>KtXNjJGv-*9w6I7VUFS$k`*H38Z<{tn z1KyXB%dJSYB1#Thry(}wHw&94iBSO;3=5?ak2l#fX3 zG!^A`{q$7IfQb~Z^8Eby$key$mRo=d+^IystdVSigtkDYD8tL-$3=QT_5Q-LchcQadC6fo7+U8K%`u99wf{?`{BiM1^smcD4BtvlNb=3EXph3(EN0d=ubyA6A7rEDs)IPN+ zUfm+QU_@?Q)0?%yG*Z<*nf-d&uQ^_R^@}RG+GUGcd<*k@W;m4sa(I?g)rY_Spj+>E zo-K6W#hpZXAr^`ZHCAPRXMdMhX@75BswQXWQYZP&jmfTihXgCjX^Caj8@KPJKH}ud zq|j`cqu!uT`9ZHQS8j}ho=ml~1W`=}aee#!azWFf(0*Jv`jX2rs!!Y??x9Ln|nTF8y^hc!A z@YMrkjU&aleGvLw&3mzEwS-4uO9pTkm}CPM7d7d>g)0tpv>y zTbtg!SfLL9k(+E^4^2hbd6l9P?9=utSUymaKaUU~@A_VbhrOeX=zpfZ3rF&xA!+(8 z2^O}~S4+qa=5b0xE5dqpMN#d5sFN2r+Dy?6(`0)iOR-mIpLok7x9)(-XkMg<-5Rm% zT2FeAO@()Uqhec#TsZ5u;iE7c*BqY^#E=Uuf-a~z6EDhgwM#_0f_I#JZo@0U!of^c zf*^M7Q=LIvKjTPF;UFd#46v=1|}rDL=Pv=%i};XVc1RxAi*9dri7gR0cNN!DBL+38!^cDfl5(KjMPh+LQFRG~+4K zY75Qr7OXIfX6AG(cobMQ3Ejh9ZS?6wGY1(S$~1kCoIG73*r7Z>PkgI}PpyLUzW-!7 zdzoX;{PE4BAkp^2ls&|ennK-W+L2oCBc<*(NtoJ%cL#+9>&}Re?>FzJNacEt=h1Rk zZuegG#vBVoOT79zoVA!Gg}in=|IO*K=_13Oanmu32pXxjt~y?`r40D&6rCS|i3dxC zm!u7dh_Y$Tx~!~WUKR>3_8BB-c`Q*LRd^Ij&1FXCZF^r06jVl7rSKt7?O3wHb)DBBbm^O6(^ zYz7vozS1{S$&oo+0Y*~rwrRxr^WqNM65hSwsat^1_ts`>a@P*R1fk7>vEP!{ll}*- zJN^P4HF6vEd0=wCXHqRDfv7GCEWo z$Pxj}7k#e$E3CZo_53n75o8-x_=|Gu(AC6A)Ax(RHv(tz<=W1NoxAocB*XE$%XB6CRpUH}s9}&kX z?;*T(;g{?O6sPv6&C$BHErOOvw*4zhp{8yLqr{;mUE zJ1r~nA^fNe_b6C=l7c5CPqvu3maCrIFvRNzZ`xaGvmRP?G?gc~TJ%lv!xkzc#!klZ zFz36Gy9IQ~Nz>j42FYdoxUP%n4VKq;vad*xq3yPM85VyMC6?L2-_^$m7TI2!(=Vy! zTyzvQx6Uv!rPP)=nrjbeMCAqX-QXIUAY~6B-AkX$rN?dTCcY(hV-A5H-K|IDSuu$~ zQ%&C3uzVdJHK6y<)5to=NBgRcpz(f<$+$o+*_)7*sBhkoIlL}*lkd9Kf}JO7c}_>r zf*neXZJ)5$3sOaj{#+jFG9~NvPw72?8yFrcecGrwwCJ>;57HiIsf*qVQd$Yt79HnJ ztEQ*)Ad25t#G#V_spcQDcN*kSfI&`6^mTm1m${hf`4K4q4A%^+Tc9)()2TaVUvy<9 znVnk`mkW)ehjyqG1+kB!nb0HpvJ98ZM@la*b-vCnP}NOH^WW{^EIGdV&X>X&(yaJ; zew|<1E^?~?QE*UlP+qUTd*FS*FlRcKFZTP!ey`NHLk*PGOb^9GUpI1ar1AI2pT|zI zxR-NKO|>?wACegFWxE?88kQ}1srjZ^Ge%l%1xRG*NYySj@i@w< zoyll@0P4j-yI@6B()1b^k4B;*ArIapNeX$q}Y;FVL$=GcjYO)%_txq)Zb)B=YP&<=Je^}k{Mqa51 z;pt!IDeIA$-A4Qdh9w9E@0aqV zcf1~H4`XOyv4)q>)djn55DrqS_>FpUC(3p=FVZrS71&L# zD3GA&=~Q}GLE?v(O2MAphEqfE#hA||T^+0U`0vECw$l#vtR;0R#D!i&ubD0UTx~qa zeUWfN+F_MzgamP&S~bpUqBQBs7S3iPUzH$`V!Pu0(7Q4NEoHnI#CN1ChL%RvOZy$R z!+OT*i|tlEoc8l9{={=eW!Z#noDdlu4}R8G-Ll6q@VcQykD|pfd2mZ7dexDYh!3Y0 zWN-YsuWjnXa&kPp4i-C)vs6dgS-CY^q= z!eh)PPA#-;^c9u0rJ0pk&NZn7)>F?`|i9I!sdP z?Ko-b*DlkyPesO|{%&?S;Zw)QKQ)D9O+%TBP@n>*o{rZ*z-8zPuzNv&36rO#N^kgB zM{J?`#*L-^9^V7{$Hrl4r+#A{bes#PIxDcVNTb)75e38vBHFc=AzYZey z@CsxOGqifC;@SNLTFz&?*sG|tae$=TVC~)k;WI$k(K2-}8MuQmTk(~29@+Sn{WP0P z?9zUfm7wL)j)qiJy{x2)M}ArIBFW+J1eknC`$;YZpOoEY-b@6|8huU3(cYrAhS!iw zOxBgvEb9fsrkRFQNTBn{X9;G+&nGL5ds>WJ4-YRHa>CqucG>Va1#*V73qywF zXg7+n?UoS6&z~19iRH@*#BRMT#LZLsae>+K^8u2yDlbwViNt(~FB`Ixe8KEHM^}p5 zB@;n`5&#cEY7fFOZlvRVfI)OCv(MfAl;S5;WNLM;!aHBEk{5l@_`2Vv$?v`DOtN9W z0@vrbNr>-cPGeTx?|gf=fYpN;i&dfRIjY2B2g$dFb-|Ai18~Q9Uf*|$FFbiSXE|_+ zt>QY9Wb3hK>nCd6iZ?cOZS)C7TvEzo5uC%jtqwOIWE5!&uTIPF@rqX80=|V#1XY8R zP9k|HWE>+sO4+-Yhr9RE8VP!bMg5=_x=hRfySIz=DA!sj97;DaA7j%Z$ABi&`7%+ zdi6*;!+2}*5RWR)ZCV4WE7N&x$MX%>(^bSCTM{zOhh5PI3gr|V^pI^~?RRebkBnYV z=LDIdGQba!fk!;;b!(72mlnMNy;+SlktcfNtBq+)L`FJZPo(4p80q#{)@Vd@QP5!U z4fWaHrhh~C(tXFJ!vA!De`RovGakgA3+@zpcG%@DL%Ld<{qX*qm}%8;E_!1bTk$*vOgxeAiu0uc@sRG~ zanrTnbWf=rj#l>@3Z|DI%3A8*0ww1_no>P=uEim zuEm^ak-e?@mq>7gMVftz+j!XV$Vtx>zPozrI?XTCHkE zxdxFgFUadR9JXzJWT}oCL}lge2JYn1HGZU-khUK2OO=zRv-rJh*1dPA3=Ew8JLYP934|cjQ z7^qOGr@;mWiDs}M`8Bn)R;5xS3yD;R3j@B^ZhT0pN!T2j$}0f1_)i&QH;V2i2yE7$ zrL;h4O}C=e9Numwx2RF*RBpiRDDb=P%(oiC13s7aIS^?rKUTfwGjMAHlAsrJ8h~L) zwL%+-*!l}XuFpz$uN1Y;3i90`esg(;E{m3P`Pr}HDx z=@D;6g`u&$@6=EFKvfrB#NpS5dzt$jenet`%rodC*kyq!2ag^5Xjora%LoN`X1{$0 z2Rr5rpl|(W|H5BMwGI7dXy+K~;y{q-!R8($IfFs-uu^VHmI*wcEqqi__hmut%cb!T z9?~Cv$MT|CEJVw7$M-TUvk1fBLd=h8W-fdEE%v%@*tUVS(|eVNH)thI;@?~=!NzkC zvfqsR2>x^ zW7eSqk@NBkwzBs1_{gGM4w3T*YMbe92QJrX7B!e)l8-FncUnGJ1%%i7sC z(G%?4vx61$Cmdlk~#K1Sm!#7rrKTS}a zXpWJFMN9ZmncB!)N~dpGj{T9+J27sX*pyXTt=J&{h$9h_&&|xr`+=6NuOACJge0Zb z|F)o}$3&SsV{Vm3@K#G+zA~dcme2uoR_T^g4!m@QA;!}7^3#{uWlCHb{U=JGeF0FC zwHYR0cqvQfaEE@0LK-Bx!EV*%@fdXROX+I-x^+qEf}UV&GP#{8T|ahUlKX%nPeR3= zCc3~=wCIQ!D zpe>v>a{gYlgOBbs@w6z0p(LokJZSo~U9mzi@zOk7>37NxV1%(-S1hhVp1Jy}8@a{o zkFlXuV&gsDI;Y(hv4ec&QPKIgxVQj%4V8>lgKkoSAlpf40k*1O58-U0$;Z>RwF&+_ zJyafd$cD$ULt6IhbuTEc{+|HG5jpOgsDHu3+I_E^{h9Fp09S{00{Q+SSr_saok}%rKT=sO?`$va)@xg+m=$Q` zRs=GY$SS~s4l#pYjracm@L&G`h}S`;vGBiw^s=jk@>220KkzBY{VR{wf8e~I95oAd zNOc_o)L?^+8s1$00N>Sf`qA|mM_zUK{{WEvg=uNZe&cCcmA{8PFK?ykwt7suPMs24 zT3cDe98ufCiWMV8Oa)a@fS>>X;B-GW&~oTJn6&eC~fjmcA^!pUDx)Z>q<%g&*?Mryli7Q1LaE zm$j~v>qmb#Ae`*Raxt8L`s?|=@o(*U@e^EcI^)NlCDajy-{0zzyQs%P3s)O|@uS2# zkY77i)MVOnpxikF*T1=??C|SLzq|ektvnrXwPX4~_^io`zCKW$^z1;y$(T%ZM! zkNKRR*%X&^^+Ip>IF8rN%zq5zk+4SR)|Vi0#za5o`BgvgaU6^pli`h~Rd`7?mct*Y zhmY5-ep{`_`8~x*w>Un&p7l!|r^1Btnm&Jd`gGs$aYm@yHvBKpSC5}|uQ|!=MifoAvGv}i{{RJ?_}{1wHLVgH zrqUwOZO1;mgIG78@K%qGH-Gaud3+TfPM>Wb2k4z^<}*Hd&VIB+6+cCH2d(`F?2$1bTI>6E1(HFPW3W56h(|im3XqSZZsbrTwuX`_ey7 zopLE9)mh}vnB97wwVWpB-j~hi@b#&6>OI+_qZP6){{U)8x%t~4T2Ji*{6y{b&oxD+ z+CBa0rd)OXYJH@N_Gr3qe~33Z;Cj;?NKQg%35oJ!>u&jGk#ddYOW;z06w(c`Si_A*<7iXn)S91n1%GH z+U1D+Y7*J>rnB)=%sy01X6KT9X})exf2~EoKjTPFKl=3?#iU9l=kI>Bq4J}jr9-cxdg!d>;~j_cu1d`4qJlw{Ju17d zTc6?US6VNVjo*z`nmjSC88fmd^9*ByPCg=nX+VTkLy!gw%>ZK=5ychsiBhswvOg~%DH)dIzL8Z%_Vw#eYp*SvI%xrx^)7e>!}`lJCcC{{Tu|`RVl)4tS>qtvP^@u%muzJkpoP_o=2# zi8oS)`cz=?OS>Ygn37%G&|mSWvyZP@UEincPnZce;(%~!J=q;-4T_tAHtZkkM*LJ^ zuxJfVi^yCQycU7EM9Hb(zK_y*xxTaXOq{~xoXQ(s-A`Tj`5LEPZ$l) zPkM^de<^d3k4m^vZwLEbL9Qx?Ty;m4xz9hXLOxoU@ZOmm(_ML{q;s?}d7w7mZ>1*9 ztLZ`i06f*EK;>-z01rP(aBrvOP=@BD#z)lFkz~meMtyNsAo;p}l~E4g!mL93Po--X zXClwsetuI@M)(x~CnGfQ*0r)P@3U?lTB=nc(BpPTv6txuRuT$6T1C~SdIJ7-#~C%^rmM5kT?GTT8?3KBrQQ~Q#Wy%P~e~Q%^bv%Dd*`xemJHE#V9zc zQVS0TlYbbdZug}fXyyVy+5CB+Hb46G-19+dIf~^RP6Zpe{{ZV$Wbi+hXx+#7j{(_8G)Dd+239$?v=9kt6*>UBqAn49eKcHr{9wJYjMJ7>^(R2SG~_2aE) z`K;$+{L(idX0Vo~%2v?ibIvFtg>BtG{Zze;WSK1tX!l~6e;SuLACIjYLH_{tR*8~C zSLXNYOP_Djq(skS>rH6(z7BFdYU0U|AjL?H$f)u`;PmclWZ+iOF_I=uPx7a)A9|ug zgHKk-HL_++5{@ZDWK#ofU;ecrY#-~IwIXakJ5Rkmcsz05qu+zlls-rJQ@Du(W}F)* z{AwKW!(;sa0QIUs`Ri1qOGKN$&T&XOesseB07?PNZRV?(l0`WbZpq`3QHJ?_X?JI+ z{Buv32|Uhys0VlQrWd0;{{Z!<<^kaU0G!h9#wmrkrQMT9FcJpc{{YvZ9137QpN%Pe zifTYREPk}?;l1i0c8}>xzjs{H<`N_ggV@oUjZHhX9K#*EkMqqLrtac`*gw{eVv-%7 zttR7|V;{@Y(ty=G!OA~8f1W7;!KUub0kSx$<|}d8!1Sabich?M`qaBQ>-bc;0GQ1U zNKQSuqc}YO0Q#zVim;>brBjp5AsIiV8?Y%k6iL#A`H%Ie^TjG3=TXdAp#<9(Xgw;* z-Lj9p*S2duCgbt-s}@kS;hDZzSE=sa)r^gJhOp6?Qgky8J@SycILhfI(e5oR| zjn@b6{c7dTvd~%mp4=)Ued0Qw@ju~NM~-VUuh`|FyV)ls)yU-YdC&g(pa`N8J?pgh_#(l&W@`U~YY==e1SIksu_FX~5&3=iZ|S<@BHu zM^FB}S1}};@P5Co1-Pie&(eT$YKdr&J_aelxv1CW{{THH$M1hXdO3&6Nx%G>6y$$O zj31l)X-7`9a|MU)$fI`^894cy>r0w^!sR6olh?mm17P*VN6Gx?Es_5K*QTTrBrlKu z09_lhGyY9R2qXL`Cv_aelLyD(eJMBnDVwqWdQ$GrdE%EdG#*%EIUj`uvUsL$;*)+) z@}+Pj1ZTZ8wgVqf_fkyEQUp+QfzSAIFL_OeY;ESHYL>q-^{9ob;pz=I!rNM|9~MMyKVIsP(9FDkNpFYGqPF z_1&J7TiLzA`A6s4r$+wIayNXyV=Gh4Q9YCp!MUz?Fxp5!anEd;hT`d_W()Gip4A&W zOy4&=(>F0bxb5j#$k0+(XS8_~wv| zRJh;wSKFmJOI8u?+kkkg<|V|h)YFx*(9)FJdGw?sp1JQ&n4VGFxb~wbKmBTMK>nQ3 zyZq*_n3oaTyY{0vJpTYXXnIvY<5XrpIQ~=v@AU?moC;CuXt)w@{{R|L*as{0re=Wn z>GTx2kz<*$M(%q3X@#->rUW1Bp**qQ@7-HDM$JCrEndRJ*jg|X2<#IL4GJHA;G`S zXy4z8V1IwdG@*xa`PB0iI5+vl8@Zu`epvh4yZV2gw9&>W<{CtS`TqbKYagGuq#t^f z3ElYm)ZBcdmpJsHM(j`{G9Eu#kuBAJ`4uihup*Pj+|#yfKQZQ<_W=Fg-3}@}{{S{k zXUtbAAh=+sZc%-WG(SJ3Ale7<4nHbQ+-8nq(IYp_$INNF{rU8$+Hg4h$f(*wyNZw< zB;O~#dsIOKuxT5wTD7NJ+lg~^<}!bEI@No$!?xeM&N68>R8h+?+SMWri$xWIpyJpR zS{uEI_2Jf34>3q&UnWBmbkf_{$pREC~f5M6= z5aQS$r}_NpTPys<6i`^1z;AB8^k*Zc4|*t|1?tqK?V^g702}400_PM_QfN71Ewa^`+hN=kcP7lAZ4eoA%1c%`6EE3!au0et=y0`>g+%;IR#cgp3vbZEcgXeM1 zJ?Gy4`|v)z`prz&RF`#kbx%)E&!43~TS&38K6W+$fT}8h6#xLB1F#VQ0OV)vIl=2i zcmY6s#xb7HJOqS)=~&YUJb%-1pXp@?1OTM}@IMRj{!J%*zHdf+`49bBQRDh@7qh4}h1O zmsgbM`4FV#<^K!e7kQQdDEy=H@6^M>$-~Rp764#~X8ye@V)xU0kJ)c(3=d*@wTn2C}Az@N;GVQ-XiI1|UB>_)jN#X8do*K?wPO zb(VkY9`#wzGyK^Eyik%;l>1BIS^M+l&nn<801*M1{&sbzRL6Pfq;mDh=PEE`s_C% z0Pi_IknsU1s06Qgq|si|X;`=s(({HUp<@uqe5ohq`!=)1p!ti$@{IAVJ0=r<80kB$ zO8>0SU{s%??l|(ZgluTnT^z$fFFX9v;~#F? zB+17Pym2&U+pFHl^nx@X}Io;&8X>($VTbxAj&z}?X&d|*g_vJkZxP(Mr7 zd?%aY3ay*QRlkOG?W*lC;&WISyJOBq59~z%s-gLb|+2Av$KOOJ2Ak>xYb{aWB1!B>tA|G|-v>CMvxJkdK5s(Rgw zs$Y&m+2naf=a@014MxUUki5CJB#z+#(s@usps4);bdp|yt_kKQDx1#x=6=blQlgIz ziv;)k!-*ty%%+%|tK!}l1X;Wa0J z{J0hDdf6v7%@Olqbo$%+d^KIj1mA}hG^2qt2vQ_fZLB?O_JacI#AtXJ_brF%+L609 z665KKTdc&7I1zdV5k{ai^{wTDva`zuZpyn`aRLTprekVht#||M$jE$Ntrr(mOAnMv zF;Rh>HPQ4u_1`%*Hqf~JLf_Nt%JeR+l3VDne4UHjb;fI9vZhQa!BP1@EvQb47r^A8 zA;96pN2-tUMxARCafLOtbkc@^9)*XX<={P!^+_3PwN*rxUQgjhwB>CDLvr=}G*)%$ zHiUJB+*gAT1Fx6@uHTqsVb-#f#MVc@@_yH1qTVx4S2;r?IX%o8Ic4eIg7W<`Wi?&m zsA}}Fzqt+3xk|fL$`Fxy0bu**+E|cH*d;S!$ z`u!ohaL*)aFynip?Hv|EIfcDQNvX#r`Z!y%dEK0R^*2C8L;p^d;KYp$I0?>W+i#C{ z`zt4vU+UHz?=S0rU|EVr4PnE$3!jK6pH#FfPBfz4C>+O`2DEo4)}(kanuyExUr_=V z)mGrwQ58~+*^-Ld^%F$zQs;W!f-gSC; z*&YXJbv1}EG5s+}BiQK=VCC8c=i%*G&^P=SNrc5HyI)rxMWB@(7r#F(9Gl>$PFKP5 zx9-z+vfh;RZf`F#{Q(#UsorY@%}s4HfxduwUe}bw$t^Zthno8^Q%`Y$&>|xD{iTFp zAeO<=DYFT9eydb0;djoPT3pu|IR-y3Qd!Llrj0fFa`oMRe22W(%RM2~|apXM1)is6Gv)uiJ@RX$MSNTiH zZBDMKMWP9jh&LMkzlA$8e{4V1hyk}3@=Z02v5p+VfpP&>V@RKf2U*K`TW8 z1WofCXCl~>X@>mFXk>zIq?Xsk=}K8lY4iEYS6xvC*iN`&q^x_ElW9!Q~G}L4|6-b%+1rQSzxbZx7RO5RSr{= z`VE965)~t47(M{0#Az|ucdBoOhGhBI>IH@O{p&3*-f4RTn~|qF$MIA5UAGp z_Ox)N%n=Wy!0@_I-YFP|JG-VOf>D!x={s!(vg7#eV-=pqExTSF6mqdIHua~mJ0-f1 z_LM|1IHvg9(ish z9eC*_GJYi0=wlhfN17SFE29uNzG-1?J7Zm%IH~lc8u8lhbo;nOTZ2qbt6 z7bhNXVq}TsEhT89EtxakI0oT?hQ`FZNPPoEc7=rlOMJObj5ezUm|`Ofd)UfKtG#$= zc@h9WE%AgOEBhg3Gq*XvCR7=E^OX^9eBmu(zC=h?hQ(?es0SDg)u&DO@OEl9-aRiB zT8*Ax^}_eQ&Sunv3mrWolNar04K3F-PBw>>y z<%Rs>(RR^$e_rn4@lA5ci50S46#)K_3TPl8tDXiDc@dfDX4%^j2u1kuNJwU^qMGP& zVE3PXH5Xb#Cm9sTly#EK!=111;$}Fdi3a-YTOZtB^y$?Gw@96|1b?W;Qj=j;V!d<< zslb_y4K@x~dk!k+@dt#3@>JWYJt*Dd+`R&Yd>eFGLb+rca*rfvjvUd?0TK&21j$JG zQ>VSKS;l!gvNu|?Z6nTy+j9(>aqqc{V;}1T32{3A5^jTcgS+siJiGXb*pHNl*8Ke8 z5nAanB9AC>PSd}k2lFC$84)2CBY>6Pq-PScDP5Fek=M+%B+%GFsM_NBngN)%y=i_6 z<#`Bh*}?YW4LBIu3V%^>ztT@h*t)!g6`QY9cUFXH3wXlIYrFj+25Ma_JIP`;fP@;- z`@RS(rqPGCnl*ep)pgGq%>#Fo7i5NLC$9<30r!WrGPSMo2N{eqzF#Bd1kG#)dW_^u zi*S;Tv~A>do$Yw!i1g=m`a_p{GtTylgqAo^QmsT+h%3s+ZIf%>FzE7~mca%CH|Or)G$6K*XbK)_c}oU{T$Iz=^A<{swFzi0{&vgX;-ZI zjfybD_a~?_ecO~7*XChSp#NTyqmSjwmtl(jeGENr$eIb?Ot3p_Z@7oy_`2-??E) z6^l#j*b$S1e1?_O z*?dkQckCAsu7mNjkRYvK8myb}I9B0WVNo;l6In^8m zzn#97<5Q{r$A}MOYn(iqb}9+v*h3-@7n&uh5th;<@VF02m)<62gi%SQ8!ZaHU8kp? z4GnS+R0U8>wQKX$bd*kyIzRc!tasJTX9+35j+O$(XAKUiP(EiQm#y4PX=Q$hu7u!7 zh|iY(?9r2>#q#(z*q%@{>vm*uOgRGO0*2Ha?(4;@XuT9l=<$Z?LrHq-~bjP%hd|!%RNi!5LL$l|D4sXMFL* z9&60b51_wEO4YI@Vs}?8j!(t;>f&+d7JI>Al%sQG&)Oj&MY2LCQ;OI(=nuy=$+8z6 zUuk(ad^lR)_)ekI_Hw8`&N}d<>F%s}_?XT~gx{6hjj-N**e_w}A!?|Wq_W`;0NsOO zqUq|LYZGqam*GZ_$FsYFxw|r!S%a!mA~skbgH1GG{FC<~NaMljv7u}si(X`QInqp( zvc3q9$657fF93oR=WjZ(>6N)FDxTmU>z)@!4RHXyC=ZTMQ+{8_m{HGAzopnMg)_gr zurh+l81?Nqp}TZa+14wW#7i+Jg7|^%2};eFF(2~7WI6hvtY=cp!`L*-Z!HQH=qKFF z8fHhnfOk|+CCLNML$wF9gSAcgnh zaHD5wN_7{MWgX5dDKjQG4?MJ@_3CMn5;&!1oQf6pXq?}I3kR^}r`HD&1Wly|y*U0t z=$jMD6#FB`mCHHf5y(Ev(y>WK{rpzut2 zQ|Y+GX@FJKTe}VpKB{-VU)5+`I^%7a-EK*G#}?mBBrRZ;?<7D7DjXNxp4u8fyfaPh zc-gpS>dp91T+&|y5sm}w?{hfpCfuoBQOt}wtd6mZ_cjR38Rh5b&UGM4sL|w#&1rT3 z($_7nhC0V|?Sh*$Ml-eH4u%R@G#YSXm_wIHioJz~YLY7J&%@Dz1jU3T&y!>X3* z&=tC?FF&EpXL)!pOvRhG{s6E?7#WxPR;8C*zCUb#EV7TH4w0IK^9?R4mkuRmDPK-pjvMe2MekxB_C$=7ez)oe~q&62fnx4<}6Qc z$dZHEscGhLtVR+4ZXvIR(wW#%c^9m!l`^XXcwfEGAk@)X&{5M-P97g2{fa`OeHZ8b zx>>HFYJQB7Nl_8|82th{8B6%4`}IhplZU2<$Oqn|*Qs5l@oUbgkM$qT2bd-DfTE&vg+5`NFdz>^PMx3ci;<^1y@G z9GqOXhEi1el(MkLg5PkT9ojJ%~ z85Dt5ws&*Y-s6z7r&R83gXZx4a38U3(-_EPcCWVoGO(0|PjM?jdgu^m;4*P>^KrI9S2@&f3Dxx{lRPJ9fAi)Kq0?vq@#e3pZlj0~zJOGlWDJ{aTqs`n?z}GKw@{ z2IhYB%ai&ZBJWrFmFrc(H5}ari}Er~FH4F>Hkq{$E7&(xy=fNXY(Ppr-tARP#@`Jq z?Bv$-989l|15hSA#q2TlK&`~^(I;hRW_X;QPPOOHvqnL)(h3zv)Loy^ ziic1~`;s$)Pu5E15(Ms9J zmOOpliq_?ur1B*fi5qdarcbKTYgrRUBQhbYL^<}2`~bzyH&gcZhu^d1Yct{m(`n5> z0Va$Zc+uoRAobD94!Ob_E_Q-SoE5%HVKU~=zA9&Xm|3D-n_R&vfZO2H__LeX>R^ym zQt`p8Wyo;k8|?7om~w%ZuRh0FR03ewt2&?0Vj%I9xTEI-DshNfOhH~UGeNG zBePRMeNR2K@_89h%0NObf>%1zE@r%X95`CeT7r%QFEjR+DEEqNpY0&8sM{qoF%e~x zN^KOpX>Uh1qD~B&`vYisc;fw_^bi)%K^jaTamR&>KPjblg3Sw+YFd0>J9V#gcMhfW zAH8j@8rSif{QAZUXak3VC~8V#2wx$tg+kk*z=7AW`#O@8DZ|H5awZ=Pi?zs~m3p`6*<-oV(Tx_g;7KY8>9r#JW0`xkgm> z;#JxW-Lrn&t4qMm$?gXa7uXzK60nUTJ9Nqjer>i~-gm5o%8q&~xO&O(2k;g&avle+ zXyv9r+VH9YT*d+qKtE0&V*@1SO)26QwLeEXFjvrDr{IVDpha@-^Z!jr3%l*%{mhSz&^u)b$gfhgFH=RuJz|1CD180^;(VKfBbSGaQncov{JE5u)2HA6Ooi=?hs%WI(DV(0C;xzcKrm?Px5pN^4@8qeu!7R@|dVU zau*k`+k{8_dJqyy9g7ERP1H0yhvc;=(AUhn-@3Q04a*nBUbPKw+-W7N+oZ^9)UfIb zsssN3Ahdq~L2gsy2M=Onm2_T};0g@93hp1fs@>e~_8@FK4}*XeUsk#ggW&@wK*LR4Zs&uQsgT?R@Mqk3lby;u{`AC4p6&&-Qi0v9?yTsI8@{GVowqg?gD_s*t5sE9BKyg5`xmqD?kT+C$*Nn4SIrX z!=1T~7{3Y*da-qkOr@pO*i~X3`+yCpvd~Ex`ea}?N8jEb05cVKqqhA*4ot(!vs?qy zIdSw4AUe2)&!)&{fgLo6&T?q~J>~6OCvWqTqp4&oX_@eu7(W@URzap+($k)%?&6){ z&4GNrPkQFed|*ENC@>zaoDwVF--6|WhTzCEW^^u7Es61w;VvcbW~lTx>}X_T@cGT& zgs^AxD$+~6+!vrr{JVemZo|+KHNCG9f4Auk zH`3A{z(s5^O!VCGYCA=+q$n{6EkTlI3IB7I*Otu#>uB@G=y|e0tNO!-COQg!USXV| z9qgAmH}QI9+g62R1R_F#-+z(63SeZ4pKl;5CjTTYN>x=NTl^c2Br=`3V3Ly6Jh!?d z#D`$6m$&3Vb;DjQaCUrW^VzhA162lKf!{%4Ud>q}5C_|~YO;})aH?0L0wb&|cM1)ZT&QF;9iJUrvTL@e_|#@Nw_JuA+`>^vas zBZ7I`Ba#%1nnL$OM~B3@G7CVS1)J>s4=6QSd4ma7x*a+TeNmp@owp0;JFTx^lAa#Y ztM>Qy)(IWIe+STnUV|FjyVc?)CprHBP!8^Zn6SNBkr0SwW5|h9th*{#!FF}IeMS48 zL5h7=cou|iURK~)ges$&X7MgN!c+NQIp~B1hIZJrJ0WBHx z{s)_LTcfjh&4rf335ZvRb8hUAF6O6GNMeWwmMaC<-j;5S5pv79@BNMU^k?lfLBf9*)Y9@6? z`x|v$UMZQc*&VPw$d?l6aT99nCGfgr)_qVDrR$wRL==sRxZ$d3X|>ENb|%@kE(5uUv#tulXauvP{_ug$D{~0rQ!gYyh;^08s%LPwnlT_;C`{@ z#Z0(MWH{MSQJ?JCktf@7pMclGb9mVP>-=C)ujYzFP#V7!c2K@Y5#JM@w~6h^)=XRr zsVR!vnbQz^O{XcO@3u&K1k=Ti9(J&6MU}K1^22r+=Z)7>=0Ls44ATz?e}Yu4f%{Y~fPqTq^3EdG1oWzw9OhPB(kCmIgT{aOce*g@{Q+v23|FR|m` zfsx)5pWdSB;nrjAxPKuR2*SO5La$HBpVd(rIMCLX5&HrHsmme)?OF{zeG zO<93KWy2Yn0|w%ym>3-M0KX#m zybGjv?Fr6tsF)S7D__dhFP6d*nB%>3>z^|elG#o5oK?=8i&%ul;z_q{?!hkp{7gcq=QDT;QUShl`_<%2(Ck=wc#)n#A*%NEwA5M?p8i zyo6dVX3nY@?G<#LR!XnmaFS^o!=QZi`Qdi$3#Mbo^D4zwv)iGD9xvDKY zSzZ-plf%$%{AjoZh85|_lxQMq}&#TBkIUd)< zbE{1Mvqv%njrklp(nAbEQPp{qiiM%D4$FI9F0ScmZFUm$O&nr<%~)(;i7l;65rTFN z9hoBI-z=W+plNJ}=;NLjUK^b~MoPH_Uy}ymP2STv#HZbK1TtRb>N(^F*W52I`ynD(xTRzbE6r)W<->Pv28oGGt^@tXlSM2lYwX7nt zlTO$0aa^PJOEzeIh=kZGRn=_%Na9dv28AEU*n^GM8pBx<&)7E;UU4OC;Oz7{)Dm4X z(f?(H+pdUE_omNv|E(M|gOQ8bZJ&|?!eIQ3B%G4!j3{fN9`jATU^h$F*sF#OlmHX_XxB!v{>&x-k&L-(Dib7M|PPhjq+TFyDh=4Z-vZm`kjVf^wd0LUrLA!MR@U6 zzLs1AvOBceVak6yjvcGFEC7hDhKJ>b%kBI?&RcqCn-sa#thjvxB%UU1m0aRg91W3; zGUaA*WU?HWN%-VBkeVsM7>yK%&w1spjYSPdxaR3Pt8&O>R}OJ@x}(&OK_W(6uTe8* z0W{aT1^KoMBd_$j;_W+rc#)GQ+d<&kr<~2bQa!t*| z{HuYZQeIH^jg|5+7S?^}C*4M4thGxjZcBEC))JRh@}X!W^DD#6i%ANQV7L+?7Yi(2=4#n^XY1N~L}E zr*tlg1wyR9nl4hEEt0TTj(DEDo^Ug7J$4Lg+)8*q-^Yy!?&@xP$Y)4*3abe17yw>N zVZ5E~wH6EL9VJrsSR|ine92*T_vOCH^EAk)(4yR%pl>S)rM-^LKQJnPB;hl^?n_8UR@LuBK_-O96%LQpAXm5y$$wXlNohn^w z9_n|zbBe3Mj*mGZX-j>@mNvIz`Y4Vo-O=p+9OGadr7JIg1v!*9Y9I#TNB1Wxi4j} zJ~G4*!OHu0+9fSe8zCh;KSJp_Nn=kKw(r`QzRbIJi4PhR*=S6Mx!IU#7zsranX10g z|1LHh)m-Zlw`(}~-h}Gy%)C5Le6&ryX%rko{{r@5KP_c8zN!Anku!U2Zgy{$(L6cV zx~+Xj$lvl|G_BEzcEZMAh--ynzSkr@ixeKwCF53Qi7%=# zP?z@m-_VUh=0-Z+ZJO1Rc9(vP;)^50xQtDJ627wkG`@pfP+9%$dPw1Q1;vEZqPil} z^Lmr0RP$b>nn*h_+bTJ41wJE{r*#d=&sAs6*&#dPimyr&1e5hmn$B+>e!xrlj#x!U zv)G$ErxOH2IGmm039KvSlZX2(9amG$N?9izGCv#^Cxs$JBnZR`;(BOlC~m7#IjD&D zCB3`8MqJv}*cB=E`^_zzM`n>rRYGtTXPg~+2{jUm%u{`vI>GQoxgik!7Wz_b3SM|- zuTTgg!ln38;I+hDG~5KQn#~koYM!&T4s?gZ|8G~bP`BbW~hH$e%_RD zt#uvr>zjj3f?qU{`&WGt7aRy8oi@eN)l^m!cyFd|hXt6dP>KsAc}(oFKB?(ZRo^F? ztDqL_55O45g-Khf5F5=L&u%HjU%#(?hxs{+ ziYM$wJ0T0KoJ#k=>qntt0>B@D{Ti@-2~Xn|XpNioB}T|9Y|wCl9s&)bL5iyFTHkW> z9dpX)NK)5SO_`YsAx)NBy&Qt-d)NFNgX1ZxD!(m@Ev!#6a(muu!(;qOTdO!m=-u`; z{THaB*Q_Lkkhfx(s&1T!zu`@H@@r)tpt%Ipm|hg42!*r;MZ3QGZ6!UHYmcy#ZJTDY zh)Nu1MLMlzOCCz(TI?BcX>(V{4smRcg=wMnZo9pLj!>nKcigwtEgGDei8@Fk*2aLF zp)xfVQ_6$i_Tx>jqnURQ-gN;q>9*Mpg`Xufly zVHqGd`QeA|Cy(VjMVPk#2#lcwhJ7rl4Ud zC)SLfM`I7TDuw}#on_%~q*~!yq6!2ylHi7Lf)J&r+Oc#Rs~P-m^}@#)1-56fI;j!QOg%l3&VYmVDdZr{l! zMEo~1HL$v&7;FOxC1wNEPT_#iD{Lc+QNH5O!TYzRTt=@wd5>JJSKf%p-X6K_=TRRL z*|$}^p)Fsx0#l@yZc^gsLi(g64F5UQCkF!m00XyN}U6!Q! zhaDO}mnT;g_}}6#z(G5_hMG`g;UFDKQ$=mCo@QJ@wlO2sJ=kl zZO$LKaWcV_2;)yPy5FaSPu(3|}*W@e1qZl<>T)>UH}l`>Fv{`3z*TrCt_kZ^L@y%v)7+sT6DAY zGb20ZJ+RcjZg-$CrbGdytTd~wtd7?)XJcy+8(dfH$LTzto;WVePWQ8qc?%)kZO15y zzHTH=mZeziG1^RT%*8>L0zx)47@Y8#tNT5|8MHBylkMZ;`qSEl562W`IrvYVT1b$R zf&;8wwo(n=rp8W`WBM%jlGcxLPEr?+J%<}Bi>A!|?&_Ww*3;5u`0qBlZ`3kpg1gD) zUuw@rpk01p4WD-Aj+&~O(`nQCYW+PdKyp$6sMcx^T(1e|PAqI*y0qS!W&;A-p$A>@ z!L@$?Lp=hg>`vRiivIvQBuK_Dd|8T@en?YtO^W+VOm+_IBUVY*F_ZIEttnHLxqWSp zGWID2no_2c9IqBYQ-;3Qem@U*-UTXNQX!bHAbtiThm^;KCMjAANzub8n=|TZO*h85 z65=VlmD%2@F1d4o@+Ktz0F=l0$Cc^m(%LjyL;ZnQKha*Bs{8?Pg}uH>eqU50MLSzO z$i4mwyWgv;{@x{Aq`Yk6kTC?6gr$vwh?!cx$>pKr-k04g<&f*ddtT$PN7oQm3D5~W zws3%7P4ML`s1jRX`zjS0C;EqjCVQ-wJv_b~kbk!HjHEU4y$XJR^C-_U?qO&Rar)fZ z&fzL?7MSa@B)|Vy^l{v3LR!Gzinqvm_gh!Sqg#OH9?uMOrZS;p>E`#%2TN&5f8zWc z60-&pcHC9o`-|AhhKaWtDKLyR$MCK1rW|$I++SVkP?z&+F+J55^V* zs^(rkbXj?Td%n~qWF>?iwt}e?a%T_}*|u(C6P(<|V?u+ApPWS>Jd^uQ z&m3*kGgY!mF32~S?5)#;)5uVuFdVR!{RjSazqdvzb~+|GymxaO*_KuLDmrTUwiuG0 z)AL$5RS16od^?tLUzPE;uADvk2~Mqj`jOf!O{@FArP?MRl3L{pnl(s_)&Xv8PhZLFsmFB5Gq2!F{!ssh0q|xRv@Jp;b$%Vs~6B426Nwjqg*mU#Zm~FhuKrp%y8UW z1eR51$@O1NqCl2FR)&E2?;qZp0=%_sGF>(4X3(8m7ao?E^Kr?c?( ztFr2_I4332z<6NQ><$ zLtvF!GpgO&_lb%9ZeONH=hB{3sp~hYl znYRObj}0V=daPY5qP1JpuJ$zx-}U*qVPt|r-zhrMyCAn&*j)@uz@pN@&skSha`Bx#kAj>2 z%;V}X-s6}{;^Bp&}T>oEA-{mp|B)CzfO3E|izG$rvmY5o-`0roM3qBiZFS z9=Re4sF%Pd03c7Fpcoy-`EusWUx_+!LyRX8#u zvGcSeFqmmjFD;ihnwV(es$r+jmGdbOF}Py3mc_YS!3?7hg?G~V!{Lz?CzT|bllF$;$Qr-hsDjG<%gpOp!X#R*!9C|d8lPmL<$JkE24Dl4zv16ze+ zvJ^7Nbo4&s^?sYX6XQu&pCPZ-9F+yL%!Dl&b#?u6U&l?dx6fplJBNxUN-F|*1Es~` z#U9(Hpvh+4x8;z_NiRBE#Y2Ls={jtheCO{=w+7p0u|$>SjlvQm2Pf7cmsukD5#6*&pv8szNp>N7F;;tbQzM;>b-=I{+#>+ zumz0*J@$ChwljZNGFryhx71s%c02%~6&EO(;VcNBH}MxqY??!3$sCob*C^c!Wi9XD z!~G%5IX(|6KXmT8@vvYNVI=iT`>_|_gn!yWsjXbk%>BK(g|&Yp$o>X6x_|^{J8beQ ze0I57`c}0+-ofE}!g)E~m%^kjuOEM2yUf05_BLZE--jvdk%AeO!A48)gHulMtbzEg zaq3(&mC}!Rpctque~LOY2%7n3#7hUcUMuD>S=%ZaD~#(=k@SwN+zXpPF@0V(QCn6I z33Yil;sOCF7JiWfHgg&po8N-1&$Bi*~t{DG$z~m=&6MZj8I##!tTJ<-p|mbQR26LQTnmr%5rs%rq(D& zJDGeX*}YZx(2OUsyST$(tT#CsZ@zznT-&&h%-9PhGcg-wUyjpD`+H%%57C zWS{zFZKu?)I}WzE!+!{~Y>lU=vtY)<4-}IQsBml6QQNy0lOz zE{It3E%RcY+X>C5Jc&{lM*KVvSDBS-XbDF4Z6gXTA~g20MLb3JCd6Iz7kygIMBgLN zj)yUo*WmRpx6F0DB{NKMn^})t4Xr)Tx~yh({BfgJkh$BPis%MQib8{8>A+`NCK3gg zjdJ1J#!Z@2T$MV8wGN}$t83`jC!C;psKzeOv}#&EL$shg-H5eRS{sy_geLeSGp<8g zo7do-m`^q1dkr;2J3ZUaA&QP9ULD>;Cu4)y!!~nT&?1J&au%;_i5)_qUwy&)koz#h+|JZdrrlXB*cmi{w&b zwWF0~p+NV8Gj{Xp=ZUtP1kXj!b@&;$`ijabN!%4PorC<8LT%~_3cUVu*2p_YbRX|# zog|%z%XRkvU+7#EP7#OLRM^=ZVSHDOa`YDu;@<)uY+bq}?sPA*1JE+ByBl!_k50Ue@oB`(S23ZSoC$3!Z|>&VvHm!JXV#c(FUCFoSt5i& z-yKycrDlt ztu*WC06n~fyk;|d<+z|!p!+8AHc|}n`}#NN^aDt5cO;LjXj(vr;1jCO3)UBSgY~!X zjs5_1#&@C679lm|mCgVkN}An(?=>Zy4qLer>@y`8X~r~NF}W?_K~O4|E4lDUaQ5)* z#ljf56N+8*#?wt1`x%ejxnBnC&71_!^Y#p|1c}7W&>a_v2RiR?oFS)cY+!_1Nl^FF zBTCxML#>`*qwx;NjIjR09fVO4WgCn{=HR&^3apmj4wKJN_|O!tWFU9xToA|+p6!#C zZ>t4UX3C9BsA1}~-dW>t&gHK2iO74b-XTmq)Li2R;K#bPkU~WFY9f;%gM}sh=h=6T zGTHa$n#YdYU)4T2v0PiN^(y;^xNK0_2g=r5yrw!hfIR;JZ8=~ZltE^d^%To0Rt`C` zE3sLN>>W}(J&U`x3+G>GpW&`r4&+Y?b>O0rj$fvBt2nYvIv+1hSd}kSD z)*OWB)dbghQ_9)5Iq@qC1?48+@(PF%m$tPJ&2a2&ijq87<40_A#fQ8O=lp}(J}mad zI3E6<($XT#;ccj2edLia1I+-7@S;`%5BI^1`f3az22w}tMwh~S6Nv|xqu6Fp`*;=h z0dUUUH_64p_8_~hI09{Sh;>zhGIB6u!lb_$@l@^y<`HuKG3x{c(p%e;apk37c%%&* zu|`Z5Ne4H_EH2sFBh4>JbuzO<&k{b(8A?X0@##$IsF}a>5Lge2f()^53{dfyaIlBd zRg_eJmT^hO344R)klP->vXSTZ}mL$n2^2#?*+i6uK{ePmITS3keaGX^`=M0C~% z(7?&5Q&_%Q&vtJQGMpQ(2mX4ZwD&x3)K5{FU>&cZa1RD^x)mIYek*<&Ax=uR*U#*% z)&MG42H(q4c&OF~42S%0)a?3DOXGQ+Q7QEi?J*IKk)4G9COmtx}6v z3>{C6%-=7yF>v?ReWlqvX4k9ZU2m?xlyh=B zI!&MeU%?ij82=9du|Q70J3DDEx0uJ$>pJdZ++#f?bnjHfl505fMvgqz zmNb#<>$hWY0oD3?{#w5mfYeWU<6?l9B% zZ>JK9DJr!aNTp9dXuomuiT8K?n(?P$vK;23rV}QkS9y6YWw%dkbE))oV@}b&rZKw> zzMFcnU3QMr`CfkrgE*IADnj{%t#R*$p~m6{H-pj zohkzmRiqYSemKU=$4TV^k1m=`O+1e3E(D_E++z)U=qJk^sw6U0mmXV|XEwO}u~u_g z;oK=k>qk@Pll-wU4fBld@5^$!G%y9XAAPv!ahopEx*}w#j;lPV zsB(kLCZT}q?R;Mjf1+d5Eb(QMv|x`*Q<2TO^upyjzej|sh7C1QGQEj^Cxtl0^=o~6 zdzy-qAki@7bjW9@6R9W6jfuVb-xr8g3A}FwWi6l2?S+sS~9}->5kX<+N=2d#vLvtAOKfj1aa^B;*677=Cs*0VW-og4eTUx zcp@Dw% z`JS!L>$12v@{mvDg=p+*>mc~i!963 zm`3F?+%UIeZn(`)n`-)vIPF(Wmq8jZEgPRz{qdRJ{Jgb0vg)mOnNLxbJvKxEBhtiN zNC(a@qt)5lYoiimF|3k-c2HyXmZm!RU)1aQIJrGub6r86JULLORgGGuU9Gmwb79{2!=C2)njHa8 zJQS2omV*AEY{2gyr#HuLlPlD<)p_I(n^VB+4ah{eor72d`D4ekts|dT=r$1Q80prY zc@)uYRRNX7`T0EKuMaQ3^ZlH;iM+Qx^Ynfr`*K%jM@B~VG*sj~MSvczpI?l8q4Aa> z25XoivZOLK-GA<40R!pIKC}MY`hPN_(Qx@W$J_5uXF?a!dB@1V8k%~%;;q|=W0}0h z`5Xa{+~IfZ{4c@zzh(ab*2;UU@qJH}Pd!6ySjvH5M+9TRv#8B9rBvT<1+R}d)z$AD zj!}al1dHRqE2h}2_aw+q7v}iqRU}<@M=*t~{*!y=)m85g9jD`Q6_cY67IBAY-`l#~ZUL3&a$gusudF z0$E95EZs4|+Y*!N+DN^uNaSG^5Zth0Z`kpR16@UwFjIt;UEGmi4?S&;b-Z31aMe8MkL`I}Uf>veqExtYQ z`#}S@wk+-hOc{tPVQvMmRmYRGkQGl$b-;GrChLF~=M54F#gFq2y={$#mPG+b;jO^J zsuw`5IdcYk{3}6fU-?75TmV0}D<*?!q&OKHu(;AhLkqnYtFQ9f9hB6l9hG1?7 zu)!>MTXx~z-LWE0OA~X`t~4wpY`uX4+xp_&-dtdSEPLXo9#RdW?0S>i7Aq_bW;P!E zjx~y2%@n{qiY;e7MmjW)wq@KlfyKS?&Ziq$m|Q=<`eStrjO;g9+w{igcO0HgkiXd` zL10zQ`gHo^_5T14B#OPDnkW=0m@eSgB=@k#;`wBTLZfwoL3vnrL8S6+u)g8Lhhexcc#rb#qBp4QrMMs70LwVZB{NxyPfQ zu%@KSB%q24sAXAWbXA>!0S%4M&-~-vZCRJn)@n?uUo&}>p-B;}59f{Yy{pFd$Nfm} z<=GuAM~JlxNmS+9H)#~~Bc7OjGftGzXDQ}xjaSsHZ{HMY$myv3UWBtaZy>6vVgqrF znhF|cqt$g)AnvDk4IS)4gL~t>c@Xp&R1j!-^3z{@hCsLPVQgKRB^yey zYk+!VpQo$oYV`cg5jL2TRPu4rta@{!sR4|#79f&84hr9xMHE@?R_!(9-5R?CU`4;S zG-WhUFNu|;PqATuvjTq*?f}O>HZ)C{WveqVSJ`O@_Qu+%sps)ZJKiSpMXZ0!`26wC zwTli(mQ&1`v5Cs5kjP^O#1Ez~qC^=_67P#~3NQF^WoOLH5NpFi}@!kVMQ#Bp?3(2b^bUzGB}FX+lQeQ{R*pbyy!6Mbf3zp< z8AagFk1dy0%w~pI<8XSiuX`JdbjPz^CTg6jmo>_ga3iOvM2Q)fo7;o^@$&xw_rPk( zT{+`bJw$Bad0||sAhm(oG4J~~gT5WhFLvHHF~s#}_I~%RpSFgvgFf+dJk04)qmHDr z2;~=LQsj@0haR=pRV?>q8%Sb#?T<6p8m>(KvZkh~-Q=t{W@CMzbQbu>=Xs4+ETFBA zLObIg(B{6=JCpQY$mORGg)yE9Q9qUm7vIox(-l$GlD4_9z3<-?$su(H*KV6|(UuqF z0pE_8^0&9OEomfFxabM=k=q@OH~JyOO^BvJzY*b<0R7(8Y*cN zixvct&4x3V6I~Y9ocL|w9cI6ZNGYj_ij_CY>%sUK^REiOXAJt1yX`ASRL&THf-*=S z82y{~cKCTysP&shVOOVUg0e8`eev`+F7SDB#EI!BM&#<-1&8#fvza6R%qF`Mz^5HTOfUQpZ&L%1Wtf5fW9|U~k4V z2&NEBo?ws;cPQfpy;e43B>8+S0)<{U?r>+4N0t+?ZLq!j<0Da2RONB3GJpq9pVI=m zmc9w;k>mlkf(5#aUphvSJgrs!SSok}*kHjVw3RXllx`|-&LmJtHBs8Yxd0LEjD_W< ztaU7RFgGK%Hz1=dmPuNrE(2csv2_0cYJ9n)3=nrW>w}QfF4^w)=I0hxed5_WvO!3j7Un@UiP((ua6I`q%T!sp;xv%9wdI_l*(ys8D;=(wT~d<%=|PF#hLk& zl`)n8D|9CPapCkRsXD82NgewAapf5v(K205&~fo`dgEi!;bpA0`UCsDv-&E1c~cmX zRpdy#v3pz&xcUgoP2EXOT_Ar4fPgVUq>~jQUi{l0(;}>AMB;$ z%_od>lT+2isaHv3Bct6&Jq|psTmDv89K61NX>h%N^D%zsJsmU^i)p;l1=!x$)j&=rlxp^x)p)t#OWO=yuMvTr1HDmvd1 zoskm#aaCnP%EgM2Y#4JG;-Gf&x4&Rq*DZa_Uh;~dE<14&|cUz?tB;OCcG{qHTq)-!I7Ur=fat%qJn>T%?mL@G)+ z=EI)n9w(Q`A|V0lZ+`gl+=4`Cm6bqc@{n_-wyA(vW5qt5r!n!oj0q5jZ(+sK^dm zP=hXo;2$*T0Rr(BAs?PKuBvHETG#=7l!O_xnl!HG1`CgI4K3 zw^PGUNn2G&2dIj2HlNQLGVM{O>9g5mT$-urq_9$8JRbKJ!!L-kMV&z`8hc}l2ZY&6 ze2ib0c!iqBtS5ET>Jnf*JGoD;FIHJ{EnSwa4sQ&Z46RGJ`Ar;tp@Wob82#kq`)+;k zm);BNO2x{cjx3BTBW?^x+TTNsGiREDt1zN^e1#&Jd9ge&wkef$hF_;6jp3t~ILO;G zHOLs2Ja@h&y;d>Bn`%?4_a;#SO(KsnCp|#!F}F&OaD3$!^_%t` zu`O$TT)KRxI-f0)suebJqB5sicu5ASp-nL`c8BFP}kV)cT?b zYP0&1OncT-DZd`)5ix7YbXIGaX7!CWsF5q7u{%or;O}vYa!nT_W!aRAsOCnDu#zQU z7EXHG7%6myl5G02p0_ugI)UZNvJt-hez>P6(>gMinzet8%^gycZSFxl@yC2km28?K zhKo*1JX!3rG-uZfO~+otwkphY#zjw;K_ljpyi@TcZz*6q<1#^|t8&R+Io+xvBuJ+I zzosl|?Jt*8Q?yAe%e&N@Nh^M)*y$sl#=k4lw6!#`$(RJyYWrgwpx@(pEt%f@D?u zmYkp9s=FpVGL)ox#wX7WQ!Nm+cN&E^&+{SCiddV}MB zr-wJ!RqqUe{P)}#G3LYHAFck{6iY$k#%VTNDm^7^-)V@BN`grONJkA+4h8x z4qEpNaqIg>iDq|)J39L-gN?#*XL{h~RsLx5%7Rzsp z{_a4>j`!!m-P2iY6;*1L7ZC*|yIl6ip6R_T)sGE57?t9v^dh3%lhYm-kVewVr~ue{ zu^9Gi_EE|qtgNSwK^^JOn5T{`Mm%3?b3TcuvB+?L*L*#T{g;1cZD-*|h062E=>+L4 zh!IuqCIXgX?$&RfYOKbeD}r2_mYQEpq%Cm%o&ovCj%cipRQ~|!E>#p0#yPY;pE~DL7dDrSD!Rw0W<#&+yx!TUD#G zT}?w1P*PG=q<)5G;f6KSQtO#>T8W6FS410=s3Y8BitQt*<_a_)M{)(xnpv=(fN#bQ=zBQ12<&Rt}ULWOu;Wi^uNQ_vQPdAHSn{$XZ zX4+Ff%VDMaZlp57BLJ+MPnU7m8jgdh%(W#v6`G;%<&Bd@>bzT_2OQkvL1|iSx|QYB z^T|xl>q9ll@!Q)OYqW-qqt$eYE_o$o9MN12=hMfy#A5e#DSSJC=T(qCrjcsnjY>`C zfE(i2!ItS72Bxf8wJed!mjyR~8{}eT*-wX*xt&Z^lbI9&vCA?3xEXVJesbF6m7V26 ze6}I3!`k>(ypmlfrYW+ullc6Me+-fCz3+w0G{%diNLjNJP>j}a3A*w9F!Scx8M2sJ za+u0pXrX6+cK6pXNTmx)1*V zU3A}-rZmj(XRwhWK_8Z~n|t)XTzu8lnoBs*S*31UpHNSiR#He7NTn7c{Rsa6e0|T? zRGQB|tEOS6vieC;tQn-`#lDxv&Hn)2eWCLt@gkah;)*J4$*7fG(QK|j_wU9(Rmhz$73q-5%QYfGCj$^kV}(u^v9XS$J3MRhMN7o zbByaKj+R=AWKcaUNF4n-jBOvbmU$IFnI&*Qr_w`<{{T#UqEFgCH=>Jw+KVs!tU0zN zXYE6oO2RQ#;03rKpVJ-i%PBQu&CitG>0eX_?Tek~6{$2C%&5rL^tRNu&AQ-Me%3mX zDSX&kMGa!TeU3Ur zqTR^#9+v*M#TAgpC#iz1{{X%@T&?c)ID9;CnvsN0cd#LkUQaf|!BAImUr_e;#WKWV zm{=(zu|zMHJuQzs@E1Yq9~HG+G#L#Xm9xq~3OEXH z!xQWdJV#DaOIKI~NRGlX8*t!Xi{sp{-J#+2T`set{ts6LJ!4!%^0D&R?@$8|Yvc0% z-R7?gh3Ufe$?SVKf!6UX?H=O(!`=z_mHRR3nq0cKOh;PPF~-72U?aZIQ3v$Lw>b`{ z*Ke9mBhu8=@~VLQrx*OO%$r2`lP+mMvSxWy3DPW*2xxPB-rTjomMv+aZXdzhF zaGE%MFY#lJp3da(<@hrkeD!`;+FagT#~1A{LS?zvh~=uJj*~BnEyPI-tP3yG+XkJy zLafTneqLIXvpEE-ejID8(b}%AnrWL-Q&KhkXpxV+A5(^d!%X01>mq9V!d03@-T?={ zPA!i^apx(_G^V(s%&F-<(?cyiNdQT-GY$vz#H#S?R3?hr{V5vErmI%eNRoF+g4o;Nz9#Rzxauc|+L7odPw_-lj6nOe z9DPPPdVj zBaeII24#?Vef%~ypFNss3Wi{_9o&y>Vak)jdMv;!lFL)Ynl}#nxc>mo*wyXR^jRG` zPYX1iEmV?AtYnf`A9jAxwEkosaaCT8@cN@Il`Av(=BSLHyc4?%U#DC)MV$C)1hsL; zmOQXJfgFM+Vu$O3z98rteKjQ~@Or}{h5>~sx##}jj(WYip|u8+@a8%S87Q+T;AOSq zj#ezgxgg=*i^E*EHiAO!RZnkHg=Z>l)Ql|J&qrq29Wp_tD?Z+YSQ=8MKs)Zm)H?o# zhd&ENqN=8l0A4czN}KWy7K2piT5N(y z8&A(amd&w*M*Vp8W3fl#k~7qr9ThjK-eR;u>V9yLYwYTiOuDv+CY-t0<8P#s-x6$T3To}Q0p zl&42kEV46P{{T!rU#omU&2yD_@+uf*2I5J*JH@&TPft(os%U&pT1T8xXj-pkqak__8Yo(YX

    Vk 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 B>iYly literal 39727 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 oRR$3Z&icW!8T`K2a7rpPZ|FJ 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

    yzkh5|oMaj*eKV9rK6_YVrGiC{ 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�>c-1!v^ zEy(!4d}n{=k)}-}sM?X8bsRMHOLFiOQ@D4r#%VOBXBs4*;-qA_^P?nPJ?)CBG^UuA zg%YDWk*Z=hNtR+f&yp{S>vEkJBf{@q(N-V<)ns6^52t)|maB2ma~jY;#ZN9@Am-K& zA03V}{{Vwt8sSSmsFr$G8{(W0te@y{ihPSi{kP7Fu3;KmeK>Y1eerD!dL}xlB#or1 zrEzC~hrDOs6m5q{Ktz=FdY*FU{F%cj2kJ4Fw?^fwNYTrwWQMXa#DMx`A0T5g(&(Bf zYCh_E+9^6P-o^rPT2yGp%4LqKnt31x?&etBZT1(#sCvyKkkup;E`KsipXVu)(;)a5 zW2f}8R|y7hBSZzBHk{k**A>Z}X$c^KC(5KpLH81bZ@eFtER#Lb)m4bGG@r_M9b9Sa0?6!kMtIG^yjB<=bUj)fMi$Z7Mb zJgqlWl{)~MFChAdx3(KD)%grdT4*%YOGnmJXbCC$kL`mjM=jA*nQxa;W)Z(BP^IoY zxx!b$q0$(ZNQ_l6pShpa_umKK8ZzB!KynFOWEFGe>`wwNP~YdKG)J#v8AMz3?6Xp_ z`?oQIRE!ak>h#lBKq=#zD#ho^V8BX0Ogx#km2BbVOs+{P0)aF}HnI7&vA(-k)%o;` zCYxZ=*wfT>1K^xmnzuKr&w@6bSSq%SvX-!vdtVfCGM!7N6)NPV$Y=6EK59H=iv2K@ zx|<+Oo>qq_mRdF>kYQp}{+R62XZn%z3ZYGq#Z6M8@*|KEQS>7jvdsHc3VB+WB&A)O zyy|u%)z54}nq66yOP9wS`3*#n6L@4;cthIe*p<4$A*q1|otb4`W1q{gW9@$U*!ixf z8CRbcS5M^M?_p+L(T{u_%CAvS!v^>%WuvIJ(g-aT{(EAIQ(08hW~lOMxuC36vOTs5 zf2TOEn>($m%_?VuAZl9F8zhCBZ<+IKZ;~Ba^~oIXmzr&$$2yR9p1_-9Jk&a+vo~70 zni!@*cxO-wKefgQSu%Y~ozl@&eUl=MNn&J+a5g>1OkBFRP$o@yvZ#ECIFUDk(cj|O z6ck#fVLzE!OATUzZpZ@3^I?Ttmr+&aMnP9k4PZ8&FreIDn|8&lC1rkbwG`V=dFd;Qmk}+ zSwus6AL+&t^cvwBo~t>UoSO#hBZY2onTD9lB%y@9byFQe zKRcX-pYrd3>DFXba8^SlK5!nL&7?+9O5-&7J$hzkB+koIFcx%G8!?^o9EzVXrl?BS zSf7{WVhVRfD8Ly6rD31 zR31%Ub>+)@q>A5&_Qp)QlSJhoY(p(gT@3t?9m#^{++dNTskHM#R%)6;PnS04Ef~K~ zi(ofZ>FO%TAQNYDLsJ>MUP}o_wkxgExk1b+sw2#$5+Jj}W;Su}*BNVb9V0eh4LwC9 zuFBVnYd1fhG*o8Vf9DEH}w)B3Y5j=H)^Op2x40wsx) z@qGpiuu60_2ApMS>Sd>l{nYA=LK1o(Y+sqlrD}4zWs)i7X&UfUENx;(&NO8jwitB% zT=d#{dFf=_B#Eqcd)ORF^`%7?l#WPr?6p)EBk_&UpQX6`uoUK%`hBxnXy>Gm)kXkG zRarv|a6WNrW?4GwweoU$maUCfgBb}Y4$B7jvXS2nlIsYd$!cVz)6>aH z*YhDNymQYM;~h+|Gt^a;^NBLbcq>tM##x1*^S3`-Ql`)lh_`R`a zSDk8FjN+*dO$`-LjO>3if_n>F4O5lt2=jH7vr1Q?lETXpvqo*);M3`?OCD(=R%h@} zMKpFtNYpeZ`{Hd?Wism;jE1zwNl6WIu?&(W)?ho}%Qm*D$^7U|1w6!+k|m4q{RjKu zD73y~KAfzEyH)va#Q8JELXZLIah9V;PgSOXms8F5gkl7(FA^VYSzz5;mupz$p`IMt z1cB6fuozb0;`#CoQ2L=HY~Ciz*Z|6rC}lS1oM6-%B8t9Ty{FVQ6xC6n1x(gSc;t_K zB~F#o@#;98brhw60pKz*1l!nSHFW6Z+7D3C*Hx`vp)CZ;e$ODa@#vId08PAnEtA9mVtte?a=6GLWo8D4@akkndQ zH*n@qdYfCeH{|-GUQeiNDGpCVNXnBNJuyE{lD@y*nQL zIJO>YKNIRQDtC^yiVDKg36#d5DD7d3vrRSP2%9dNpHR}W`HA+Z%nN&Ww>)7q(%O9U zT`sj0a^(~&LKkcmVD2Hdn_mM?{{ZT3T}5OSX_V#i#TBXNF>Xms_`SKor_dUj4R0jR zs?YG5ZcIv3dYd25t}&I*kN>dUj|d+ZEl&a-py7o^Cep63q=%Z>b zMk?ar-I)V?ZLX*$P;P32S>yj29GU;U|8{eFL@8#@00)*Qzyp`Mgv^izmi?Qk*xZ+=RP zpYM$6;hwRdN>@`>_=5u18Ochd04gW9{#z7hUJ&NlhC@KJc#u+hc-R?M+a?~xhd5)@> zE$&Idn|;i-Y4SEl=DNa}!JU~kSj)E*jmeFm@0`c#Dg~R zN_u%>5^br9s=`2j?&jwl-9M*1AjvWe%Wi*FnNi3TPLj^@2>o5Z?dRJWvnYHJqR>w> z!C6z4nO#J|C1yqkkPlzfV{+dgqTc@iH(OQsQ=*N2pO&}848j_^WsOt*y2)6!>POGl z5`#hbUfwB9G+L&yvlT96plX&Oy(Z)@9jJJ zRAwmfr`n=2NiUXndk&aNT-(7a9}B8kGU}?_h3ekx!%+CasB;}DRacbwUSViwDfUSe2?+lHxGlfi7Ry2R#7#4lYZ@9#e-1MbwaFs1RR)X& zOQpr%{SG$f-Y58vNtWfaQ22QZNjz=mMA86Z=ipc$&mCEHpNX^UDmb9id2D$c^F}3= zw5lgAIp4Nte;ZVK||qHRCC1lNG03nWdEPfwa%$M{U?Rnyv(os)CqH?ry9VVudO{|>t z01j`BIgVxH4OVrQeUmK6sj}%BF*!b`jY^H&Tw2`YpP2Y<;+0mP3pa>)bsbzK-JK#( zjxG;ziKzTA>&ED5{giIq1<0MrdOwsZ?w_9uGfUN$L1~Em<$>>kN~{y3JEClQq-S znO4TzG4s4Z%&RHqL=v&g$Ta@0%s&nudVk_r@7H)q zt1}H6l-aL{F+pDo&AO@}5hPMa2j~V4bKz7IzDG3vB-GF?95F`A6zZa=fH~{m>yHzy z(q0Qw=s6O-ytc zx8L+9`@6MX73gKxbyYR~AXimY24^(CZ?mY|+%H}^>5d+p(cTf#!J84RGYrWki5jPM zRD{H#yB^%*p%$(1qMO7>MJAWb8#gT9c^w0ypSw4`*2j!CoAHN2qh_(?{vGBqEOf~8 zAfW)%uJOf>UU|ZL{BOs(Iyf&MfcbZZGX^zP`6AW0EZ%gkWH#pGk^M2dG|#*hq@u~B zmm{sHK2T~S_BmLA(0Z(I`s1^bc)Lit8mlnMyeG`WOIFc}CV>^$*d5?>1M=;Tjem-o z%Bq(wn=A0Q%vs~yMDB{z{Pa9q^f;TdzW%YPkLvOK>t1L)%UVTG2Zx!pZeuKgW2pNP zjD8E;v9Yio_|v0&TB4=QYT?SfF0ZF(pc|Odq6zHXi9F-UYc;C|g7JiOCOX9|) ztI$<7`G1ARClzfP(mNs&fA6)AACSjNzr`OC<;rLtgFw*=iDN!;NjS7z*mJhukiyaA z9x`TnBDyNP%T7?|OIyC4Xyay$;scA0Y;W)|*}j4CFEq-s#Z7ybP*%kY8mAPh$s=E# zp!1Ax3*TQ`U2xpG__kMO-YwN?T6kg0GB`57Fd1j+$?4=;;{4*gzb^55w=}5xW@D!5 zsal`@osmlwd+~m5F-~LQmVY*^q^_&+IpU;>b!jNVqKOXMTK@nz=48GR<@CCjG^nZZ zGcc~Eo{*rX6^a^^ZUny=nv=G^l{@3|{o6)^@k2Dx_4M`n!!4z+lBhCNz?W5y-2fxs z>5Q45gWAG;swJxNN9@caVI-=nX*+b{-`5;SyfyIaDbU%SHFt=)j$unRYP6Ltm|jR9 zu(&609|IY4?JwYzI(sZy?C!p@k_g<>%(YUunC=(39Z5K{^y&Wqi&GxIKYPowF9zu2 z)O0oVUL)74MKT7YH7b$Fc3Xkg=dL+$cx9sUjQcVBe~7t_cb!Pl$x8M2bW+0X1^az5 zMthrhF&??go~o9nr!_K0Dayk+RrCVAI2IoGnLfJk#Wkj8`DTaBsxvc9YMBKC{o>#7 zjmF0R00S0fmc0EVILWV*my~G_1#&$Dm{CuvWz2H3SLaH`t;@p1TWMwd@N>oRFDld7 zS*W9}%xK*h(aHDHU)9e&{{TDVtEYTc)5)Xr8M0prGjSACg`S#9C5+8;_<-j4>i+=i z7JfA41lfOub2?707Mz41XZ2f=ZaBr(TixH*M!d09>i+->@||x(Pfw-lX3eIZOl$x; zLB+n5O>30kmLstF#+^UnW}F(QG=nej!!f6+N^8vWW$O^D7yJXUztbH`zYu&vhd-r? zpTp`Wrj}J6dd|0o>&@-{_}{1V{{R*ap3X_k?ml4YE`%QqGTe<=KpIpy*H z0LiW%JD)Fe#*mrmb7Vdf%>pA~%0sta$w~)tAKY5ogJ1B%|=+jyawp zU1h0Xx;N=yKcF};WWF-y8gf%rndEtHXC&8*M7yF?_F`7#{#bhN4}49j(^Rpa5NRo^ zytey9f|WKNf0Wwz&hhwtZEMqI>T2yr;@xhhiWo91j+-lKl)SAa-4|y(bnA!9X?$9( z%xadVT{)Lim;k0RUPdo*ZQmBZY*kg^o}-sj(^S;>nItepATm;_qKOXPm-am4pG%-< zGVMv4NnPTFb!1b~*{O|6BU6II?-iHZ>E9aZ;!mYxyQ4{=JWZ<7Gs9D@GU_bZ<}K$( z5M)%h;jz9jYA*{l9P!Z#-xOt~jTY4wXw_vm?O+J~apTFOyf(`;MP)8y;w^P_b5ygv zP|Vq$BiT46z+2-P^Zc{HdR(t371j0CfnncIBAHy&4c*(D-20p-OZ}ZBc|4vKWYOzE zSzF=_YeuiNDSq3-9h{yIUijqE=pPN>tgic3xXkkwXi&(Fn7as;{cflFU`3sHLznoG z6G4$x%bb}BiPnxn58d;AEz=rwpNQTbwN_@iMuyBBM^776vSq{>eO3!&)c4~Td3=0( zn66REd=<#NJ)g|4sm*fnP|G7M(#X#JZPfJqv36shctuGrLd~YLDuy!^(*={{Rc~ccqG@(J3XPMUp~#$Q0hg=Gf}X;x@6UgC+hC;krn#64=yB z8X8Z6d9}VVo4Gvs^6S2?Z4SB6<6TUY9v)`NT^8%l{6EV_^!)sMV@6Tp($eMi<0bIJ zGBL&@X(BMBMq_@;dgHSCx5YX2GgE(ta(ZepyL8J?Tshh9K<{qYnM6J;)=|~9Y}$U3 zqila>2!yXEo!$5t=QXas5A`p4=O>D~u1z$vQg~qTyBFCEvPL|=S5iA;b!MXRQ!vda zTANMe6wos#n^HFWCQ;I%Pg9jy_!Pj?4E=d;0}Md#LVSwmW8UnY1UQlU@swfp{<<}Zbr9D0(bqcHI&Gpu^3ipNg*ijOFF zU>4W?F~m9p!+H%dT@7})uFUD4rA)IL;~}SheXa)=>Me#DhI!PPRWPpc zMxv5vl21Bl$^j+X{CzQtJ@EekEss{yR#$kNP_aiUGt$XY0G7x)0C>M#cKs^Gt{S@E zU!s3=(`j!DsdFl?w(9!a##V_~q?PhAqTiA%Ks|BFX#5z5K~+;cwb_*l%_Ff}EoD3k)f=c(E2uw&U-jb_P~F(K+R8gfH1#QeNYrB$LiOf`i0dnRTsAK3(CyX&zt^ zgU=-j#H0l_8;HL+-&3u1{413GpF-s@`M_KW_x+fAaG(#@8|kY&Rjk#rp`gzYNxj7}*OXyCL(<`8KyW{A>3A0MwfLxAtJG zYFvVgDyfz^M35O)ZL#m^!2bZWfQX~P09-v0m?{4e)| zXstz4`!?0ZQ?H|nyKJl~Oi3J4ay=hRev|lCZ3RsOu^gKB7B&;ToI+>F9aug8euI{W-Y89nNk5x6qtpZDRcJ zsAN3Yo<}$aMY(osxZ~@Cxa~JThw$MhK(@HJ9Gq>$)*(6NZ@}nr2@*&Mx%T+O8II64 z53VaC$+1wxbr=I8fcG5VkZu0}oMP?Q7E`p2qSwW0NkYVaE`7+wu%JW-c>r_od;nDt zwWK86@os|$)w0Xqw`@s9@O`^qz6x%NFl;vt2YdsC%VBHjZU^B|(ZXjCSNcO|KM$wCI7`w^6(!+OOVTuC+wkmgDzZl*rX-gIc z>H?0U*o$K7KqMXj>47|r9_|H?UM+!tQnur?j-$3K0;QQvjji~B?lAsfm4gs}JOsA; zF@3kW_Ban7$xA3ZPXK?uECpDSe-7LAz6*vWje++gzs4t)6Vq-_0G^nSzsfc%e$DNT zi5q!HK^Fs|2Im$dh>F>6ZO!nEyVMc3{9Iv~R@{OQVh{AdLQk3OI@;@Q(;>Zn$J#B0V zz*HjS+t~4jXvWcTaDB0KBTUhbFJaCeA-~icZ@9h|Ab*_hL(>iAs8XN~dE{epjF%5o zmf#z8#=0}*gXSpMIv(R07p;f@@y~IM6tXFb%yl+l?#EjHxhU~h{u=d;*eE9 z?+}rE*!L~EfY|XovQ{_Trrklkg|X!MLdhib<`fdUNVY;cn~ZANG3wt7D>Ie$>-SRs z00YnTtt1&mRQYyfpgf~_+b64^PeXo~_ZG7u%BnR5Thit-M_0J{@ZRd&p2r@Ve(9}8 zlV{!-(o$wQM7dpT9-p;rWeiIVy!E#?$GNj+`7>()XqsQZczUKrZLjh z<&`$fAj> zW(Z#J&09OD7vhJ>)#k*&hq+Pqt5;tE7LPs;tGE6=HKm& zRl0(KVWwGfxo4z%d2Y8pQTaH<>@>pJH2JlbW{$XXvgXncYzjJkEmd7K@8+dS4YEde zZEtgIInU_g%pw!y+@*{&1vfvQHAS97SyX@eXiA&##Yhf4zHxz7H~3F!1Xs-N)9D#H}eI+P&6Etq{d#)r%_+}W~u)RM(gt7LGb2}idWch&NkqA_G5Y9`^Y z9^)DM5ymykpViY>Q^xsZ298npGOT0Ldjsu^+A&d7X}PmWriU+@DwxLBjH>|u03>(8 zrOq_;^mQ`RP&~pieCl$9lldHN{{RzaZ<&~6$zo|2{HaBNkbQ6|wMJ-bW=7M?1z-b~ z=^(}jK94`sby+bhl|PV44H1Z+D;i|a@+c`HQ9(4+hTC6Zx_e_xnx{3Mf>x)=5h@U$ zG9saOeJnY}aq3*^Y`G?nAc;X2mMdA8->ASs^A-~Fy5q0(l2?hn! zl+*pDSn>^(YjG?)3G)Zj{xHHIhICgX0tN{YM#ftaTKF%hP6~FGlqrEBvpK#~A3=YUrA_ zmKpTxG%g2|FaX&6n_}9ktyWQLV5Wg&QTMd&M>8OC;leUOQ#wdlf-g`xRcwQY0Gsja>YZNONlB}Kc;%Xr}*9-{G;% z2AC33?gB_i8_@kNi{gt~ye_p8)5SVmBXPD-+UE@PTDhr~QCCR~LVh@|3dk`!UiuZ* zYOP5FD;$q?GuvTC7f=5H3)>KCEkf069Jwqly?qrI1P@`yI98?AwB=7KBCm`JHojf5miPmj?L&{gHNC8?8c3yhbyOs zc=&kT?dE&i;|Q5Hriw{mn>dN-pZvMPfXn&fQE1%uYG+!FOByg@V3`OY{1J(DWv1g z`|^EA$^awa)24M|Pr&wN@xSk>uGJP>jejg3({{ZED)f7$1QWQLA>JBo?ljxZ%;oDUz)kAB7 z#QDFLD3+f>L7Y8IEm9>#w3OFvr{>qfT()aX>EZ1xK4MmCX-qO-$&^?!d|Vt=9)qQ9 zxWiMcWom`LlTecFu1#gd zkJsZGwyRxEkjc`XC6iN24Rl|LyvvDyE8?m2R-Jmt=Z{cS?@~PIWRq}^cel1Fmb*eE zO9a_ml@T6cs4C?BFNUelG+I^DEZI!-l?%*L2wVrZZ=7DKxRL3tA5T>zvFFu-obxR= zo>-~xW7vLJ%?_8*G}6rHGpeeho0~MpbVuurQtBNWQJJixDVSF%;xP#xchF#ET8~W0 znN-V5r{s=sEj$kq2HyhM+@FeFGr^E(M5C5DtEQa^ymPFqT0e`7HBL>U8k#t!sggNZ z{nbGv?)C>2(rR3ejw+cbbnQgck{isQXXZ2Cwk~~lmM)tj9W^xcSNv%osx$fXi)Cep zF^@#YnnaTdfjlG)$gWahi_U4``{v?GdMQ$^7SdBRZdO}&wl$4=1XT3mZ80>fz=nS= z#6?${F>WdY_PjT6u-AN!&cOC=<{71wertPL|PIpEjf+JUvpwGkmoub zBao#7)zJ}YE{w(#f9Z~zYYf@*hS{bb3gjN3)>V_}dSSBdS)A3qThr;Z6DYj&(pYcz zx4s?+6}1MBr=T$mno62bPRTr?On;wW>xZq+^#1_a>5`)&Cu#ecypj*cHpfLZW}&Rf zr;>wALLmgK(QjSA{Vk03Ip(N?C5l(mk;_RVTy2zIFZRaqv&hR)tTM>62vM}W!lZyA zK3#-^w{CwtUrnoNW6oYkG|cd32%~&!7y?E5V^iw=Q!Ma9Hd#yM8+lS0RP8;kajCN% zTTz<%64B5_KGEb&xNULlO|Oe@yMc!lGF#I%c!dm@PUAiQSXfKORVbPl%Sx3p-J5vFxo~e)$A&$*BPVb z&|6G2w9U#oix|GRYVBL8gp|uRPZ>!F5zZU{zZldgb%W)x$sF`5r~Jr+0#n}Iu$B2n zsfAR6+zOR7t-ZIj!B ziq446X3GP%tMY2lo5od4Z}EdGW|vmSO9ITfeDsnKtl|A}AD%2RW?@OIe%%ZWU6*~9 zLHBbPXE7N%!z!rThJz&3wN$c+Gnk^Q0PHIm+Q;VhNyrtUz0Q})<^wnBYLptZX z!r04CwRrcoF=iTLOih)jsm^5*Mh}-#Ca`~l?~K(sPLrsH7EH!eu8D=1x!W-MVvW_B zKvPVTL!M719K;zDaNQB_ggl8auImOvj5QHyHO|tinrRZGEvKd|%(4%0 zg@$bsxyPFf(iH;pQpvrD`M_$T(e!AwaaU?egh@~RJc{5lk7MtQ>yc#e(2-H7DpsN^ zi00k2N$^H1q^;33(bOy{EnOVuf+@Cqojg)VB&l~d0XfU`u!m_~iYxx&#@Xv!m3 z61_!TE3K?U-Y$8@_%&u&x{A?c6$zLsfYF$^lzWaaGTmQKPhVJRbk##m{{Y{Chf(@q zIdNC%N?eiSnmVaz8Hh=Mf4k?7acyR0r&BGaTDoaSS0bLH%VJHj)XO!TLnxi#(z3l3 z+s=sCvK#ZoxWt!N)viRcQ)C}#qLH?gE(we3Eye={ZgY?f!jsL*C0fp~%8|0G`vb-_ zrlQIJ0FM@nC@Yzj0hGsYGw40>sT^b*?~#oequKIf36-(_d2T2mIle8 zga8aR0o3mJCjrmN^*toj^>R~W62~f!y@aRY=bH;#0-IFHOOsC|868ZNdykn8&{;`5 z<7_i(e9FFf&DD2CTdYRDKlo#BI+wt+IVY*_*>zokb-hsPg3z1tZ%308AL7wYsvp zhIdLzN@}?8_gn!dKi3%zcC4$((rRd+Nw*O-ISXJ0G%lCTqNS*YuRmWm{{XR58iEhC z#xu*LYNp9l)M{oGsKtXQ0bAhUG-fbrMuL(^svuf+HkCG9q4(>H21%V(A3}WVRLUVd<+-TxlKl+ifFUSmv-8+(-{c0hqr7&u9rt= zl4i3(S)MGgIs2zo17-SQV9^=e6qPa6>R_xmie#|j_{W!NEj9dRr_0XesHKnx|pg%H{M)YQS5O} zXQdKoC|v3ZX{Ce@L$E6-?~JnL+8_KSBo#HA;f?o2Qod)V=eh5N)HOOHqLV6)vZg~k zLe$ctF;`KIV$^J@(pgkGju}RvWR$4$DZ?8uJ;l0WjJrx{N?i7;So4|c5!Y;}(z){e z@YPwaks6+m7-~M;6?RGGFj)s~*tajww7q_*tu*;vTorMP%NdN?Yj+E5OWb42^!A0I z%4(KO)=IiEN#3E)lg~@`#g!?bqS3|*n%A0?NK8|R-_mdIY#l$WwEI%mOP6GGs>H|b z5IkjzbN>Ksv1)622=sKHWzy5sQ#^zi+zX-Zd)pIKQJu}ABB!8f(eqDE;Dlu(bbp<=$3nYa=G2+yUj(`_ zZ6@Ed)H|shj)aUgS8hcvsngPH3W;d)YQ?LK51Nk|9%wyyw>QINI^!sOuQD{+YN|+M z{{S|aFXHF0wmP)Bw^Y{a8R_QI^t4l=U1nzm91fN}@n%7vYYfO{0z8I>j-oI`d%8)_ z^~AL9=hOI;OHZS`%6%JIJqtSqr!J(g*V`87TI(>U%5vE$^k3Sjs)p#*b9o zl(f|vR-4FRhB}3D(%$~#6Digj!lPGDPyQdJq}>@XPayQkZh)I(MMQe=XVk$fshWwI zeAvWFN^#F#mc=<{p4K!PlBp-o;g*(Eyix!Ulz&_&xTXI966^KKs=UmnEv2khvRW`! zPm%A7Q22u;mP)F4=_9NR!bqABRF8~e%(UL3&tj63H`H-72oB1q?3~}OGee-HsnLwG z>w37VB9)X#vlZX$4Y1cnqpO|eTK(dol9w>2h)W&nAo9nhzg!7)&bo(D!e3Iy_6bUd zQxe`jIk!*gj#gu#D63=3yxnUuRYIUh#(ONb>b) z)&lhabSDw2>A|D*beWA*Ifko_N;io4Hf2^r*zj-tF@rAfzcEceR~2r#SDN>VaZ_cB zo|e8bWV&-hQfgY-fv9JwhN7MP=w4@L0QES>lTdh9Ns?wBMNLLwM7A?ZS=h(VL4HOj zUeR%mm2Zah5@|@2GS{VQk(`Q%>W;_1`wUa5bPk)6e3%_)H5~D(5E^GGPyqa2Q}xCg z%HIoP(6Pc&x}zxbo63|U86#`+>c*V!Kk&^dvVm8YR@J;pq6t-8Sx4cyy|C)sXrj`Z z0)t*HanGifxth;RH(Enueh0@rF`p#MJSwAXFv^CfI@rTNMMavGSt&WF5S3_SMEYbpszG{Lm$8-AOckwmR&B}96 z3UZwTn85`-c4w44q2~LimEkAn`EB`Ovn@g4##f^9=Bdc*YN#aMDP&r5%^yEEwmP{7 ziZvhMe9o&X(2og8zVezy1I`!q5HV#(h8an&S}NE(r>#txPwSlbzs{M&w1 z=Q`&{Wtq-MvgwNYnuD|KvWU1+K-+e=Z=7tS@jEMv#JQ3!6;PSMPAV8}4lVC){{T#H zuGQM&Dx9E0rRYr@;S91C=9=S?YjcB5s60VkX)ID?*;?gJ)=Gd5^)@!Y$4q9i zGbHh5qQ0WJsQfmSD&k$zF62QikIk=&X?#G{RoYUvs*l6UT6rULYFS#&{{SP8?QC@N zdao4gYjX(eUm~G+p}i|CAcpmEb9>;^WgaNh>58E?dzHhR8Bdf}A+?s=btc%K=XUy* zuUmMP7DJa*QR!^D(#CxF8HV_|_Qu-m>%{S&(4={0RUTI}pq5n|+AEGp=s3nK(?DzN z%O%U?{{S7+W!a=C-)RL9#>V{z{{T2S$A-Fwqf^jUpAea%jpO@OFPM?6ql?Y?H*N{Q|2BZR98~XwYZH4S zgJFe}{EfP`9vy4?jUVMy>zZ0j)fz+RTkgoeOZ_nVhr_(vGor{({-OPfs+u%4L1tBs zu#UDpf37@UZx6gTrqJe=vshKsz>~-ppjA0HJ&7G~`j;&5mMT1gpEJ#Bs$`}?_DYp^ z+QYTTJmPi#03y!sBA>$iv}=F0OX4L-P5%ISM)hFc>V1z-%N*Jt4D^i#VOVAH3Z|q@ zPDGHkWrTNbqnmMzwKcvEr-)HH&`&OI=V%EGin4lt?KTIGY&MzH9u~fHn8TK7TInj* zoV`STL-L^e95Z7nQw?y07FR$(I!_BZ~ZV`Wc^)KTaP zdfIOcYHDce9#vQcI$i<~;v(LhOX}aB$pu@@yiCmK>2!Ti&8g|w%_`C|tfJj4Km?zGj)rgIesczYkO+J|6VlZ*R;jXv zqy!H3?e)g^b@sQLUe(hsh@)yq_=P}J75ua3Sx8leB@ZY~*R=Rq= zahpBycT~jL5zBlwTBs|bP46U%1rQ_fo)1iHI@83~)zQ zo!B|z77iI@4_x^J_M>*?%A7RNhr zlgH}LUA{{49P7n=$2G2ow=2o1LQ?@tFgun<-M~EGrYWVQ@t-i#wO(uKoWC?#{^!(u zvYn3?{{T!jQQ@w625VZ?{wGOQO)LaO3JB4un*RWZo811GPPm*w>}?3`#Tw~jPYwR$!P-W{GTqYRbxDh5Or>P3^t+gyH{0enkujT zM~;q;DPd}gW<(xskY2|3Hh$V>-Tr*{35BR)-`oio+j4MM^Q}3l%{mu z1^bS9{K3Z(gTZYvm*jQuW?m;(*22@F6aBabr{vgN8xPQ9Hd#gBbq=`9o(hSl%^DYK zsEbP{pbz_d{y^fbE2z8{q|@1o<=TF}qJ>^Js*F-dZg(4Sc|6}1T)sa@YBuJ+ANXFn zE*d(`Z(AiKZ7VH7%^!1{i>V;mU%YLR9F@r59^ES zd_?fthd{LSejnz!j##qFqA#%j0G4>UvE&b&bTeNWvP`7pDNo^cX*D%SjMC01&|iq+(0tv-JHmQvL6IB!WLTGqp9j}W{rOtUjNE{?2~ zB1pc~PxboGa7mpq^Q&Mk0e&91veD=Q`7t7m#R*eU;fp(I{fMX0QE;)ooJL$ z_;8CrTo$hTLRm)3@GXCgE=jIDRLraEqkR{Z<=#~?{fm;{iDP-i}$dt0tB<=z=TwddMarKF2ZWm&J<50@Ej%jMgSdF1|BuQt;@E>>k3Ysac`IvT&Tu&hrg6(@I9 zzc;teF~{K6VNap+3S7^{iuq(S+*O8-5e@$Ul=c4O98CAZZ4~)FT@G>Lb!$ye8~y56 zs)_j>ZciB0*8G3^yH5WAH<)G~8tclfNfZA7>I4+|e&rHCu&G1I5{@=TD_*18-GT3Df9Y z#w@ofuCB?_q&-AwMJ$`1{{SG5?Tc$XMeydAOwmtC;q7i=LsYUDcTnHUA+66GV#$}s z@^7a8YxB)B;JpU8%ciT$st#_lqr(`ek(G|oV#B8*#}B15zXquF=5;1rluUC8D41pe z>15e51{`fYZ}2hQ&%9Kl$hA&U5b)zMnd+p3M_RP%RuEJGH+zfYrIPrKo#xv1x(K{H zsiRsdDGF81<)_+PizgoT`NX^PzpQ3npD*3vnNGj(o`Xi$468#|RM4$L`H-$!@8%ME zi}d{Mj)cB2Y5cEG<&))p8D`Z~f{F@3*V1z46w_{7UglG0H0Bq|h0C1xzxi zj-G0TUCVyA9Di(EQ=a(GnB^#GavXy#nn316GJ<30i*`82p1=7zV|x7k!JhcTp5?lS zEvKaL>E<<08yT6Ee5!u;kpk32sGd(fE&l+Q&oCw&#-O;(_!nYFzIJt8{&qMa#sGabB+O^54>^4|TPFTE@9$3Pfb-y(ZdGRMyBWSTfMR3`j}0~suWsg zuQQ;MRr3%~Nh1?}I`Vn?V`gjOPlwdHYK7^1HOy=1zVyKw<<0j;a0HM=`NpxC@233w zoo=o9lQp66jvZl_Nj_zmRAwzA#|=74 zNMhoqNh6Q#O@4X~dHUg(tIqzh%2}zWh~!$s!>VluQzlR0rg2l3$1^iR`C;|B>P7B) z{A0a8ifq(bVaxm|%qrnAA0b`@PqLf$xZr+x=umiv;+0-WS1fuXEX(JPP_acdLmj~J zxNTc;hMHd&^PGy6>Bd2qPcUIPbU${tu-o(X#x3{%0Oai_QOrC|)+1WOM@iwxcqBI! zPbw;>qowWF^TTAix5XOT%ETH&B%v|FhACv8!e+lhKywD+G+IGVJ{g$^5YSrk3$nF{aB@>TH^YfOy)9KvCuQ7Pr&seA(qXOLeZSC!c z(|#ssIP_j+21%fEW}~Jk(!gj6nuBxMxhEb`2Z%bxw^-Ct&}b+rp-5Pont~B!_8fP` zd2WB=#co?v!%b=Ix@gLIF&Q^+!Rx<}Ty}kao#|!@eOEmQ!jIO25JWZ{rcB(S9XWM`<+z(Cf zVbkLcPamUmyUMd|7q4s6E&EozqoIu>{{XBoK#0!Q2te8_mJed+{C2FDD)H<8rzBEeS5Yy{aV@q3G znagsqig}$^(fEkBTqjBWnd_z0o*wBuy(^-x*Om3?1YkGX7z%$?#hh_|*!(;8@uu*} zKV~ZW2CJ#eU}Ts@IC&hTn|ki)ewh8UA=F+R&}I3O<=Q(suZ*l;YEwYq6S(cR>tCO2 zeogyuc#x8Q$$6vYIs&Lrd2>c7Olppt5FW>ndH$IFAMm%U{wcxM{{XAsBlDldANx)G zWBK6MaluF8MsZ1(&*xE5)X5nn5_W=ZbMA5C^9f;;hgBqwIqi=*@mo^=0EjhZVL3Zx z9%V$572Fn9CAr)OTzEBMXxXk2xjp{?zAv}G_gqiLzisTxzF!Z*Fv#0efwyaR7sh#6 zVhymD?pTaG&O%t8oLjFLrgQ=`$zJE*ADpjFD`^JMpaXNxDrpY>2LjxVm|%lqlXBlZ zuqAsC6Ow-r?lI2xZA_u#c5ABbBn~>UT!Kcy@qTg9^O*^i?mz$zMfze7T%z|L*a|Hm zy{<46o#NKBa0UUS^||2f=m%UBRS9O`k8W*(30rL>U-5k~u??kwsmHh6+Cj z?$~79UhG$&(*iScNU*T67Q;mg7{#r)`}1rCkT@-70Fl(<@C1aiScEO4zqSHSOyvNwj&E+bqDBOLy(~E$#vjn~UA-U<*axX2X(ttutN>*; zU&{dTvVuyDy}r1y2`Gdc4&w@?0&&Sc=cXr?WKylb`rseTF(@MCk01Qunl+GIFgN7e z-wSUswsT|B!;BYFTmYVt{c*WNIT1x|*96;+qXTh}4TO+Qxx{7rvGecS1!Frt54rxh zyB2_B^xSeUZ+tXw=8s*jJ6^ippfD%Hf`r3&AJ=v_y{Qu00X`&iO`fm1$~O^32=qG*hW& z%iqLKPYN!>oqP`T%;ji z@}(Rp_892pnwK?mAUSMQ^(Z|o!s`D3PyR8RE2Pe;YYO@C%|{^Mk~c`-x(trJWRgg8 zbefW1#FrO{_ZYx>N%bU7@ijbaBJz$%+I_jU3+5W4Ur*Rzj-?Ocatg`x#T3~cR6#BpSq1$*Sr4B7g#t^BE0!>3E)Xj@lVs-~n#DIlkb)ZSQ$7H_6B)IO(p z;F=_bqa*KPHU&OLIJDVp`Q+9iRhTse}@tZ=9UcMg~g|V&B6H?sWh@6 znnctNw9WX`kPLUk)T4RJbu{!PO>HDqk+-G8dLD0xw!#1AC;i!54 z0E|^U7PH0(;}ylG^x9BVfAvb1qmz=QtYbe16R&~TmrZ8rLl_zTBvop*R%67!k;I=% z=0dKW(@-RJ-~lW}?i_o8+Z<}Vn@iK=(7{=oRP1hHop|Tl7fnT^YaSYUjMA+tVz-ws zAh7NA#%;cTLDiE+R<2+qi&CU;+y0^w1;Fo@nafUsQVyq#sN)T8B$aCa9;% z=LLnOhs!6Qfrne~{Drj|Qz5CK9)5LJWL{#FHHwe*#%ipiN>oV%Q)ZGaU_4G3sgvOL z#;QGQrsB&6+_G6|7#}fAWchy=##-F>OD!TV@F%FEW9X1Z$I3rF#vOh?kTPT%MtsR0 zI^z{W3or~wly~Cz%+y*EI{9X&sFaX4%Lka&Z*m4UPpUFnYPx7-(`_670QM(HPS^O| zi=@;vGUf{-X*qt~7#kc#V&naA>+xMVd34?%(o#<#dFP~)(<}@bnj`KoplB7!RHIZ> zQ<7}tw&?lke03>xeKD-4k_{w9X5YMtqPFpV!q&pYu4p66YA2)8?;@Ltpz?>H_u|+~ zej}S(KZo(b1X5GXgde+|Ltg&?{uVE;s?gKsF!}V7B}#x2LXJG|U{8E#ZF*`lDBU!Z zPeA6*s<-n00H+vg?QJ@JmO7m*@=+2#&nW7IbO($&)MbxR={U1F794_Qt+%Nf7WI#( zae+grG;wN!Nsvk=VQJ}vFJ}3-Y;`8rxvY7pSv0GyQ&>eYakP(X+XXe&e^FdvI#g3u zD7cic+T-ir6JO@XDh%^VLzPI>+IDuQdxt{-C4Kths-0JmQc%MaY40|T>`}yK>+ycP zW3xr9wMAq#4F;NxXM~X?Zpu8t?k|dyQEF<;yvn+DRxs9RS->Fsi;QY}uj(;o+K((r z=*32voPa^5s8qJ^U`?>^t?A>;$&*RQmEZlcBd~Ffk=7cu>Cpy50f2BrNz8vZGv->- zo~%aH6tcr01}T-t-FzG2JN5ll%A(i1Ga1^KNIVtE{$wUAd7%4ohoje(Pft9#evof1 z58uMb6yLuVvBuczHQhx{$sx+)a6J+<-;49>glTovbdp9*4JA}yk!f!nY$Z;<&E=zkX3}!WM?Ji`6@l6H;^P-Z{x~#`GJT0APfV2V zz?UB2^usMKwvkn->nIT)hlPM9KYU)FGF+jNCJNlpq83aH!xpZIA8GAwrb%Vx&12AvfU+E#^8O8 z#jxMIOxTne=C5%pQ)&8mXG3?5g*xE3A$F>OAP)wSs~ z6NbQJYRtVID5k8$&f9#5+VP98kgm`!pjA#?|h;A1R$8j)!vrmEEPdCEzr zsfobjwf_L)6xZn7wyGtK^+ilI$}F-IWRvTQ{&r1OxrT(#!bd$OeNQDTk>^5CZ;$A4 zWcnvMf=H5WMH|sgVY~nyBkz1!NIn>!k zilVNPSt}%(83*}3aorjB#+qtv5l2Z;9QDmvNip0vJCg_Ji@OA=(QIgo{{V{TTF`71 z*d(8pE~?TLbEP}e>KO#_f%b?)0wnja$2xd)M9?e^JkJmZ$(Sn;x9xjkW|jIP1*KJn zSS#tk5J)3o_Jiz2xyGd$hKyl`=vfr~*=CerUiHd(Xt;b+}@cCY&$SGs3YJERE)GWtzZxa@b z_x!PE_~%WWo#Jge%|f957z-5q@M5d3%Jd;v6{@F>c!(lIk;=>Q^NX`Hp@noaLT3A9 zcHIav5ijI8{ctNa=2uCUQlshljW8q1kkgTGZgH-wTg4@02`-


    kokc|==MUv7Ki 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 B>iYly From 533d6693951d235e33bc82e38d112241b7404cc7 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Thu, 15 Dec 2022 18:57:48 -0500 Subject: [PATCH 302/342] boot.js - fix midnight in local timezone --- apps/sched/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/boot.js b/apps/sched/boot.js index c1bb1fc66..d736dd0e7 100644 --- a/apps/sched/boot.js +++ b/apps/sched/boot.js @@ -26,7 +26,7 @@ If active[0].js is defined, just run that code as-is and not alarm.js */ Bangle.SCHED = setTimeout(active[0].js||'load("sched.js")',t); } else { // check for new alarms at midnight (so day of week works) - Bangle.SCHED = setTimeout('eval(require("Storage").read("sched.boot.js"))', 86400000 - (Date.now()%86400000)); + Bangle.SCHED = setTimeout('eval(require("Storage").read("sched.boot.js"))', 86400000 - currentTime); } })(); /* DEBUGGING From 68fa1253a55bff3fa29a1954099eb39cfd2bdf60 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Thu, 15 Dec 2022 19:58:20 -0500 Subject: [PATCH 303/342] ChangeLog 0.17 midnight in local timezone --- apps/sched/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 6d9d5caee..c99fe9858 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -17,3 +17,4 @@ 0.14: Added clkinfo for alarms and timers 0.15: Automatic translation of some string in clkinfo 0.16: Improve support for date timezone +0.17: Fix midnight in local timezone (alarms wouldn't always fire as expected in timezone != 0) From 1a7f37ee8e5696e2f31447b1bb8fa855fb730413 Mon Sep 17 00:00:00 2001 From: lauzonhomeschool <85599144+lauzonhomeschool@users.noreply.github.com> Date: Thu, 15 Dec 2022 19:58:36 -0500 Subject: [PATCH 304/342] Update metadata.json --- apps/sched/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 9c1a1d6b0..05e829d83 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.16", + "version": "0.17", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", From a0746c0eebb1264fe4a381b32a39fea61e784660 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 08:29:34 +0000 Subject: [PATCH 305/342] update changelog --- apps/widclkbttm/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widclkbttm/ChangeLog b/apps/widclkbttm/ChangeLog index a7141a7dd..373337378 100644 --- a/apps/widclkbttm/ChangeLog +++ b/apps/widclkbttm/ChangeLog @@ -2,5 +2,5 @@ 0.02: Modification for bottom widget area and text color 0.03: based in widclk v0.05 compatible at same time, bottom area and color 0.04: refactored to use less memory, and allow turning on/off when quick-switching apps -0.05: Different font size for bangle.js2 and bangle.js1 +0.05: Remove cyan color, use theme foreground instead From b89a368bd996b3cbfdbf728c9af8d9fa51329472 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 10:04:27 +0000 Subject: [PATCH 306/342] Removed duplication in node.js apps with 2 new libraries, added an 'app test' program - not finished yet --- bin/apploader.js | 42 +++---------- bin/firmwaremaker.js | 59 +++--------------- bin/firmwaremaker_c.js | 63 ++++--------------- bin/lib/apploader.js | 82 ++++++++++++++++++++++++ bin/lib/emulator.js | 115 ++++++++++++++++++++++++++++++++++ bin/runapptests.js | 138 +++++++++++++++++++++++++++++++++++++++++ bin/thumbnailer.js | 121 +++++++++--------------------------- 7 files changed, 391 insertions(+), 229 deletions(-) create mode 100644 bin/lib/apploader.js create mode 100644 bin/lib/emulator.js create mode 100755 bin/runapptests.js diff --git a/bin/apploader.js b/bin/apploader.js index 26c4c1f09..d4a5f828e 100755 --- a/bin/apploader.js +++ b/bin/apploader.js @@ -14,7 +14,6 @@ for Noble. var SETTINGS = { pretokenise : true }; -var APPSDIR = __dirname+"/../apps/"; var noble; ["@abandonware/noble", "noble"].forEach(module => { if (!noble) try { @@ -37,36 +36,18 @@ function ERROR(msg) { process.exit(1); } -//eval(require("fs").readFileSync(__dirname+"../core/js/utils.js")); -var AppInfo = require("../core/js/appinfo.js"); -global.Const = { - /* Are we only putting a single app on a device? If so - apps should all be saved as .bootcde and we write info - about the current app into app.info */ - SINGLE_APP_ONLY : false, -}; var deviceId = "BANGLEJS2"; -var apps = []; -var dirs = require("fs").readdirSync(APPSDIR, {withFileTypes: true}); -dirs.forEach(dir => { - var appsFile; - if (dir.name.startsWith("_example") || !dir.isDirectory()) - return; - try { - appsFile = require("fs").readFileSync(APPSDIR+dir.name+"/metadata.json").toString(); - } catch (e) { - ERROR(dir.name+"/metadata.json does not exist"); - return; - } - apps.push(JSON.parse(appsFile)); -}); +var apploader = require("./lib/apploader.js"); var args = process.argv; var bangleParam = args.findIndex(arg => /-b\d/.test(arg)); if (bangleParam!==-1) { deviceId = "BANGLEJS"+args.splice(bangleParam, 1)[0][2]; } +apploader.init({ + DEVICEID : deviceId +}); if (args.length==3 && args[2]=="list") cmdListApps(); else if (args.length==3 && args[2]=="devices") cmdListDevices(); else if (args.length==4 && args[2]=="install") cmdInstallApp(args[3]); @@ -90,7 +71,7 @@ process.exit(0); } function cmdListApps() { - console.log(apps.map(a=>a.id).join("\n")); + console.log(apploader.apps.map(a=>a.id).join("\n")); } function cmdListDevices() { var foundDevices = []; @@ -113,19 +94,10 @@ function cmdListDevices() { } function cmdInstallApp(appId, deviceAddress) { - var app = apps.find(a=>a.id==appId); + var app = apploader.apps.find(a=>a.id==appId); if (!app) ERROR(`App ${JSON.stringify(appId)} not found`); if (app.custom) ERROR(`App ${JSON.stringify(appId)} requires HTML customisation`); - return AppInfo.getFiles(app, { - fileGetter:function(url) { - console.log(__dirname+"/"+url); - return Promise.resolve(require("fs").readFileSync(__dirname+"/../"+url).toString("binary")); - }, - settings : SETTINGS, - device : { id : deviceId } - }).then(files => { - //console.log(files); - var command = files.map(f=>f.cmd).join("\n")+"\n"; + return apploader.getAppFilesString(app).then(command => { bangleSend(command, deviceAddress).then(() => process.exit(0)); }); } diff --git a/bin/firmwaremaker.js b/bin/firmwaremaker.js index 1dc5ec073..4535c4a5e 100755 --- a/bin/firmwaremaker.js +++ b/bin/firmwaremaker.js @@ -1,17 +1,12 @@ -#!/usr/bin/env nodejs +#!/usr/bin/env node /* Mashes together a bunch of different apps to make a single firmware JS file which can be uploaded. */ -var SETTINGS = { - pretokenise : true -}; - var path = require('path'); var ROOTDIR = path.join(__dirname, '..'); -var APPDIR = ROOTDIR+'/apps'; var OUTFILE = ROOTDIR+'/firmware.js'; -var DEVICE = "BANGLEJS"; +var DEVICEID = "BANGLEJS"; var APPS = [ // IDs of apps to install "boot","launch","mclock","setting", "about","alarm","widbat","widbt","welcome" @@ -19,53 +14,17 @@ var APPS = [ // IDs of apps to install var MINIFY = true; var fs = require("fs"); -global.Const = { - /* Are we only putting a single app on a device? If so - apps should all be saved as .bootcde and we write info - about the current app into app.info */ - SINGLE_APP_ONLY : false, -}; +var apploader = require("./lib/apploader.js"); +apploader.init({ + DEVICEID : DEVICEID +}); -var AppInfo = require(ROOTDIR+"/core/js/appinfo.js"); var appfiles = []; -function fileGetter(url) { - console.log("Loading "+url) - if (MINIFY) { - /*if (url.endsWith(".js")) { - var f = url.slice(0,-3); - console.log("MINIFYING "+f); - const execSync = require('child_process').execSync; - // --config PRETOKENISE=true - // --minify - code = execSync(`espruino --config SET_TIME_ON_WRITE=false --minify --board BANGLEJS ${f}.js -o ${f}.min.js`); - console.log(code.toString()); - url = f+".min.js"; - }*/ - if (url.endsWith(".json")) { - var f = url.slice(0,-5); - console.log("MINIFYING JSON "+f); - var j = eval("("+fs.readFileSync(url).toString("binary")+")"); - var code = JSON.stringify(j); - //console.log(code); - url = f+".min.json"; - fs.writeFileSync(url, code); - } - } - return Promise.resolve(fs.readFileSync(url).toString("binary")); -} - Promise.all(APPS.map(appid => { - try { - var app = JSON.parse(fs.readFileSync(APPDIR + "/" + appid + "/metadata.json").toString()); - } catch (e) { - throw new Error(`App ${appid} not found`); - } - return AppInfo.getFiles(app, { - fileGetter : fileGetter, - settings : SETTINGS, - device : { id : DEVICE } - }).then(files => { + var app = apploader.apps.find(a => a.id==appid); + if (!app) throw new Error(`App ${appid} not found`); + return apploader.getAppFiles(app).then(files => { appfiles = appfiles.concat(files); }); })).then(() => { diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index 08fc6fe83..54b63d5d9 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -7,25 +7,20 @@ to populate Storage initially. Bangle.js 1 doesn't really have anough flash space for this, but we have enough on v2. */ -var SETTINGS = { - pretokenise : true -}; - -var DEVICE = process.argv[2]; +var DEVICEID = process.argv[2]; var path = require('path'); +var fs = require("fs"); var ROOTDIR = path.join(__dirname, '..'); -var APPDIR = ROOTDIR+'/apps'; -var MINIFY = true; var OUTFILE, APPS; -if (DEVICE=="BANGLEJS") { +if (DEVICEID=="BANGLEJS") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs1_storage_default.c'); var APPS = [ // IDs of apps to install "boot","launch","mclock","setting", "about","alarm","sched","widbat","widbt","welcome" ]; -} else if (DEVICE=="BANGLEJS2") { +} else if (DEVICEID=="BANGLEJS2") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); var APPS = [ // IDs of apps to install "boot","launch","antonclk","setting", @@ -37,16 +32,12 @@ if (DEVICE=="BANGLEJS") { console.log(" bin/firmwaremaker_c.js BANGLEJS2"); process.exit(1); } -console.log("Device = ",DEVICE); +console.log("Device = ",DEVICEID); - -var fs = require("fs"); -global.Const = { - /* Are we only putting a single app on a device? If so - apps should all be saved as .bootcde and we write info - about the current app into app.info */ - SINGLE_APP_ONLY : false, -}; +var apploader = require("./lib/apploader.js"); +apploader.init({ + DEVICEID : DEVICEID +}); function atob(input) { @@ -84,31 +75,8 @@ function atob(input) { return new Uint8Array(output); } -var AppInfo = require(ROOTDIR+"/core/js/appinfo.js"); var appfiles = []; -function fileGetter(url) { - console.log("Loading "+url) - if (MINIFY) { - if (url.endsWith(".json")) { - var f = url.slice(0,-5); - console.log("MINIFYING JSON "+f); - var j = eval("("+fs.readFileSync(url).toString("binary")+")"); - var code = JSON.stringify(j); - //console.log(code); - url = f+".min.json"; - fs.writeFileSync(url, code); - } - } - var blob = fs.readFileSync(url); - var data; - if (url.endsWith(".js") || url.endsWith(".json")) - data = blob.toString(); // allow JS/etc to be written in UTF-8 - else - data = blob.toString("binary") - return Promise.resolve(data); -} - // If file should be evaluated, try and do it... function evaluateFile(file) { var hsStart = 'require("heatshrink").decompress(atob("'; @@ -132,16 +100,9 @@ function evaluateFile(file) { } Promise.all(APPS.map(appid => { - try { - var app = JSON.parse(fs.readFileSync(APPDIR + "/" + appid + "/metadata.json").toString()); - } catch (e) { - throw new Error(`App ${appid} not found`); - } - return AppInfo.getFiles(app, { - fileGetter : fileGetter, - settings : SETTINGS, - device : { id : DEVICE } - }).then(files => { + var app = apploader.apps.find(a => a.id==appid); + if (!app) throw new Error(`App ${appid} not found`); + return apploader.getAppFiles(app).then(files => { appfiles = appfiles.concat(files); }); })).then(() => { diff --git a/bin/lib/apploader.js b/bin/lib/apploader.js new file mode 100644 index 000000000..6bf74eb7e --- /dev/null +++ b/bin/lib/apploader.js @@ -0,0 +1,82 @@ +/* Node.js library with utilities to handle using the app loader from node.js */ + +var DEVICEID = "BANGLEJS2"; +var MINIFY = true; // minify JSON? +var BASE_DIR = __dirname + "/../.."; +var APPSDIR = BASE_DIR+"/apps/"; + +//eval(require("fs").readFileSync(__dirname+"../core/js/utils.js")); +var Espruino = require(__dirname + "/../../core/lib/espruinotools.js"); +//eval(require("fs").readFileSync(__dirname + "/../../core/lib/espruinotools.js").toString()); +//eval(require("fs").readFileSync(__dirname + "/../../core/js/utils.js").toString()); +var AppInfo = require(__dirname+"/../../core/js/appinfo.js"); + +var SETTINGS = { + pretokenise : true +}; +global.Const = { + /* Are we only putting a single app on a device? If so + apps should all be saved as .bootcde and we write info + about the current app into app.info */ + SINGLE_APP_ONLY : false, +}; + +var apps = []; + +// call with {DEVICEID:"BANGLEJS/BANGLEJS2"} +exports.init = function(options) { + if (options.DEVICEID) + DEVICEID = options.DEVICEID; + // Load app metadata + var dirs = require("fs").readdirSync(APPSDIR, {withFileTypes: true}); + dirs.forEach(dir => { + var appsFile; + if (dir.name.startsWith("_example") || !dir.isDirectory()) + return; + try { + appsFile = require("fs").readFileSync(APPSDIR+dir.name+"/metadata.json").toString(); + } catch (e) { + ERROR(dir.name+"/metadata.json does not exist"); + return; + } + apps.push(JSON.parse(appsFile)); + }); +}; + +exports.AppInfo = AppInfo; +exports.apps = apps; + +// used by getAppFiles +function fileGetter(url) { + url = BASE_DIR+"/"+url; + console.log("Loading "+url) + var data; + if (MINIFY && url.endsWith(".json")) { + var f = url.slice(0,-5); + console.log("MINIFYING JSON "+f); + var j = eval("("+require("fs").readFileSync(url).toString("binary")+")"); + data = JSON.stringify(j); + } else { + var blob = require("fs").readFileSync(url); + if (url.endsWith(".js") || url.endsWith(".json")) + data = blob.toString(); // allow JS/etc to be written in UTF-8 + else + data = blob.toString("binary") + } + return Promise.resolve(data); +} + +exports.getAppFiles = function(app) { + return AppInfo.getFiles(app, { + fileGetter:fileGetter, + settings : SETTINGS, + device : { id : DEVICEID } + }); +}; + +// Get all the files for this app as a string of Storage.write commands +exports.getAppFilesString = function(app) { + return exports.getAppFiles(app).then(files => { + return files.map(f=>f.cmd).join("\n")+"\n" + }) +}; diff --git a/bin/lib/emulator.js b/bin/lib/emulator.js new file mode 100644 index 000000000..f7c82ec3c --- /dev/null +++ b/bin/lib/emulator.js @@ -0,0 +1,115 @@ +/* Node.js library with utilities to handle using the emulator from node.js */ + +var EMULATOR = "banglejs2"; +var DEVICEID = "BANGLEJS2"; + +var BASE_DIR = __dirname + "/../.."; +var DIR_IDE = BASE_DIR + "/../EspruinoWebIDE"; + +/* we factory reset ONCE, get this, then we can use it to reset +state quickly for each new app */ +var factoryFlashMemory; + +// Log of messages from app +var appLog = ""; +var lastOutputLine = ""; + +function onConsoleOutput(txt) { + appLog += txt + "\n"; + lastOutputLine = txt; +} + +exports.init = function(options) { + if (options.EMULATOR) + EMULATOR = options.EMULATOR; + if (options.DEVICEID) + DEVICEID = options.DEVICEID; + + eval(require("fs").readFileSync(DIR_IDE + "/emu/emulator_"+EMULATOR+".js").toString()); + eval(require("fs").readFileSync(DIR_IDE + "/emu/emu_"+EMULATOR+".js").toString()); + eval(require("fs").readFileSync(DIR_IDE + "/emu/common.js").toString()/*.replace('console.log("EMSCRIPTEN:"', '//console.log("EMSCRIPTEN:"')*/); + + jsRXCallback = function() {}; + jsUpdateGfx = function() {}; + + factoryFlashMemory = new Uint8Array(FLASH_SIZE); + factoryFlashMemory.fill(255); + + exports.flashMemory = flashMemory; + exports.GFX_WIDTH = GFX_WIDTH; + exports.GFX_HEIGHT = GFX_HEIGHT; + exports.tx = jsTransmitString; + exports.idle = jsIdle; + exports.stopIdle = jsStopIdle; + exports.getGfxContents = jsGetGfxContents; + + return new Promise(resolve => { + setTimeout(function() { + console.log("Emulator Loaded..."); + jsInit(); + jsIdle(); + console.log("Emulator Factory reset"); + exports.tx("Bangle.factoryReset()\n"); + factoryFlashMemory.set(flashMemory); + console.log("Emulator Ready!"); + + resolve(); + },0); + }); +}; + +// Factory reset +exports.factoryReset = function() { + exports.flashMemory.set(factoryFlashMemory); + exports.tx("reset()\n"); + appLog=""; +}; + +// Transmit a string +exports.tx = function() {}; // placeholder +exports.idle = function() {}; // placeholder +exports.stopIdle = function() {}; // placeholder +exports.getGfxContents = function() {}; // placeholder + +exports.flashMemory = undefined; // placeholder +exports.GFX_WIDTH = undefined; // placeholder +exports.GFX_HEIGHT = undefined; // placeholder + +// Get last line sent to console +exports.getLastLine = function() { + return lastOutputLine; +}; + +// Gets the screenshot as RGBA Uint32Array +exports.getScreenshot = function() { + var rgba = new Uint8Array(exports.GFX_WIDTH*exports.GFX_HEIGHT*4); + exports.getGfxContents(rgba); + var rgba32 = new Uint32Array(rgba.buffer); + return rgba32; +} + +// Write the screenshot to a file options={errorIfBlank} +exports.writeScreenshot = function(imageFn, options) { + options = options||{}; + return new Promise((resolve,reject) => { + var rgba32 = exports.getScreenshot(); + + if (options.errorIfBlank) { + var firstPixel = rgba32[0]; + var blankImage = rgba32.every(col=>col==firstPixel); + if (blankImage) reject("Image is blank"); + } + + var Jimp = require("jimp"); + let image = new Jimp(exports.GFX_WIDTH, exports.GFX_HEIGHT, function (err, image) { + if (err) throw err; + let buffer = image.bitmap.data; + buffer.set(new Uint8Array(rgba32.buffer)); + image.write(imageFn, (err) => { + if (err) return reject(err); + console.log("Image written as "+imageFn); + resolve(); + }); + }); + }); +} diff --git a/bin/runapptests.js b/bin/runapptests.js new file mode 100755 index 000000000..8a415b109 --- /dev/null +++ b/bin/runapptests.js @@ -0,0 +1,138 @@ +#!/usr/bin/node +/* + +This allows us to test apps using the Bangle.js emulator + +IT IS UNFINISHED + +It searches for `test.json` in each app's directory and will +run them in sequence. + +TODO: + +* more code to test with +* run tests that we have found and loaded (currently we just use TEST) +* documentation +* actual tests +* detecting 'Uncaught Error' +* logging of success/fail +* ... + +*/ + +// A si +var TEST = { + app : "android", + tests : [ { + load : "messagesgui.app.js", + steps : [ + {t:"gb", "obj":{"t":"notify","id":1234,"src":"Twitter","title":"A Name","body":"message contents"}}, + {t:"cmd", "js":"X='hello';"}, + {t:"eval", "js":"X", eq:"hello"} + ] + }] +}; + +var EMULATOR = "banglejs2"; +var DEVICEID = "BANGLEJS2"; + +var BASE_DIR = __dirname + "/.."; +var APP_DIR = BASE_DIR + "/apps"; +var DIR_IDE = BASE_DIR + "/../EspruinoWebIDE"; + + +if (!require("fs").existsSync(DIR_IDE)) { + console.log("You need to:"); + console.log(" git clone https://github.com/espruino/EspruinoWebIDE"); + console.log("At the same level as this project"); + process.exit(1); +} + +var apploader = require(BASE_DIR+"/bin/lib/apploader.js"); +apploader.init({ + DEVICEID : DEVICEID +}); +var emu = require(BASE_DIR+"/bin/lib/emulator.js"); + +// Last set of text received +var lastTxt; + +function ERROR(s) { + console.error(s); + process.exit(1); +} + +function runTest(test) { + var app = apploader.apps.find(a=>a.id==test.app); + if (!app) ERROR(`App ${JSON.stringify(test.app)} not found`); + if (app.custom) ERROR(`App ${JSON.stringify(appId)} requires HTML customisation`); + return apploader.getAppFilesString(app).then(command => { + // What about dependencies?? + test.tests.forEach((subtest,subtestIdx) => { + console.log(`==============================`); + console.log(`"${test.app}" Test ${subtestIdx}`); + console.log(`==============================`); + emu.factoryReset(); + console.log("Sending app "+test.app); + emu.tx(command); + console.log("Sent app"); + emu.tx(test.load ? `load(${JSON.stringify(test.load)})\n` : "load()\n"); + console.log("App Loaded."); + var ok = true; + subtest.steps.forEach(step => { + if (ok) switch(step.t) { + case "cmd" : emu.tx(`${step.js}\n`); break; + case "gb" : emu.tx(`GB(${JSON.stringify(step.obj)})\n`); break; + case "tap" : emu.tx(`Bangle.emit(...)\n`); break; + case "eval" : + emu.tx(`\x10print(JSON.stringify(${step.js}))\n`); + var result = emu.getLastLine(); + var expected = JSON.stringify(step.eq); + console.log("GOT "+result); + if (result!=expected) { + console.log("EXPECTED "+expected); + ok = false; + } + break; + // tap/touch/drag/button press + // delay X milliseconds? + case "screenshot" : + console.log("Compare screenshots"); + break; + default: ERROR("Unknown step type "+step.t); + } + }); + }); + emu.stopIdle(); + }); +} + + +emu.init({ + EMULATOR : EMULATOR, + DEVICEID : DEVICEID +}).then(function() { + // Emulator is now loaded + console.log("Loading tests"); + var tests = []; + apploader.apps.forEach(app => { + var testFile = APP_DIR+"/"+app.id+"/test.json"; + if (!require("fs").existsSync(testFile)) return; + var test = JSON.parse(require("fs").readFileSync(testFile).toString()); + test.app = app.id; + tests.push(test); + }); + // Running tests + runTest(TEST); +}); +/* + if (erroredApps.length) { + erroredApps.forEach(app => { + console.log(`::error file=${app.id}::${app.id}`); + console.log("::group::Log"); + app.log.split("\n").forEach(line => console.log(`\u001b[38;2;255;0;0m${line}`)); + console.log("::endgroup::"); + }); + process.exit(1); + } +*/ diff --git a/bin/thumbnailer.js b/bin/thumbnailer.js index 0895098e9..e9eb2ff61 100755 --- a/bin/thumbnailer.js +++ b/bin/thumbnailer.js @@ -7,6 +7,9 @@ var DEVICEID = "BANGLEJS2"; var EMULATOR = "banglejs1"; var DEVICEID = "BANGLEJS"; +var emu = require("./lib/emulator.js"); +var apploader = require("./lib/apploader.js"); + var singleAppId; if (process.argv.length!=3 && process.argv.length!=2) { @@ -20,126 +23,58 @@ if (process.argv.length!=3 && process.argv.length!=2) { if (process.argv.length==3) singleAppId = process.argv[2]; -if (!require("fs").existsSync(__dirname + "/../../EspruinoWebIDE")) { - console.log("You need to:"); - console.log(" git clone https://github.com/espruino/EspruinoWebIDE"); - console.log("At the same level as this project"); - process.exit(1); -} - -eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/emulator_"+EMULATOR+".js").toString()); -eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/emu_"+EMULATOR+".js").toString()); -eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/common.js").toString()); - -var SETTINGS = { - pretokenise : true -}; -var Const = { -}; -module = undefined; -var Espruino = require(__dirname + "/../core/lib/espruinotools.js"); -//eval(require("fs").readFileSync(__dirname + "/../core/lib/espruinotools.js").toString()); -eval(require("fs").readFileSync(__dirname + "/../core/js/utils.js").toString()); -eval(require("fs").readFileSync(__dirname + "/../core/js/appinfo.js").toString()); -var apps = JSON.parse(require("fs").readFileSync(__dirname+"/../apps.json")); - -/* we factory reset ONCE, get this, then we can use it to reset -state quickly for each new app */ -var factoryFlashMemory = new Uint8Array(FLASH_SIZE); -// Log of messages from app -var appLog = ""; // List of apps that errored var erroredApps = []; -jsRXCallback = function() {}; -jsUpdateGfx = function() {}; - function ERROR(s) { console.error(s); process.exit(1); } -function onConsoleOutput(txt) { - appLog += txt + "\n"; -} - function getThumbnail(appId, imageFn) { console.log("Thumbnail for "+appId); - var app = apps.find(a=>a.id==appId); + var app = apploader.apps.find(a=>a.id==appId); if (!app) ERROR(`App ${JSON.stringify(appId)} not found`); if (app.custom) ERROR(`App ${JSON.stringify(appId)} requires HTML customisation`); - return new Promise(resolve => { - AppInfo.getFiles(app, { - fileGetter:function(url) { - console.log(__dirname+"/"+url); - return Promise.resolve(require("fs").readFileSync(__dirname+"/../"+url).toString("binary")); - }, - settings : SETTINGS, - device : { id : DEVICEID } - }).then(files => { - console.log(`AppInfo returned for ${appId}`);//, files); - flashMemory.set(factoryFlashMemory); - jsTransmitString("reset()\n"); - console.log("Uploading..."); - jsTransmitString("g.clear()\n"); - var command = files.map(f=>f.cmd).join("\n")+"\n"; - command += `load("${appId}.app.js")\n`; - appLog = ""; - jsTransmitString(command); - console.log("Done."); - jsTransmitString("Bangle.setLCDMode();clearInterval();clearTimeout();\n"); - jsStopIdle(); - - var rgba = new Uint8Array(GFX_WIDTH*GFX_HEIGHT*4); - jsGetGfxContents(rgba); - var rgba32 = new Uint32Array(rgba.buffer); - var firstPixel = rgba32[0]; - var blankImage = rgba32.every(col=>col==firstPixel) - - if (appLog.replace("Uncaught Storage Updated!", "").indexOf("Uncaught")>=0) - erroredApps.push( { id : app.id, log : appLog } ); - - if (!blankImage) { - var Jimp = require("jimp"); - let image = new Jimp(GFX_WIDTH, GFX_HEIGHT, function (err, image) { - if (err) throw err; - let buffer = image.bitmap.data; - buffer.set(rgba); - image.write(imageFn, (err) => { - if (err) throw err; - console.log("Image written as "+imageFn); - resolve(true); - }); - }); - } else { - console.log("Image is empty"); - resolve(false); - } + return apploader.getAppFilesString(app).then(command => { + console.log(`AppInfo returned for ${appId}`);//, files); + emu.factoryReset(); + console.log("Uploading..."); + emu.tx("g.clear()\n"); + command += `load("${appId}.app.js")\n`; + appLog = ""; + emu.tx(command); + console.log("Done."); + emu.tx("Bangle.setLCDMode();clearInterval();clearTimeout();\n"); + emu.stopIdle(); + return emu.writeScreenshot(imageFn, { errorIfBlank : true }).then(() => console.log("X")).catch( err => { + console.log("Error", err); }); }); } var screenshots = []; +apploader.init({ + EMULATOR : EMULATOR, + DEVICEID : DEVICEID +}); // wait until loaded... -setTimeout(function() { - console.log("Loaded..."); - jsInit(); - jsIdle(); - console.log("Factory reset"); - jsTransmitString("Bangle.factoryReset()\n"); - factoryFlashMemory.set(flashMemory); - console.log("Ready!"); - +emu.init({ + EMULATOR : EMULATOR, + DEVICEID : DEVICEID +}).then(function() { if (singleAppId) { + console.log("Single Screenshot"); getThumbnail(singleAppId, "screenshots/"+singleAppId+"-"+EMULATOR+".png"); return; } - var appList = apps.filter(app => (!app.type || app.type=="clock") && !app.custom); + console.log("Screenshot ALL"); + var appList = apploader.apps.filter(app => (!app.type || app.type=="clock") && !app.custom); appList = appList.filter(app => !app.screenshots && app.supports.includes(DEVICEID)); var promise = Promise.resolve(); From 009d93bdca262bf2c93e0cc5deec89aadb51f298 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 10:05:19 +0000 Subject: [PATCH 307/342] fix screenshot dir --- bin/thumbnailer.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/thumbnailer.js b/bin/thumbnailer.js index e9eb2ff61..22cdc27a5 100755 --- a/bin/thumbnailer.js +++ b/bin/thumbnailer.js @@ -6,6 +6,7 @@ var DEVICEID = "BANGLEJS2"; */ var EMULATOR = "banglejs1"; var DEVICEID = "BANGLEJS"; +var SCREENSHOT_DIR = __dirname+"/../screenshots/"; var emu = require("./lib/emulator.js"); var apploader = require("./lib/apploader.js"); @@ -69,7 +70,7 @@ emu.init({ }).then(function() { if (singleAppId) { console.log("Single Screenshot"); - getThumbnail(singleAppId, "screenshots/"+singleAppId+"-"+EMULATOR+".png"); + getThumbnail(singleAppId, SCREENSHOT_DIR+singleAppId+"-"+EMULATOR+".png"); return; } @@ -79,6 +80,10 @@ emu.init({ var promise = Promise.resolve(); appList.forEach(app => { + if (!app.supports.includes(DEVICEID)) { + console.log(`App ${app.id} isn't designed for ${DEVICEID}`); + return; + } promise = promise.then(() => { var imageFile = "screenshots/"+app.id+"-"+EMULATOR+".png"; return getThumbnail(app.id, imageFile).then(ok => { From e7edd54017b8f58ee25922fd31184814abab2af4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 11:00:00 +0000 Subject: [PATCH 308/342] Fix messages app loading on clock without fast load --- apps/messagegui/ChangeLog | 1 + apps/messagegui/lib.js | 31 +++++++++++++++---------------- apps/messagegui/metadata.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/messagegui/ChangeLog b/apps/messagegui/ChangeLog index 46634985a..228a952de 100644 --- a/apps/messagegui/ChangeLog +++ b/apps/messagegui/ChangeLog @@ -85,3 +85,4 @@ 0.60: Fix saving of removal messages if UI not open 0.61: Fix regression where loading into messages app stops back from working (#2398) 0.62: Remove '.show' field, tidyup and fix .open if fast load not enabled +0.63: Fix messages app loading on clock without fast load diff --git a/apps/messagegui/lib.js b/apps/messagegui/lib.js index 90791b5d6..a9436a77b 100644 --- a/apps/messagegui/lib.js +++ b/apps/messagegui/lib.js @@ -29,36 +29,33 @@ exports.listener = function(type, msg) { } const appSettings = require("Storage").readJSON("messages.settings.json", 1) || {}; - let loadMessages = (Bangle.CLOCK || event.important); + let loadMessages = (Bangle.CLOCK || event.important); // should we load the messages app? if (type==="music") { if (Bangle.CLOCK && msg.state && msg.title && appSettings.openMusic) loadMessages = true; else return; } - if (loadWillReset()) { - // no fast loading: store message to flash - require("messages").save(msg); - } else { - if (!Bangle.MESSAGES) Bangle.MESSAGES = []; - require("messages").apply(msg, Bangle.MESSAGES); - if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; - } + // Write the message to Bangle.MESSAGES. We'll deal with it in messageTimeout below + if (!Bangle.MESSAGES) Bangle.MESSAGES = []; + require("messages").apply(msg, Bangle.MESSAGES); + if (!Bangle.MESSAGES.length) delete Bangle.MESSAGES; const saveToFlash = () => { - // save messages from RAM to flash after all, if we decide not to launch app - if (Bangle.MESSAGES) Bangle.MESSAGES.forEach(m => require("messages").save(m)); + // save messages from RAM to flash if we decide not to launch app + // We apply all of Bangle.MESSAGES here in one write + if (!Bangle.MESSAGES || !Bangle.MESSAGES.length) return; + let messages = require("messages").getMessages(msg); + (Bangle.MESSAGES || []).forEach(m => require("messages").apply(m, messages)); + require("messages").write(messages); delete Bangle.MESSAGES; } msg.handled = true; - if ((msg.t!=="add" || !msg.new) && (type!=="music")) { // music always has t:"modify" - saveToFlash(); - return; - } + if ((msg.t!=="add" || !msg.new) && (type!=="music")) // music always has t:"modify" + return saveToFlash(); const quiet = (require("Storage").readJSON("setting.json", 1) || {}).quiet; const unlockWatch = appSettings.unlockWatch; // don't auto-open messages in quiet mode if quietNoAutOpn is true if ((quiet && appSettings.quietNoAutOpn) || appSettings.noAutOpn) loadMessages = false; - // after a delay load the app, to ensure we have all the messages if (exports.messageTimeout) clearTimeout(exports.messageTimeout); exports.messageTimeout = setTimeout(function() { @@ -75,6 +72,8 @@ exports.listener = function(type, msg) { Bangle.setLCDPower(1); // turn screen on } } + // if loading the gui would reload everything, we must save our messages + if (loadWillReset()) saveToFlash(); exports.open(msg); }, 500); }; diff --git a/apps/messagegui/metadata.json b/apps/messagegui/metadata.json index 270d80543..1a7a6c750 100644 --- a/apps/messagegui/metadata.json +++ b/apps/messagegui/metadata.json @@ -2,7 +2,7 @@ "id": "messagegui", "name": "Message UI", "shortName": "Messages", - "version": "0.62", + "version": "0.63", "description": "Default app to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From 99fa71bf4e33147ad640264a2eabb521cf747eec Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 15:16:25 +0000 Subject: [PATCH 309/342] new lcd clock app --- apps/lcdclock/ChangeLog | 1 + apps/lcdclock/app-icon.js | 1 + apps/lcdclock/app.js | 84 +++++++++++++++++++++++++++++++++++ apps/lcdclock/app.png | Bin 0 -> 12258 bytes apps/lcdclock/metadata.json | 14 ++++++ apps/lcdclock/screenshot.png | Bin 0 -> 2474 bytes 6 files changed, 100 insertions(+) create mode 100644 apps/lcdclock/ChangeLog create mode 100644 apps/lcdclock/app-icon.js create mode 100644 apps/lcdclock/app.js create mode 100644 apps/lcdclock/app.png create mode 100644 apps/lcdclock/metadata.json create mode 100644 apps/lcdclock/screenshot.png diff --git a/apps/lcdclock/ChangeLog b/apps/lcdclock/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/lcdclock/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/lcdclock/app-icon.js b/apps/lcdclock/app-icon.js new file mode 100644 index 000000000..ed3161c41 --- /dev/null +++ b/apps/lcdclock/app-icon.js @@ -0,0 +1 @@ +atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///T//+f///T///Q///Qf//Sf//Qf//Pf//Qf//AP//Yf//f///c///f///f///fiD/f8f/fur/f9f/fir/f9f/f67/f9f/fy7/f8f/fz//f+//AAAAAAAAAAAAAAAAf///////TD/u///vQB/EX/9PUV/d3/9fSd/F3/9HWd/d3/9Xf9/d//9Hf///////f///////f///8Hg/fmefwPAffmecz/Offmecz/Offmecz/OffmAcwHOffngc8DPffn+c/zOffn+c/zOffn+c/zOffn+f8DAff///8Hg/f///8Pw/f///////f//////+P//////8AAAAAAAAAAAAAAAAAAAAAAAA") diff --git a/apps/lcdclock/app.js b/apps/lcdclock/app.js new file mode 100644 index 000000000..2bc23247c --- /dev/null +++ b/apps/lcdclock/app.js @@ -0,0 +1,84 @@ +Graphics.prototype.setFont7Seg = function() { + return this.setFontCustom(atob("AAAAAAAAAAAACAQCAAAAAAIAd0BgMBdwAAAAAAAADuAAAB0RiMRcAAAAAiMRiLuAAAcAQCAQdwAADgiMRiIOAAAd0RiMRBwAAAAgEAgDuAAAd0RiMRdwAADgiMRiLuAAAABsAAAd0QiEQdwAADuCIRCIOAAAd0BgMBAAAAAOCIRCLuAAAd0RiMRAAAADuiEQiAAAAAd0BgMBBwAADuCAQCDuAAAdwAAAAAAAAAAAIBALuAAAdwQCAQdwAADuAIBAIAAAAd0AgEAcEAgEAdwAd0AgEAdwAADugMBgLuAAAd0QiEQcAAADgiEQiDuAAAd0AgEAAAAADgiMRiIOAAAAEAgEAdwAADuAIBALuAAAdwBAIBdwAADuAIBAIOAIBALuADuCAQCDuAAAcAQCAQdwAAAOiMRiLgAAAA=="), 32, atob("BwAAAAAAAAAAAAAAAAcCAAcHBwcHBwcHBwcEAAAAAAAABwcHBwcHBwcHBwcHCgcHBwcHBwcHBwoHBwc="), 9); +} + + +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global +let drawTimeout; + +// Actually draw the watch face +let draw = function() { + var x = R.x + R.w/2; + var y = R.y + R.h/2; + g.reset().setColor(g.theme.bg).setBgColor(g.theme.fg); + g.clearRect(R.x,barY+2,R.x2,R.y2-8); + var date = new Date(); + var timeStr = require("locale").time(date, 1); // Hour and minute + g.setFontAlign(0, 0).setFont("7Seg:5").drawString(timeStr, x, y+39); + // Show date and day of week + g.setFontAlign(0, 0).setFont("7Seg:2"); + g.setFontAlign(-1, 0).drawString(require("locale").meridian(date).toUpperCase(), R.x+6, y); + g.setFontAlign(0, 0).drawString(require("locale").dow(date, 1).toUpperCase(), x, y); + g.setFontAlign(1, 0).drawString(date.getDate(), R.x2 - 6, y); + + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +}; + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of the clock app + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + delete Graphics.prototype.setFont7Seg; + // remove info menu + clockInfoMenu.remove(); + delete clockInfoMenu; + clockInfoMenu2.remove(); + delete clockInfoMenu2; + // reset theme + g.setTheme(oldTheme); + }}); +// Load widgets +Bangle.loadWidgets(); +var R = Bangle.appRect; +R.x+=1; +R.y+=1; +R.x2-=1; +R.y2-=1; +R.w-=2; +R.h-=2; +var midX = R.x+R.w/2; +var barY = 80; +// Clear the screen once, at startup +let oldTheme = g.theme; +g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(1); +g.fillRect({x:R.x, y:R.y, w:R.w, h:R.h, r:8}).clearRect(R.x,barY,R.w,barY+1).clearRect(midX,R.y,midX+1,barY); +draw(); +setTimeout(Bangle.drawWidgets,0); + +let clockInfoDraw = (itm, info, options) => { + let texty = options.y+41; + g.reset().setFont("7Seg").setColor(g.theme.bg).setBgColor(g.theme.fg); + if (options.focus) g.setBgColor("#FF0"); + g.clearRect({x:options.x,y:options.y,w:options.w,h:options.h,r:8}); + + if (info.img) g.drawImage(info.img, options.x+2, options.y+2); + var title = clockInfoItems[options.menuA].name; + var text = info.text.toString().toUpperCase(); + if (title!="Bangle") g.setFontAlign(1,0).drawString(title.toUpperCase(), options.x+options.w-2, options.y+14); + if (g.setFont("7Seg:2").stringWidth(text)+8>options.w) g.setFont("7Seg"); + g.setFontAlign(0,0).drawString(text, options.x+options.w/2, options.y+40); + +}; +let clockInfoItems = require("clock_info").load(); +let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:R.x, y:R.y, w:midX-2, h:barY-R.y-2, draw : clockInfoDraw}); +let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { x:midX+2, y:R.y, w:midX-3, h:barY-R.y-2, draw : clockInfoDraw}); +} diff --git a/apps/lcdclock/app.png b/apps/lcdclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6a117b52598202f852ce5013571c533806e30cc1 GIT binary patch literal 12258 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 literal 0 HcmV?d00001 diff --git a/apps/lcdclock/metadata.json b/apps/lcdclock/metadata.json new file mode 100644 index 000000000..d7d09b106 --- /dev/null +++ b/apps/lcdclock/metadata.json @@ -0,0 +1,14 @@ +{ "id": "lcdclock", + "name": "LCD Clock", + "version":"0.01", + "description": "A Casio-style clock, with ClockInfo areas at the top and bottom. Tap them and swipe up/down to toggle between different information", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock,clkinfo", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"lcdclock.app.js","url":"app.js"}, + {"name":"lcdclock.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/lcdclock/screenshot.png b/apps/lcdclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b0bb5934a9ce315db242f7da0fbd61afb93dcc7d GIT binary patch literal 2474 zcmV;b303xqP)Px;WJyFpRCr$Poa=g{It&2Q_kZY~kDSsa)F4?GTfpqkjVB;q^^F$sM7 zWqZDfYklL^+kw*;)V=@$PXeEQS?yV{a}S)p4&?>-MTQd8WrnqG>;jYL7a4&t2?c=` z0iK1xi%Szg;7gZ}|=PqHRU~=)lOE2m6fe zwjk6%SA&(=ufTxQf$JS5b>P;=BDK&_{&*f3XgX-Uqbve1*PtFU>0g0?CBw3gKwv95 z-Mse}0)cg~EThf@KKqkR)I>)+MBt?m0B-}g3d}ZQkigPMq%Mv7j*|HFc41B|K3#Ej z;5~f0@ZUFLq`;h5H27-w!24~&zA#du?%QL}S0-`McHpCNPj4Ek4!r-^Ix31(tS3q= zG0}>t9rrZG-2!g`wch>Q(CzkUKfi=H>XceBwVfJ)cLaL33R1^;9AH7|#yU5(b;pkKcfsF!t?{L`<|Jxo&EUnuJDehew z!O=RJ9k{1!oB@i8bLApv86dE&%6|mb0@q$HI-d5rRmSzK|7Z)LxzVe#-qCq{2rS+0 zdXszN$6b`bEBkGYp2&0WAOd^emBRcUf!U7r7en<$Mt@jl>^r8XTT1)mC(}mYXD*~Wb!ndTdM?U# z^vVKP)(g}-AAvmta_7>4bNO zz{$nGL-@)9--2(YQ;0hN-LC# zUYn^)zWXwAzy&zbI}rbjbE;70kakgfABWuPtrWR zm-0FaFnXT2kck7VPFPb$;0?LaB3iF!E%u0c2t4tZyjGz`&l@44^%@9_z*cuk%tK%V zE+L{d2?R!9t2-s;l@fR*5`FYhg7irePh0QEdPK8LJqI2MCh}U*kRx-udaP)+u4A<5 zbJ2arAN^CO(WeR4>s6N6x`nW^Kw!>+L*EYw%uQUVP@{t(FanQuF7$c`jKHBnjShyu z2t3-k(Cd{FICNzMgTSUa?O|9?oK)w)kcU7NfuZNXQAraA0$Bv;z*%I8JA?oN55deu zvIrn>7FpsBA%MU`FmsVC0tlQ%mbgO*An*{(TqKJC0%wsW?hpb9JOs1tB1eb*nrPN< zwvJ*~%4M4)0&8rTG^Ua?m2yGgNkaBswvsfJazWr;lO~O?Bu%AU5O|W1y_c;dO{H9> z3fuyrz2Wf8ZOIcIuUF8ILVPW^BcK1YTs+qu!6lRP@S8Z#Vmxz46v`t~^x7)rlDRen zzG>G(U=M+lxt@2UXD%IBU(hRYrUTP~|Co)y5ADF7!h7cGd#i3_bS}~HIEDBj5DnH7 z&ofu2rG8X&F46H27=cf1jutLD9s(mU0_#7JK1X`qjh?w9P9Z$`dFEPcaWpSFm*{wO zU^*}z*!r&byc<1p>A?DmRp(3xrUTP~_3vl)z#3N3T~BjO_P_>8oixPzn97QrA4g$+i5m;t4Z3F_#=!Xj&eTOSA@pwdZF46I3tu1;T(eb99LS!zc zx8TvaM91r0&qrY$KN5{zM|3;{{vi+zHaZ>x%LLd$>==1YWDvM5TqYL;M&LizMGF@l zk1YgSh||yJXyKycAus|Xu)Mt;dp$nl#6E_(OoZ^OLV-crx4MFx^ui%;kE1aJkz0l zL(Iwrfwkl(k3(R&0K-oq3m1pfWC92*Gh#$x0tj5VIHV>MKwy~> zBMK9E3%ukP{q$1dHIv#+2rS=JBJfR$`NU;>2uv4#q5{`l^ZJ~~ZwFqN!dBwCMSV)< o+lQR~2#m;2(cpUPY(1U#A8YpJ;fbu0#sB~S07*qoM6N<$g72V_`v3p{ literal 0 HcmV?d00001 From 260bb1bcda6b89ba22ef77162bb2a567d4f92eb6 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 15:16:33 +0000 Subject: [PATCH 310/342] notes on stuff to test --- apps/messages/TEST_ME.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 apps/messages/TEST_ME.txt diff --git a/apps/messages/TEST_ME.txt b/apps/messages/TEST_ME.txt new file mode 100644 index 000000000..8ce50d8b6 --- /dev/null +++ b/apps/messages/TEST_ME.txt @@ -0,0 +1,7 @@ +We need automated tests for this. Specifically: + + +* send notification in clock with fast load -> messagesgui appears +* send notification in clock without fast load -> messagesgui appears +* send notification and delete notification quick -> messagesgui doesn't load +* music? From 8425f0b50aea39a9083b95ccc9f4211d9c5d556a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 15:40:58 +0000 Subject: [PATCH 311/342] Update clock_info to avoid a redraw/general tidyups --- apps/agenda/ChangeLog | 1 + apps/agenda/agenda.clkinfo.js | 2 +- apps/agenda/metadata.json | 2 +- apps/bwclk/ChangeLog | 3 ++- apps/bwclk/app.js | 2 +- apps/bwclk/metadata.json | 2 +- apps/clkinfofw/ChangeLog | 1 + apps/clkinfofw/clkinfo.js | 19 +++---------------- apps/clkinfofw/metadata.json | 2 +- apps/ha/ChangeLog | 3 ++- apps/ha/ha.clkinfo.js | 4 ++-- apps/ha/metadata.json | 2 +- apps/linuxclock/ChangeLog | 3 ++- apps/linuxclock/app.js | 8 ++++---- apps/linuxclock/metadata.json | 2 +- apps/sched/ChangeLog | 3 ++- apps/sched/clkinfo.js | 2 +- apps/sched/metadata.json | 2 +- apps/smpltmr/ChangeLog | 1 + apps/smpltmr/clkinfo.js | 4 ++-- apps/smpltmr/metadata.json | 2 +- apps/weather/ChangeLog | 1 + apps/weather/clkinfo.js | 10 +++++----- apps/weather/metadata.json | 2 +- 24 files changed, 39 insertions(+), 44 deletions(-) diff --git a/apps/agenda/ChangeLog b/apps/agenda/ChangeLog index cb928213e..77e11c92e 100644 --- a/apps/agenda/ChangeLog +++ b/apps/agenda/ChangeLog @@ -8,3 +8,4 @@ 0.08: Fix error in clkinfo (didn't require Storage & locale) Fix clkinfo icon 0.09: Ensure Agenda supplies an image for clkinfo items +0.10: Update clock_info to avoid a redraw diff --git a/apps/agenda/agenda.clkinfo.js b/apps/agenda/agenda.clkinfo.js index 54677327b..7c89446a2 100644 --- a/apps/agenda/agenda.clkinfo.js +++ b/apps/agenda/agenda.clkinfo.js @@ -20,7 +20,7 @@ agendaItems.items.push({ name: "Agenda "+i, get: () => ({ text: title + "\n" + dateStr, img: agendaItems.img }), - show: function() { agendaItems.items[i].emit("redraw"); }, + show: function() {}, hide: function () {} }); }); diff --git a/apps/agenda/metadata.json b/apps/agenda/metadata.json index 58a5091cd..8253b36bc 100644 --- a/apps/agenda/metadata.json +++ b/apps/agenda/metadata.json @@ -1,7 +1,7 @@ { "id": "agenda", "name": "Agenda", - "version": "0.09", + "version": "0.10", "description": "Simple agenda", "icon": "agenda.png", "screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}], diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog index 546c83894..e3e059318 100644 --- a/apps/bwclk/ChangeLog +++ b/apps/bwclk/ChangeLog @@ -20,4 +20,5 @@ 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. -0.23: Feedback of apps after run is now optional and decided by the corresponding clkinfo. \ No newline at end of file +0.23: Feedback of apps after run is now optional and decided by the corresponding clkinfo. +0.24: Update clock_info to avoid a redraw diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index 7dcca9d75..c29fdf2ef 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -93,7 +93,7 @@ var bwItems = { items: [ { name: "WeekOfYear", get: () => ({ text: "Week " + weekOfYear(), img: null}), - show: function() { bwItems.items[0].emit("redraw"); }, + show: function() {}, hide: function () {} }, ] diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index fa0f7b01f..8ef812f41 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -1,7 +1,7 @@ { "id": "bwclk", "name": "BW Clock", - "version": "0.23", + "version": "0.24", "description": "A very minimalistic clock to mainly show date and time.", "readme": "README.md", "icon": "app.png", diff --git a/apps/clkinfofw/ChangeLog b/apps/clkinfofw/ChangeLog index 7b83706bf..10810802b 100644 --- a/apps/clkinfofw/ChangeLog +++ b/apps/clkinfofw/ChangeLog @@ -1 +1,2 @@ 0.01: First release +0.02: Update clock_info to avoid a redraw and image allocation diff --git a/apps/clkinfofw/clkinfo.js b/apps/clkinfofw/clkinfo.js index 9815ca87f..2b3cb32ba 100644 --- a/apps/clkinfofw/clkinfo.js +++ b/apps/clkinfofw/clkinfo.js @@ -4,26 +4,13 @@ items: [ { name : "FW", get : () => { - let d = new Date(); - let g = Graphics.createArrayBuffer(24,24,1,{msb:true}); - g.drawImage(atob("GBjC////AADve773VWmmmmlVVW22nnlVVbLL445VVwAAAADVWAAAAAAlrAAAAAA6sAAAAAAOWAAAAAAlrAD//wA6sANVVcAOWANVVcAlrANVVcA6rANVVcA6WANVVcAlsANVVcAOrAD//wA6WAAAAAAlsAAAAAAOrAAAAAA6WAAAAAAlVwAAAADVVbLL445VVW22nnlVVWmmmmlV"),1,0); return { text : process.env.VERSION, - img : g.asImage("string") + img : atob("GBjC////AADve773VWmmmmlVVW22nnlVVbLL445VVwAAAADVWAAAAAAlrAAAAAA6sAAAAAAOWAAAAAAlrAD//wA6sANVVcAOWANVVcAlrANVVcA6rANVVcA6WANVVcAlsANVVcAOrAD//wA6WAAAAAAlsAAAAAAOrAAAAAA6WAAAAAAlVwAAAADVVbLL445VVW22nnlVVWmmmmlV") }; }, - show : function() { - this.interval = setTimeout(()=>{ - this.emit("redraw"); - this.interval = setInterval(()=>{ - this.emit("redraw"); - }, 86400000); - }, 86400000 - (Date.now() % 86400000)); - }, - hide : function() { - clearInterval(this.interval); - this.interval = undefined; - } + show : function() {}, + hide : function() {} } ] }; diff --git a/apps/clkinfofw/metadata.json b/apps/clkinfofw/metadata.json index 924297ca3..720a5baa5 100644 --- a/apps/clkinfofw/metadata.json +++ b/apps/clkinfofw/metadata.json @@ -1,6 +1,6 @@ { "id": "clkinfofw", "name": "Firmware Clockinfo", - "version":"0.01", + "version":"0.02", "description": "For clocks that display 'clockinfo', this displays the firmware version string", "icon": "app.png", "type": "clkinfo", diff --git a/apps/ha/ChangeLog b/apps/ha/ChangeLog index f9ca3c16d..c0d58e5bc 100644 --- a/apps/ha/ChangeLog +++ b/apps/ha/ChangeLog @@ -3,4 +3,5 @@ 0.03: Added clkinfo for clocks. 0.04: Feedback if clkinfo run is called. 0.05: Clkinfo improvements. -0.06: Updated clkinfo icon. \ No newline at end of file +0.06: Updated clkinfo icon. +0.07: Update clock_info to avoid a redraw diff --git a/apps/ha/ha.clkinfo.js b/apps/ha/ha.clkinfo.js index d6a0f72a0..09724ba45 100644 --- a/apps/ha/ha.clkinfo.js +++ b/apps/ha/ha.clkinfo.js @@ -12,7 +12,7 @@ haItems.items.push({ name: null, get: () => ({ text: trigger.display, img: trigger.getIcon()}), - show: function() { haItems.items[i].emit("redraw"); }, + show: function() {}, hide: function () {}, run: function() { ha.sendTrigger("TRIGGER_BW"); @@ -23,4 +23,4 @@ }); return haItems; -}) \ No newline at end of file +}) diff --git a/apps/ha/metadata.json b/apps/ha/metadata.json index 089450f55..1432e010e 100644 --- a/apps/ha/metadata.json +++ b/apps/ha/metadata.json @@ -1,7 +1,7 @@ { "id": "ha", "name": "HomeAssistant", - "version": "0.06", + "version": "0.07", "description": "Integrates your BangleJS into HomeAssistant.", "icon": "ha.png", "type": "app", diff --git a/apps/linuxclock/ChangeLog b/apps/linuxclock/ChangeLog index 3f1ef5c55..1c4f7d79b 100644 --- a/apps/linuxclock/ChangeLog +++ b/apps/linuxclock/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App. -0.02: Performance improvements. \ No newline at end of file +0.02: Performance improvements. +0.03: Update clock_info to avoid a redraw diff --git a/apps/linuxclock/app.js b/apps/linuxclock/app.js index 02676310e..9470b803c 100644 --- a/apps/linuxclock/app.js +++ b/apps/linuxclock/app.js @@ -52,22 +52,22 @@ var H = g.getHeight(); items: [ { name: "time", get: () => ({ text: getTime(), img: null}), - show: function() { dateMenu.items[0].emit("redraw"); }, + show: function() {}, hide: function () {} }, { name: "day", get: () => ({ text: getDay(), img: null}), - show: function() { dateMenu.items[2].emit("redraw"); }, + show: function() {}, hide: function () {} }, { name: "date", get: () => ({ text: getDate(), img: null}), - show: function() { dateMenu.items[1].emit("redraw"); }, + show: function() {}, hide: function () {} }, { name: "week", get: () => ({ text: weekOfYear(), img: null}), - show: function() { dateMenu.items[3].emit("redraw"); }, + show: function() {}, hide: function () {} }, ] diff --git a/apps/linuxclock/metadata.json b/apps/linuxclock/metadata.json index dfb17a315..06ef66498 100644 --- a/apps/linuxclock/metadata.json +++ b/apps/linuxclock/metadata.json @@ -1,7 +1,7 @@ { "id": "linuxclock", "name": "Linux Clock", - "version": "0.02", + "version": "0.03", "description": "A Linux inspired clock.", "readme": "README.md", "icon": "app.png", diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index c99fe9858..b24ba9266 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -1,6 +1,6 @@ 0.01: New App! 0.02: Fix scheduling of other alarms if there is a pending alarm from the past (fix #1667) -0.03: Fix `getTimeToAlarm` for a timer already used at same day, don't set `last` for timers. +0.03: Fix `getTimeToAlarm` for a timer already used at same day, don't set `last` for timers. 0.04: Fix `getTimeToAlarm` to check for next dow if alarm.t lower currentTime. 0.05: Export new functions (`newDefaultAlarm/Timer`), add Settings page 0.06: Refactor some methods to library @@ -18,3 +18,4 @@ 0.15: Automatic translation of some string in clkinfo 0.16: Improve support for date timezone 0.17: Fix midnight in local timezone (alarms wouldn't always fire as expected in timezone != 0) +0.18: Update clock_info to avoid a redraw diff --git a/apps/sched/clkinfo.js b/apps/sched/clkinfo.js index 3bd11f70b..439784039 100644 --- a/apps/sched/clkinfo.js +++ b/apps/sched/clkinfo.js @@ -63,7 +63,7 @@ hasRange: true, get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a), v: getAlarmValue(a), min:0, max:getAlarmMax(a)}), - show: function() { alarmItems.items[i].emit("redraw"); }, + show: function() {}, hide: function () {}, run: function() { } })), diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 05e829d83..a99e62089 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.17", + "version": "0.18", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog index 12b77aacd..61111482e 100644 --- a/apps/smpltmr/ChangeLog +++ b/apps/smpltmr/ChangeLog @@ -4,3 +4,4 @@ 0.04: Improvements of clock infos. 0.05: Updated clkinfo icon. 0.06: Ensure Timer supplies an image for clkinfo items +0.07: Update clock_info to avoid a redraw diff --git a/apps/smpltmr/clkinfo.js b/apps/smpltmr/clkinfo.js index 270a14fc4..ac01cfb59 100644 --- a/apps/smpltmr/clkinfo.js +++ b/apps/smpltmr/clkinfo.js @@ -70,7 +70,7 @@ { name: null, get: () => ({ text: getAlarmMinutesText() + (isAlarmEnabled() ? " min" : ""), img: smpltmrItems.img }), - show: function() { smpltmrItems.items[0].emit("redraw"); }, + show: function() {}, hide: function () {}, run: function() { } }, @@ -82,7 +82,7 @@ smpltmrItems.items = smpltmrItems.items.concat({ name: null, get: () => ({ text: (o > 0 ? "+" : "") + o + " min.", img: smpltmrItems.img }), - show: function() { smpltmrItems.items[i+1].emit("redraw"); }, + show: function() {}, hide: function () {}, run: function() { if(o > 0) increaseAlarm(o); diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index 71e793cc2..b0d1a34da 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.06", + "version": "0.07", "description": "A very simple app to start a timer.", "icon": "app.png", "tags": "tool,alarm,timer,clkinfo", diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index f1d001c81..4b70d3531 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -19,3 +19,4 @@ 0.20: Added weather condition with temperature to clkinfo. 0.21: Updated clkinfo icon. 0.22: Automatic translation of strings, some left untranslated. +0.23: Update clock_info to avoid a redraw diff --git a/apps/weather/clkinfo.js b/apps/weather/clkinfo.js index 3cdd31c59..f40924e06 100644 --- a/apps/weather/clkinfo.js +++ b/apps/weather/clkinfo.js @@ -34,14 +34,14 @@ name: "conditionWithTemperature", get: () => ({ text: weather.temp, img: weatherIcon(weather.code), v: parseInt(weather.temp), min: -30, max: 55}), - show: function() { this.emit("redraw"); }, + show: function() {}, hide: function () {} }, { name: "condition", get: () => ({ text: weather.txt, img: weatherIcon(weather.code), v: weather.code}), - show: function() { this.emit("redraw"); }, + show: function() {}, hide: function () {} }, { @@ -49,7 +49,7 @@ hasRange : true, get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="), v: parseInt(weather.temp), min: -30, max: 55}), - show: function() { this.emit("redraw"); }, + show: function() {}, hide: function () {} }, { @@ -57,7 +57,7 @@ hasRange : true, get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="), v: parseInt(weather.hum), min: 0, max: 100}), - show: function() { this.emit("redraw"); }, + show: function() {}, hide: function () {} }, { @@ -65,7 +65,7 @@ hasRange : true, get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="), v: parseInt(weather.wind), min: 0, max: 118}), - show: function() { this.emit("redraw"); }, + show: function() {}, hide: function () {} }, ] diff --git a/apps/weather/metadata.json b/apps/weather/metadata.json index 7fefb7685..77ca37721 100644 --- a/apps/weather/metadata.json +++ b/apps/weather/metadata.json @@ -1,7 +1,7 @@ { "id": "weather", "name": "Weather", - "version": "0.22", + "version": "0.23", "description": "Show Gadgetbridge weather report", "icon": "icon.png", "screenshots": [{"url":"screenshot.png"}], From 67e269486bab419ac7f2968484f55beda2ecd14b Mon Sep 17 00:00:00 2001 From: Mo Abrahams <3750013+dashavoo@users.noreply.github.com> Date: Fri, 16 Dec 2022 23:56:41 +0000 Subject: [PATCH 312/342] Add Xiaomi Mijia temperature sensor display --- apps/mitherm/ChangeLog | 1 + apps/mitherm/README.md | 22 +++++ apps/mitherm/app-icon.js | 1 + apps/mitherm/app.js | 172 +++++++++++++++++++++++++++++++++++++ apps/mitherm/app.png | Bin 0 -> 863 bytes apps/mitherm/metadata.json | 15 ++++ 6 files changed, 211 insertions(+) create mode 100644 apps/mitherm/ChangeLog create mode 100644 apps/mitherm/README.md create mode 100644 apps/mitherm/app-icon.js create mode 100644 apps/mitherm/app.js create mode 100644 apps/mitherm/app.png create mode 100644 apps/mitherm/metadata.json diff --git a/apps/mitherm/ChangeLog b/apps/mitherm/ChangeLog new file mode 100644 index 000000000..630459c15 --- /dev/null +++ b/apps/mitherm/ChangeLog @@ -0,0 +1 @@ +0.01: Create mitherm app with support for pvvx firmware only diff --git a/apps/mitherm/README.md b/apps/mitherm/README.md new file mode 100644 index 000000000..cdf3daa61 --- /dev/null +++ b/apps/mitherm/README.md @@ -0,0 +1,22 @@ +Reads BLE advertisement data from Xiaomi temperature/humidity sensors running the +`pvvx` custom firmware (https://github.com/pvvx/ATC_MiThermometer). + +## Features + +* Display temperature +* Display humidity +* Display battery state of sensor +* Auto-refresh every 5 minutes +* Manual refresh on demand +* Add aliases for MAC addresses to easily recognise devices + +## Planned features + +* Supprt for other advertising formats: + * atc1441 format + * BTHome + * Xiaomi Mijia format +* Configurable auto-refresh interval +* Configurable scan length (currently 30s) +* Alerts when temperature outside defined limits (with a widget or bootcode to + work when app is inactive) diff --git a/apps/mitherm/app-icon.js b/apps/mitherm/app-icon.js new file mode 100644 index 000000000..2e8737704 --- /dev/null +++ b/apps/mitherm/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4Ac5gWVhnM4AWVAAIYTCwQABCywYRIoYADJJwWHDB4RD5sz7hJPFIlP//0MRxFE6f/AAM9JJgWE4gWCAANMDBZcEn4XE+ZiKFwhcBCYPdDYRiEGAoXDLgf97vfMQwXILggXFMQYXHLgoXB6czMQoXHLgQXJMQQXG4YWEI44ABngXGh4XHF4v/+DAGC6DXGC5BHGC509F4IXTdwIABV4gXOIwIABJAoX/C6p3Xa4a/UABAXfgczABswC/4XmAH4A/ABY")) diff --git a/apps/mitherm/app.js b/apps/mitherm/app.js new file mode 100644 index 000000000..b7abdb2fc --- /dev/null +++ b/apps/mitherm/app.js @@ -0,0 +1,172 @@ +var filterTemperature = [{ + serviceData: { + "181a": {} + } +}]; +var results = {}; +var macs = []; + +var aliases = require("Storage").readJSON("mitherm.json", true); +if (!aliases) aliases = {}; + +var lastSeen = {}; +var current = 0; +var scanning = false; +var timeoutDraw; +var timeoutScan; + + +const scan = function() { + if (!scanning) { // Don't start scanning if already doing so. + scanning = true; + if (timeoutScan) clearTimeout(timeoutScan); + timeoutScan = setTimeout(scan, 300000); // Scan again in 5 minutes. + drawScanState(scanning); + NRF.findDevices(function(devices) { + onDevices(devices); + }, { + filters: filterTemperature, + timeout: 30000 // Scan for 30s + }); + } +}; + + +const onDevices = function(devices) { + let now = Date.now(); + for (let i = 0; i < devices.length; i++) { + let device = devices[i]; + + let processedData = extractData(device.data); + console.log({ + rssi: device.rssi, + data: processedData + }); + if (!macs.includes(processedData.MAC)) { + macs.push(processedData.MAC); + } + results[processedData.MAC] = processedData; + lastSeen[processedData.MAC] = now; + } + console.log("Scan complete."); + scanning = false; + writeOutput(); +}; + + +const extractData = function(thedata) { + let data = DataView(thedata); + let MAC = []; + for (let i = 9; i > 3; i--) { + MAC.push(data.getUint8(i, true).toString(16).padStart(2, "0")); + } + out = { + size: data.getUint8(0, true), + uid: data.getUint8(1, true), + UUID: data.getUint16(2, true), + MAC: MAC.join(":"), + temperature: data.getInt16(10, true) * 0.01, + humidity: data.getUint16(12, true) * 0.01, + battery_mv: data.getUint16(14, true), + battery_level: data.getUint8(16, true), + }; + return out; +}; + + +const writeOutput = function() { + let now = Date.now(); + if (timeoutDraw) clearTimeout(timeoutDraw); + timeoutDraw = setTimeout(writeOutput, 60000); // Refresh in 1 minute. + g.clear(true); + Bangle.drawWidgets(); + g.reset(); + drawScanState(scanning); + + if (macs.length == 0) return; + + processedData = results[macs[current]]; + g.setFont12x20(2); + g.drawString(`${processedData.temperature.toFixed(2)}°C`, 10, 30); + g.drawString(`${processedData.humidity.toFixed(2)} %`, 10, 70); + + g.setFont6x15(); + g.drawString(`${((now - lastSeen[macs[current]]) / 60000).toFixed(0)} min ago`, 10, 130); + g.drawString(`${processedData.battery_level} % battery`, 80, 130); + g.drawString(` ${processedData.MAC in aliases ? aliases[processedData.MAC] : processedData.MAC}: ${current + 1} / ${macs.length}`, 10, 150); +}; + + +const scrollDevices = function(directionLR) { + // Swipe left or right to move between devices. + current -= directionLR; // inverted feels a more familiar gesture. + if (current + 1 > macs.length) + current = 0; + if (current < 0) + current = macs.length - 1; + writeOutput(); +}; + +const drawScanState = function(state) { + if (state) + g.fillRect(160, 160, 170, 170); + else + g.clearRect(160, 160, 170, 170); +}; + +const setAlias = function(mac, alias) { + if (alias === "") { + delete aliases[mac]; + } + else { + aliases[mac] = alias; + require("Storage").writeJSON("mitherm.json", aliases); + } +}; + +const changeAlias = function(mac) { + g.clear(); + require("textinput").input((mac in aliases) ? aliases[mac] : "").then(function(text) { + setAlias(mac, text); + setUI(); + writeOutput(); + }); +}; + + +const setUI = function() { + Bangle.setUI({ + mode: "custom", + swipe: scrollDevices, + btn: function() { + E.showMenu(actionsMenu); + } + }); +}; + + +const actionsMenu = { + "": { + "title": "-- Actions --", + "back": function() { + E.showMenu(); + }, + "remove": function() { + setUI(); + writeOutput(); + }, + }, + "Scan now": function() { + scan(); + E.showMenu(); + }, + "Edit alias": function() { + changeAlias(macs[current]); + }, +}; + +setUI(); +Bangle.loadWidgets(); +g.setClipRect(Bangle.appRect); +scan(); +writeOutput(); diff --git a/apps/mitherm/app.png b/apps/mitherm/app.png new file mode 100644 index 0000000000000000000000000000000000000000..81d6bb24f8dd9d8bc1e59ecc20ffbf2744ffd293 GIT binary patch literal 863 zcmV-l1EBngP)C~OT?JZL=V9)^A6*YCOc`M522%(A>ADh3-C*JXLD!YY+l{;(AndvldAp(8 zfjqjdM1RJHNck(w(7dF}0n)B>{$e<;K7jN3BXEHdt*~K>fC*YRs2rf_Iv)(d*>)T7 z`TzjZx33U-Ejm2FDWOJnXFA#b!5xG%1F0WU&0L~YH{md;`_a0Sz zzp$ko{O9ai7Yj>}?0KU&SA02ybZ11>ja&kB{f+X$5M0p_)#3rH6b}G=^1b@p-3Q@} zj=)xbf~poP&17zUQMT**8mN*iGx+qkh`L(&xxf{ygZ=Cs@KyC#ycvO%{HPg|*a1Em zg6rO>?&4|SD-XdH9VK#uWDg{qSNZ~cu#viu;wJZBzdt=(ppGHF7{vGXrfE*Xrd)eK zYYFvdY>4o|#sqcd9B3_}T=0A9AX%}4%brCtR0WidqZt6=~0Vm>iN^ekTt5x~b|@Sm@iJ@=oh0UwVs&1HxH&;52-QgiZT^Rp=EyUa9~Ap-1U z&vcFH!I(Xe$tVtSqR2FrAp+9d_p6N6GR Date: Sun, 18 Dec 2022 11:17:28 +0200 Subject: [PATCH 313/342] Update app.js --- apps/hworldclock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index 2eba0fb71..c5ab16b32 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -257,7 +257,7 @@ let draw = function() { minutes = doublenum(dx.getMinutes()); - if (offsets.length === 1) { + if (offsets.length === 1 && false) { let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; // For a single secondary timezone, draw it bigger and drop time zone to second line const xOffset = 30; From c873bbe0dd6c4aa55d145a6b25b22d4cdf286f08 Mon Sep 17 00:00:00 2001 From: rnist Date: Sun, 18 Dec 2022 11:59:07 +0200 Subject: [PATCH 314/342] Added setting to show single offset small, as if there is more than one --- apps/hworldclock/README.md | 1 + apps/hworldclock/app.js | 3 ++- apps/hworldclock/settings.js | 21 ++++++++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/hworldclock/README.md b/apps/hworldclock/README.md index 273389775..d8343e5b9 100644 --- a/apps/hworldclock/README.md +++ b/apps/hworldclock/README.md @@ -9,6 +9,7 @@ All this is configurable: - Show seconds only when unlocked (saves battery) / always / do not show seconds - Green color on dark mode (on/off) + - 1 Offset Small: single location shows as small (like more than 1) - Show sun info (on/off) (set your location in the mylocation app) - Rotation degree on swipe (off / 90 / 180 / 270) diff --git a/apps/hworldclock/app.js b/apps/hworldclock/app.js index c5ab16b32..79e916ea9 100644 --- a/apps/hworldclock/app.js +++ b/apps/hworldclock/app.js @@ -104,6 +104,7 @@ let def = function(value, def) { let settings = require('Storage').readJSON(SETTINGSFILE, true) || {}; secondsMode = def(settings.secondsMode, "when unlocked"); showSunInfo = def(settings.showSunInfo, true); +singleOffsetSmall = def(settings.singleOffsetSmall, false); colorWhenDark = def(settings.colorWhenDark, "green"); rotationTarget = def(settings.rotationTarget, "90"); rotationTarget = parseInt(rotationTarget) || 0; @@ -257,7 +258,7 @@ let draw = function() { minutes = doublenum(dx.getMinutes()); - if (offsets.length === 1 && false) { + if (offsets.length === 1 && !singleOffsetSmall) { let date = [require("locale").dow(new Date(), 1), require("locale").date(new Date(), 1)]; // For a single secondary timezone, draw it bigger and drop time zone to second line const xOffset = 30; diff --git a/apps/hworldclock/settings.js b/apps/hworldclock/settings.js index ad97c161a..fd61baa76 100644 --- a/apps/hworldclock/settings.js +++ b/apps/hworldclock/settings.js @@ -36,13 +36,20 @@ "< Back": () => back(), "Seconds": stringInSettings("secondsMode", ["always", "when unlocked", "none"]), "Color w. dark": stringInSettings("colorWhenDark", ["green", "default"]), - "Show SunInfo": { - value: (settings.showSunInfo !== undefined ? settings.showSunInfo : true), - onchange: v => { - settings.showSunInfo = v; - writeSettings(); - } - }, + "1 Offset Small": { + value: (settings.singleOffsetSmall !== undefined ? settings.singleOffsetSmall : true), + onchange: v=> { + settings.singleOffsetSmall = v; + writeSettings(); + } + }, + "Show SunInfo": { + value: (settings.showSunInfo !== undefined ? settings.showSunInfo : true), + onchange: v => { + settings.showSunInfo = v; + writeSettings(); + } + }, "Rotation": stringInSettings("rotationTarget", ["off", "90", "180", "270"]), }; From d3e5a95854f19cc1a030d56674926212f8be4d74 Mon Sep 17 00:00:00 2001 From: rnist Date: Sun, 18 Dec 2022 12:06:16 +0200 Subject: [PATCH 315/342] Updated changelog --- apps/hworldclock/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/hworldclock/ChangeLog b/apps/hworldclock/ChangeLog index 87c7cf288..99727c50b 100644 --- a/apps/hworldclock/ChangeLog +++ b/apps/hworldclock/ChangeLog @@ -15,4 +15,5 @@ 0.29: Use 'modules/suncalc.js' to avoid it being copied 8 times for different apps 0.30: BJS2: swipe seems to be working now 0.31: Tweaking the swipe option; Added mylocation as a dependency. - Remove calls to Bangle.loadWidgets as they are not needed and create warnings \ No newline at end of file + Remove calls to Bangle.loadWidgets as they are not needed and create warnings +0.32: Added setting to show single timezone small, like where multiple ones are configured \ No newline at end of file From 419c123d6dd7c5f47b642b9449d43890bb9d90a4 Mon Sep 17 00:00:00 2001 From: rnist Date: Sun, 18 Dec 2022 12:07:22 +0200 Subject: [PATCH 316/342] Updated version --- apps/hworldclock/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hworldclock/metadata.json b/apps/hworldclock/metadata.json index 590f1dc86..fe5865ad0 100644 --- a/apps/hworldclock/metadata.json +++ b/apps/hworldclock/metadata.json @@ -2,7 +2,7 @@ "id": "hworldclock", "name": "Hanks World Clock", "shortName": "Hanks World Clock", - "version": "0.31", + "version": "0.32", "description": "Current time zone plus up to three others", "allow_emulator":true, "icon": "app.png", From 8d06e3089800d5aca67ddd59dbd4826654549ecd Mon Sep 17 00:00:00 2001 From: rnist Date: Sun, 18 Dec 2022 12:20:20 +0200 Subject: [PATCH 317/342] Default single offset small to false in the menu --- apps/hworldclock/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hworldclock/settings.js b/apps/hworldclock/settings.js index fd61baa76..98b91dc7b 100644 --- a/apps/hworldclock/settings.js +++ b/apps/hworldclock/settings.js @@ -37,7 +37,7 @@ "Seconds": stringInSettings("secondsMode", ["always", "when unlocked", "none"]), "Color w. dark": stringInSettings("colorWhenDark", ["green", "default"]), "1 Offset Small": { - value: (settings.singleOffsetSmall !== undefined ? settings.singleOffsetSmall : true), + value: (settings.singleOffsetSmall !== undefined ? settings.singleOffsetSmall : false), onchange: v=> { settings.singleOffsetSmall = v; writeSettings(); From 45b6108a20b33e22baea445e32f3dc52127c348f Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 18 Dec 2022 13:26:45 +0100 Subject: [PATCH 318/342] Update changelog link to https This fixes Bangle.JS Gadgetbridge from failing to load the ChangeLog with net::ERR_CLEARTEXT_NOT_PERMITTED --- loader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader.js b/loader.js index c525fd963..a6e51192e 100644 --- a/loader.js +++ b/loader.js @@ -49,7 +49,7 @@ function onFoundDeviceInfo(deviceId, deviceVersion) { if (deviceId != "BANGLEJS" && deviceId != "BANGLEJS2") { showToast(`You're using ${deviceId}, not a Bangle.js. Did you want espruino.com/apps instead?` ,"warning", 20000); } else if (versionLess(deviceVersion, RECOMMENDED_VERSION)) { - showToast(`You're using an old Bangle.js firmware (${deviceVersion}) and ${RECOMMENDED_VERSION} is available (see changes). You can update ${fwExtraText}with the instructions here` ,"warning", 20000); + showToast(`You're using an old Bangle.js firmware (${deviceVersion}) and ${RECOMMENDED_VERSION} is available (see changes). You can update ${fwExtraText}with the instructions here` ,"warning", 20000); } // check against features shown? filterAppsForDevice(deviceId); From 3e32c00192902af145bcef5fca16abd816b1d9b7 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 14:19:06 +0100 Subject: [PATCH 319/342] choozi - Work indepent of the theme --- apps/choozi/appb2.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/choozi/appb2.js b/apps/choozi/appb2.js index 5f217f638..0ed4af25d 100644 --- a/apps/choozi/appb2.js +++ b/apps/choozi/appb2.js @@ -81,6 +81,7 @@ function arc(minR, maxR, minAngle, maxAngle) { // draw the arc segments around the perimeter function drawPerimeter() { + g.setBgColor('#000000'); g.clear(); for (var i = 0; i < N; i++) { g.setColor(colours[i%colours.length]); @@ -152,7 +153,7 @@ function choose() { // draw the current value of N in the middle of the screen, with // up/down arrows function drawN() { - g.setColor(g.theme.fg); + g.setColor('#ffffff'); g.setFont("Vector",fontSize); g.drawString(N,centreX-g.stringWidth(N)/2+4,centreY-fontSize/2); if (N < maxN) From b128d512a403746051e1d7168d2db62e39b05634 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 14:21:02 +0100 Subject: [PATCH 320/342] choozi - Do not keep backlight on --- apps/choozi/appb2.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/choozi/appb2.js b/apps/choozi/appb2.js index 0ed4af25d..20fbfb18a 100644 --- a/apps/choozi/appb2.js +++ b/apps/choozi/appb2.js @@ -187,7 +187,6 @@ function readN() { } shuffle(colours); // is this really best? -Bangle.setLCDTimeout(0); // keep screen on readN(); drawN(); From bca6722a1be92d2bb7b17a755fa12b4ed110b31e Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 14:23:16 +0100 Subject: [PATCH 321/342] choozi - Better colors for B2 and prefer solid colors --- apps/choozi/appb2.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/choozi/appb2.js b/apps/choozi/appb2.js index 20fbfb18a..f60c16300 100644 --- a/apps/choozi/appb2.js +++ b/apps/choozi/appb2.js @@ -4,7 +4,8 @@ * James Stanley 2021 */ -var colours = ['#ff0000', '#ff8080', '#00ff00', '#80ff80', '#0000ff', '#8080ff', '#ffff00', '#00ffff', '#ff00ff', '#ff8000', '#ff0080', '#8000ff', '#0080ff']; +var colours = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff', '#ffffff']; +var colours2 = ['#808080', '#800080', '#808000', '#008080', '#ff4040', '#40ff40', '#4040ff']; var stepAngle = 0.18; // radians - resolution of polygon var gapAngle = 0.035; // radians - gap between segments @@ -32,12 +33,11 @@ var radians = 2*Math.PI; // radians per circle var defaultN = 3; // default value for N var minN = 2; -var maxN = colours.length; var N; var arclen; // https://www.frankmitchell.org/2015/01/fisher-yates/ -function shuffle (array) { +function shuffle(array) { var i = 0 , j = 0 , temp = null; @@ -187,6 +187,10 @@ function readN() { } shuffle(colours); // is this really best? +shuffle(colours2); +colours=colours.concat(colours2); +var maxN = colours.length; + readN(); drawN(); From 7c8d941e69448cc5a0f8cce7369fdb58bfd2863f Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 15:42:35 +0100 Subject: [PATCH 322/342] choozi - Recombine code for B1/B2 and use setUI --- apps/choozi/README.md | 9 +- apps/choozi/app.js | 52 +++++----- apps/choozi/appb2.js | 211 -------------------------------------- apps/choozi/metadata.json | 3 +- 4 files changed, 35 insertions(+), 240 deletions(-) delete mode 100644 apps/choozi/appb2.js diff --git a/apps/choozi/README.md b/apps/choozi/README.md index f1e4255bc..8d0aa97f4 100644 --- a/apps/choozi/README.md +++ b/apps/choozi/README.md @@ -11,16 +11,21 @@ the players seated in a circle, set the number of segments equal to the number of players, ensure that each person knows which colour represents them, and then choose a segment. After a short animation, the chosen segment will fill the screen. -You can use Choozi to randomly select an element from any set with 2 to 13 members, +You can use Choozi to randomly select an element from any set with 2 to 14 members, as long as you can define a bijection between members of the set and coloured segments on the Bangle.js display. -## Controls +## Controls Bangle 1 BTN1: increase the number of segments BTN2: choose a segment at random BTN3: decrease the number of segments +## Controls Bangle 2 + +Swipe up/down: increase/decrease the number of segments +BTN1 or tap: choose a segment at random + ## Creator James Stanley diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 1a5b2f17e..8ba040aab 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -5,14 +5,15 @@ * James Stanley 2021 */ -var colours = ['#ff0000', '#ff8080', '#00ff00', '#80ff80', '#0000ff', '#8080ff', '#ffff00', '#00ffff', '#ff00ff', '#ff8000', '#ff0080', '#8000ff', '#0080ff']; +var colours = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff', '#ffffff']; +var colours2 = ['#808080', '#800080', '#808000', '#008080', '#ff4040', '#40ff40', '#4040ff']; var stepAngle = 0.18; // radians - resolution of polygon var gapAngle = 0.035; // radians - gap between segments -var perimMin = 110; // px - min. radius of perimeter -var perimMax = 120; // px - max. radius of perimeter +var perimMin = g.getWidth()*0.44; // px - min. radius of perimeter +var perimMax = g.getWidth()*0.49; // px - max. radius of perimeter -var segmentMax = 106; // px - max radius of filled-in segment +var segmentMax = g.getWidth()*0.42; // px - max radius of filled-in segment var segmentStep = 5; // px - step size of segment fill animation var circleStep = 4; // px - step size of circle fill animation @@ -22,10 +23,10 @@ var minSpeed = 0.001; // rad/sec var animStartSteps = 300; // how many steps before it can start slowing? var accel = 0.0002; // rad/sec/sec - acc-/deceleration rate var ballSize = 3; // px - ball radius -var ballTrack = 100; // px - radius of ball path +var ballTrack = g.getWidth()*0.40; // px - radius of ball path -var centreX = 120; // px - centre of screen -var centreY = 120; // px - centre of screen +var centreX = g.getWidth()*0.5; // px - centre of screen +var centreY = g.getWidth()*0.5; // px - centre of screen var fontSize = 50; // px @@ -33,7 +34,6 @@ var radians = 2*Math.PI; // radians per circle var defaultN = 3; // default value for N var minN = 2; -var maxN = colours.length; var N; var arclen; @@ -82,6 +82,7 @@ function arc(minR, maxR, minAngle, maxAngle) { // draw the arc segments around the perimeter function drawPerimeter() { + g.setBgColor('#000000'); g.clear(); for (var i = 0; i < N; i++) { g.setColor(colours[i%colours.length]); @@ -131,6 +132,7 @@ function animateChoice(target) { g.fillCircle(x, y, ballSize); oldx=x; oldy=y; + if (process.env.HWVERSION == 2) g.flip(); } } @@ -186,23 +188,23 @@ function readN() { } shuffle(colours); // is this really best? -Bangle.setLCDMode("direct"); -Bangle.setLCDTimeout(0); // keep screen on +shuffle(colours2); +colours=colours.concat(colours2); +var maxN = colours.length; +if (process.env.HWVERSION == 1){ + Bangle.setLCDMode("direct"); + Bangle.setLCDTimeout(0); // keep screen on +} readN(); drawN(); -setWatch(() => { - setN(N+1); - drawN(); -}, BTN1, {repeat:true}); - -setWatch(() => { - writeN(); - drawPerimeter(); - choose(); -}, BTN2, {repeat:true}); - -setWatch(() => { - setN(N-1); - drawN(); -}, BTN3, {repeat:true}); +Bangle.setUI("updown", (v)=>{ + if (!v){ + writeN(); + drawPerimeter(); + choose(); + } else { + setN(N+v); + drawN(); + } +}); diff --git a/apps/choozi/appb2.js b/apps/choozi/appb2.js deleted file mode 100644 index f60c16300..000000000 --- a/apps/choozi/appb2.js +++ /dev/null @@ -1,211 +0,0 @@ -/* Choozi - Choose people or things at random using Bangle.js. - * Inspired by the "Chwazi" Android app - * - * James Stanley 2021 - */ - -var colours = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff', '#ffffff']; -var colours2 = ['#808080', '#800080', '#808000', '#008080', '#ff4040', '#40ff40', '#4040ff']; - -var stepAngle = 0.18; // radians - resolution of polygon -var gapAngle = 0.035; // radians - gap between segments -var perimMin = 80; // px - min. radius of perimeter -var perimMax = 87; // px - max. radius of perimeter - -var segmentMax = 70; // px - max radius of filled-in segment -var segmentStep = 5; // px - step size of segment fill animation -var circleStep = 4; // px - step size of circle fill animation - -// rolling ball animation: -var maxSpeed = 0.08; // rad/sec -var minSpeed = 0.001; // rad/sec -var animStartSteps = 300; // how many steps before it can start slowing? -var accel = 0.0002; // rad/sec/sec - acc-/deceleration rate -var ballSize = 3; // px - ball radius -var ballTrack = 75; // px - radius of ball path - -var centreX = 88; // px - centre of screen -var centreY = 88; // px - centre of screen - -var fontSize = 50; // px - -var radians = 2*Math.PI; // radians per circle - -var defaultN = 3; // default value for N -var minN = 2; -var N; -var arclen; - -// https://www.frankmitchell.org/2015/01/fisher-yates/ -function shuffle(array) { - var i = 0 - , j = 0 - , temp = null; - - for (i = array.length - 1; i > 0; i -= 1) { - j = Math.floor(Math.random() * (i + 1)); - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } -} - -// draw an arc between radii minR and maxR, and between -// angles minAngle and maxAngle -function arc(minR, maxR, minAngle, maxAngle) { - var step = stepAngle; - var angle = minAngle; - var inside = []; - var outside = []; - var c, s; - while (angle < maxAngle) { - c = Math.cos(angle); - s = Math.sin(angle); - inside.push(centreX+c*minR); // x - inside.push(centreY+s*minR); // y - // outside coordinates are built up in reverse order - outside.unshift(centreY+s*maxR); // y - outside.unshift(centreX+c*maxR); // x - angle += step; - } - c = Math.cos(maxAngle); - s = Math.sin(maxAngle); - inside.push(centreX+c*minR); - inside.push(centreY+s*minR); - outside.unshift(centreY+s*maxR); - outside.unshift(centreX+c*maxR); - - var vertices = inside.concat(outside); - g.fillPoly(vertices, true); -} - -// draw the arc segments around the perimeter -function drawPerimeter() { - g.setBgColor('#000000'); - g.clear(); - for (var i = 0; i < N; i++) { - g.setColor(colours[i%colours.length]); - var minAngle = (i/N)*radians; - arc(perimMin,perimMax,minAngle,minAngle+arclen); - } -} - -// animate a ball rolling around and settling at "target" radians -function animateChoice(target) { - var angle = 0; - var speed = 0; - var oldx = -10; - var oldy = -10; - var decelFromAngle = -1; - var allowDecel = false; - for (var i = 0; true; i++) { - angle = angle + speed; - if (angle > radians) angle -= radians; - if (i < animStartSteps || (speed < maxSpeed && !allowDecel)) { - speed = speed + accel; - if (speed > maxSpeed) { - speed = maxSpeed; - /* when we reach max speed, we know how long it takes - * to accelerate, and therefore how long to decelerate, so - * we can work out what angle to start decelerating from */ - if (decelFromAngle < 0) { - decelFromAngle = target-angle; - while (decelFromAngle < 0) decelFromAngle += radians; - while (decelFromAngle > radians) decelFromAngle -= radians; - } - } - } else { - if (!allowDecel && (angle < decelFromAngle) && (angle+speed >= decelFromAngle)) allowDecel = true; - if (allowDecel) speed = speed - accel; - if (speed < minSpeed) speed = minSpeed; - if (speed == minSpeed && angle < target && angle+speed >= target) return; - } - - var r = i/2; - if (r > ballTrack) r = ballTrack; - var x = centreX+Math.cos(angle)*r; - var y = centreY+Math.sin(angle)*r; - g.setColor('#000000'); - g.fillCircle(oldx,oldy,ballSize+1); - g.setColor('#ffffff'); - g.fillCircle(x, y, ballSize); - oldx=x; - oldy=y; - g.flip(); - } -} - -// choose a winning segment and animate its selection -function choose() { - var chosen = Math.floor(Math.random()*N); - var minAngle = (chosen/N)*radians; - var maxAngle = minAngle + arclen; - animateChoice((minAngle+maxAngle)/2); - g.setColor(colours[chosen%colours.length]); - for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep) - arc(i, perimMax, minAngle, maxAngle); - arc(0, perimMax, minAngle, maxAngle); - for (var r = 1; r < segmentMax; r += circleStep) - g.fillCircle(centreX,centreY,r); - g.fillCircle(centreX,centreY,segmentMax); -} - -// draw the current value of N in the middle of the screen, with -// up/down arrows -function drawN() { - g.setColor('#ffffff'); - g.setFont("Vector",fontSize); - g.drawString(N,centreX-g.stringWidth(N)/2+4,centreY-fontSize/2); - if (N < maxN) - g.fillPoly([centreX-6,centreY-fontSize/2-7, centreX+6,centreY-fontSize/2-7, centreX, centreY-fontSize/2-14]); - if (N > minN) - g.fillPoly([centreX-6,centreY+fontSize/2+5, centreX+6,centreY+fontSize/2+5, centreX, centreY+fontSize/2+12]); -} - -// update number of segments, with min/max limit, "arclen" update, -// and screen reset -function setN(n) { - N = n; - if (N < minN) N = minN; - if (N > maxN) N = maxN; - arclen = radians/N - gapAngle; - drawPerimeter(); -} - -// save N to choozi.txt -function writeN() { - var file = require("Storage").open("choozi.txt","w"); - file.write(N); -} - -// load N from choozi.txt -function readN() { - var file = require("Storage").open("choozi.txt","r"); - var n = file.readLine(); - if (n !== undefined) setN(parseInt(n)); - else setN(defaultN); -} - -shuffle(colours); // is this really best? -shuffle(colours2); -colours=colours.concat(colours2); -var maxN = colours.length; - -readN(); -drawN(); - -setWatch(() => { - writeN(); - drawPerimeter(); - choose(); -}, BTN1, {repeat:true}); - -Bangle.on('touch', function(zone,e) { - if(e.x>+88){ - setN(N-1); - drawN(); - }else{ - setN(N+1); - drawN(); - } -}); diff --git a/apps/choozi/metadata.json b/apps/choozi/metadata.json index 79af76fa2..f0d309560 100644 --- a/apps/choozi/metadata.json +++ b/apps/choozi/metadata.json @@ -10,8 +10,7 @@ "allow_emulator": true, "screenshots": [{"url":"bangle1-choozi-screenshot1.png"},{"url":"bangle1-choozi-screenshot2.png"}], "storage": [ - {"name":"choozi.app.js","url":"app.js","supports": ["BANGLEJS"]}, - {"name":"choozi.app.js","url":"appb2.js","supports": ["BANGLEJS2"]}, + {"name":"choozi.app.js","url":"app.js"}, {"name":"choozi.img","url":"app-icon.js","evaluate":true} ] } From 4c16e3163141d98f3cec8baeef1b23d168cb4978 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 16:38:07 +0100 Subject: [PATCH 323/342] choozi - Better colors --- apps/choozi/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 8ba040aab..ff8b18e91 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -6,7 +6,7 @@ */ var colours = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff', '#ffffff']; -var colours2 = ['#808080', '#800080', '#808000', '#008080', '#ff4040', '#40ff40', '#4040ff']; +var colours2 = ['#808080', '#404040', '#000040', '#004000', '#400000', '#ff8000', '#804000', '#4000c0']; var stepAngle = 0.18; // radians - resolution of polygon var gapAngle = 0.035; // radians - gap between segments From 5307fc83c7adba71a3c1f97162612c94f42e6638 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 16:38:49 +0100 Subject: [PATCH 324/342] choozi - Bigger segments to make distiguishing dithered colors easier --- apps/choozi/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index ff8b18e91..18d91cd34 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -10,10 +10,10 @@ var colours2 = ['#808080', '#404040', '#000040', '#004000', '#400000', '#ff8000' var stepAngle = 0.18; // radians - resolution of polygon var gapAngle = 0.035; // radians - gap between segments -var perimMin = g.getWidth()*0.44; // px - min. radius of perimeter +var perimMin = g.getWidth()*0.40; // px - min. radius of perimeter var perimMax = g.getWidth()*0.49; // px - max. radius of perimeter -var segmentMax = g.getWidth()*0.42; // px - max radius of filled-in segment +var segmentMax = g.getWidth()*0.38; // px - max radius of filled-in segment var segmentStep = 5; // px - step size of segment fill animation var circleStep = 4; // px - step size of circle fill animation @@ -23,7 +23,7 @@ var minSpeed = 0.001; // rad/sec var animStartSteps = 300; // how many steps before it can start slowing? var accel = 0.0002; // rad/sec/sec - acc-/deceleration rate var ballSize = 3; // px - ball radius -var ballTrack = g.getWidth()*0.40; // px - radius of ball path +var ballTrack = perimMin - ballSize*2; // px - radius of ball path var centreX = g.getWidth()*0.5; // px - centre of screen var centreY = g.getWidth()*0.5; // px - centre of screen From f01a673effd8e53879e51108440a674f1176a0f8 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 16:39:11 +0100 Subject: [PATCH 325/342] choozi - Fix direction of UI --- apps/choozi/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 18d91cd34..5370da714 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -204,7 +204,7 @@ Bangle.setUI("updown", (v)=>{ drawPerimeter(); choose(); } else { - setN(N+v); + setN(N-v); drawN(); } }); From 7da2e3857e9aea84f9adfcad1ff429abe4bf73ba Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 16:41:57 +0100 Subject: [PATCH 326/342] choozi - Update screenshots --- apps/choozi/bangle1-choozi-screenshot1.png | Bin 3893 -> 3859 bytes apps/choozi/bangle1-choozi-screenshot2.png | Bin 3822 -> 3718 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/choozi/bangle1-choozi-screenshot1.png b/apps/choozi/bangle1-choozi-screenshot1.png index 104024958033693784f6457771d2343d0eb5340c..ee422ed10d90832816e05b4b34eb4aaffa3f8a40 100644 GIT binary patch delta 3848 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 E9|_G-F#rGn literal 3893 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 eO6=JFMh5d6vj diff --git a/apps/choozi/bangle1-choozi-screenshot2.png b/apps/choozi/bangle1-choozi-screenshot2.png index f3b6868bf9587e9939785ea901c57213dad56281..20edf4c7860746c8005d5e41793174a324cde94f 100644 GIT binary patch delta 3705 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 Jy#?*s{{cC|)F}V} From f8d241bac4dab65f899e8749d186bee005b6fbfc Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 20:08:01 +0100 Subject: [PATCH 327/342] choozi - Prefer undithered colors only on B2 --- apps/choozi/app.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 5370da714..4c3f47071 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -187,9 +187,16 @@ function readN() { else setN(defaultN); } -shuffle(colours); // is this really best? -shuffle(colours2); -colours=colours.concat(colours2); + +if (process.env.HWVERSION == 1){ + colours=colours.concat(colours2); + shuffle(colours); +} else { + shuffle(colours); + shuffle(colours2); + colours=colours.concat(colours2); +} + var maxN = colours.length; if (process.env.HWVERSION == 1){ Bangle.setLCDMode("direct"); From f467227d8d37b317d80b7bebd567cece7888ffb8 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 20:32:53 +0100 Subject: [PATCH 328/342] choozi - Extract drawing of arcs into lib for others to use --- apps/choozi/app.js | 37 ++++--------------------------------- modules/graphics_utils.js | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 33 deletions(-) create mode 100644 modules/graphics_utils.js diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 4c3f47071..725c4969a 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -4,7 +4,7 @@ * * James Stanley 2021 */ - +const GU = require("graphics_utils"); var colours = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff', '#ffffff']; var colours2 = ['#808080', '#404040', '#000040', '#004000', '#400000', '#ff8000', '#804000', '#4000c0']; @@ -51,35 +51,6 @@ function shuffle (array) { } } -// draw an arc between radii minR and maxR, and between -// angles minAngle and maxAngle -function arc(minR, maxR, minAngle, maxAngle) { - var step = stepAngle; - var angle = minAngle; - var inside = []; - var outside = []; - var c, s; - while (angle < maxAngle) { - c = Math.cos(angle); - s = Math.sin(angle); - inside.push(centreX+c*minR); // x - inside.push(centreY+s*minR); // y - // outside coordinates are built up in reverse order - outside.unshift(centreY+s*maxR); // y - outside.unshift(centreX+c*maxR); // x - angle += step; - } - c = Math.cos(maxAngle); - s = Math.sin(maxAngle); - inside.push(centreX+c*minR); - inside.push(centreY+s*minR); - outside.unshift(centreY+s*maxR); - outside.unshift(centreX+c*maxR); - - var vertices = inside.concat(outside); - g.fillPoly(vertices, true); -} - // draw the arc segments around the perimeter function drawPerimeter() { g.setBgColor('#000000'); @@ -87,7 +58,7 @@ function drawPerimeter() { for (var i = 0; i < N; i++) { g.setColor(colours[i%colours.length]); var minAngle = (i/N)*radians; - arc(perimMin,perimMax,minAngle,minAngle+arclen); + GU.drawArc(g, perimMin,perimMax,minAngle,minAngle+arclen); } } @@ -144,8 +115,8 @@ function choose() { animateChoice((minAngle+maxAngle)/2); g.setColor(colours[chosen%colours.length]); for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep) - arc(i, perimMax, minAngle, maxAngle); - arc(0, perimMax, minAngle, maxAngle); + GU.drawArc(g, i, perimMax, minAngle, maxAngle); + GU.drawArc(g, 0, perimMax, minAngle, maxAngle); for (var r = 1; r < segmentMax; r += circleStep) g.fillCircle(centreX,centreY,r); g.fillCircle(centreX,centreY,segmentMax); diff --git a/modules/graphics_utils.js b/modules/graphics_utils.js new file mode 100644 index 000000000..8e4b893ba --- /dev/null +++ b/modules/graphics_utils.js @@ -0,0 +1,27 @@ +// draw an arc between radii minR and maxR, and between angles minAngle and maxAngle +exports.drawArc = function(graphics, minR, maxR, minAngle, maxAngle) { + var step = stepAngle; + var angle = minAngle; + var inside = []; + var outside = []; + var c, s; + while (angle < maxAngle) { + c = Math.cos(angle); + s = Math.sin(angle); + inside.push(centreX+c*minR); // x + inside.push(centreY+s*minR); // y + // outside coordinates are built up in reverse order + outside.unshift(centreY+s*maxR); // y + outside.unshift(centreX+c*maxR); // x + angle += step; + } + c = Math.cos(maxAngle); + s = Math.sin(maxAngle); + inside.push(centreX+c*minR); + inside.push(centreY+s*minR); + outside.unshift(centreY+s*maxR); + outside.unshift(centreX+c*maxR); + + var vertices = inside.concat(outside); + graphics.fillPoly(vertices, true); +} \ No newline at end of file From 6539dc48b1985f4cafbe39c00df97f194e458ad6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 21:05:24 +0100 Subject: [PATCH 329/342] choozi - Save into normal file instead of storage file --- apps/choozi/app.js | 11 ++++------- apps/choozi/metadata.json | 3 +++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 725c4969a..9842c8d5a 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -144,21 +144,18 @@ function setN(n) { drawPerimeter(); } -// save N to choozi.txt +// save N to choozi.save function writeN() { - var file = require("Storage").open("choozi.txt","w"); - file.write(N); + require("Storage").write("choozi.save","" + N); } -// load N from choozi.txt +// load N from choozi.save function readN() { - var file = require("Storage").open("choozi.txt","r"); - var n = file.readLine(); + var n = require("Storage").read("choozi.save"); if (n !== undefined) setN(parseInt(n)); else setN(defaultN); } - if (process.env.HWVERSION == 1){ colours=colours.concat(colours2); shuffle(colours); diff --git a/apps/choozi/metadata.json b/apps/choozi/metadata.json index f0d309560..d997534e8 100644 --- a/apps/choozi/metadata.json +++ b/apps/choozi/metadata.json @@ -12,5 +12,8 @@ "storage": [ {"name":"choozi.app.js","url":"app.js"}, {"name":"choozi.img","url":"app-icon.js","evaluate":true} + ], + "data": [ + {"name":"choozi.save"} ] } From 6204206df321fbfe268379acc34c630ed7e5ba1d Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 21:11:59 +0100 Subject: [PATCH 330/342] choozi - Only write if actually changed --- apps/choozi/app.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 9842c8d5a..478cef009 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -146,14 +146,19 @@ function setN(n) { // save N to choozi.save function writeN() { - require("Storage").write("choozi.save","" + N); + var savedN = read(); + if (savedN != N) require("Storage").write("choozi.save","" + N); +} + +function read(){ + var n = require("Storage").read("choozi.save"); + if (n !== undefined) return parseInt(n); + return defaultN; } // load N from choozi.save function readN() { - var n = require("Storage").read("choozi.save"); - if (n !== undefined) setN(parseInt(n)); - else setN(defaultN); + setN(read()); } if (process.env.HWVERSION == 1){ From c0be24a5520a444c229d9ab2ffc031b48b8fe2d9 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 21:27:33 +0100 Subject: [PATCH 331/342] choozi - New icons --- apps/choozi/app-icon.js | 2 +- apps/choozi/app.png | Bin 7307 -> 551 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/choozi/app-icon.js b/apps/choozi/app-icon.js index 51b3bead3..560286098 100644 --- a/apps/choozi/app-icon.js +++ b/apps/choozi/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwggLIrnM4uqAAIhPgvMAAPFzIABzWgCxkMCweqC4QABDBYtC5QVFDBoWCCo5KLOQIWKDARFICxhJIFwOpC5owFFyAwGUYIuOGAwuRC4guSJAgXBCyIwDIyQXF5IXSzJeVMAReUAAOQhheTMAVcC6yOUC4aOUC7GZUyoXXzWqhQXVxGqC9mYC7OqC9eoxEKC6uBC6uIwAXBPCSmBwEAC6Z2BiAXBJCR2BgEAjQXSlGBC4JgSLwYABJCJGBLwJIDGB+IIwRIDGByNBIwZIDGBhdBRoQwSLoIuFGAYYKCwIuGGAgYI1QWBRgYYJMYmaFoSMEAAyrBAAgVCCxgYGjAWQAAMBC4UILZQA==")) +require("heatshrink").decompress(atob("mEwwcH/4AW/u27dt2wQL/YOBCIXbv4QI+AODAQVsh4RHwEbCI0LCI9gCIOANAXbsFbG437tkDPg1btoRFFoILBgmSpMggECHQO/CAf2CIVJkgRBAQIjC24RFsECCItIgIRFMYMAiQRFpMAlqmDVwPYgAOEAQUggu274RD4BWCCIskCIPbCIPt20ABwwCCwARFgIRJyEWCIVt2EJCJi2BCJmSUgIRCwARNt/7CIIOICI1sWAwCFoFbCOtt8EACJsAgARR8hwBCJlJk4RlgARQAgIRKDwMn/gRBdJgRPyARBn4RBpARLiQRB/4RBgIRJwAREpIRLAYP///ypMgCJMACI0ECI4JCp4RB/wZECIsAAYN/CIP/5JPDCIhjDCIraHTIWTCAX//K7DCI+fCIf/EZA1CCAn//ipCLIsBk4RF/5ZHCIIQG//wPo8vCI//6QRFpYQIAAPpCIeXCBQAC/VfBI4=")) \ No newline at end of file diff --git a/apps/choozi/app.png b/apps/choozi/app.png index 99c9fa07a55195ec45adbc70cc6e3521cdccaeda..50f09f164b2331133498bd8a3b762ccc09bea20f 100644 GIT binary patch delta 527 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 Date: Sun, 18 Dec 2022 21:46:05 +0100 Subject: [PATCH 332/342] choozi - Fix selection animation on B2 --- apps/choozi/app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 478cef009..577ef606a 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -114,11 +114,15 @@ function choose() { var maxAngle = minAngle + arclen; animateChoice((minAngle+maxAngle)/2); g.setColor(colours[chosen%colours.length]); - for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep) + for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep){ GU.drawArc(g, i, perimMax, minAngle, maxAngle); + if (process.env.HWVERSION == 2) g.flip(); + } GU.drawArc(g, 0, perimMax, minAngle, maxAngle); - for (var r = 1; r < segmentMax; r += circleStep) + for (var r = 1; r < segmentMax; r += circleStep){ g.fillCircle(centreX,centreY,r); + if (process.env.HWVERSION == 2) g.flip(); + } g.fillCircle(centreX,centreY,segmentMax); } From 68523875a8e0c1476bf65d5c3832fc6449059641 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 18 Dec 2022 22:17:23 +0100 Subject: [PATCH 333/342] choozi - Bump version --- apps/choozi/ChangeLog | 6 ++++++ apps/choozi/metadata.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/choozi/ChangeLog b/apps/choozi/ChangeLog index 03f7ef832..35adc7430 100644 --- a/apps/choozi/ChangeLog +++ b/apps/choozi/ChangeLog @@ -1,3 +1,9 @@ 0.01: New App! 0.02: Support Bangle.js 2 0.03: Fix bug for Bangle.js 2 where g.flip was not being called. +0.04: Combine code for both apps + Better colors for Bangle.js 2 + Fix selection animation for Bangle.js 2 + New icon + Slightly wider arc segments for better visibility + Extract arc drawing code in library diff --git a/apps/choozi/metadata.json b/apps/choozi/metadata.json index d997534e8..c42abe079 100644 --- a/apps/choozi/metadata.json +++ b/apps/choozi/metadata.json @@ -1,7 +1,7 @@ { "id": "choozi", "name": "Choozi", - "version": "0.03", + "version": "0.04", "description": "Choose people or things at random using Bangle.js.", "icon": "app.png", "tags": "tool", From 285b03dbb9fc632ffb35116b001855216baa29eb Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 19 Dec 2022 09:18:45 +0000 Subject: [PATCH 334/342] Ensure that widgets_utils swipeOn falls back on Bangle.js 1 - fix #2414 --- modules/widget_utils.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/widget_utils.js b/modules/widget_utils.js index 33fd303f9..154a95f68 100644 --- a/modules/widget_utils.js +++ b/modules/widget_utils.js @@ -53,8 +53,14 @@ exports.cleanup = function() { back onscreen with a downwards swipe. Use .show to undo. First parameter controls automatic hiding time, 0 equals not hiding at all. Default value is 2000ms until hiding. -Bangle.js 2 only at the moment. */ +Bangle.js 2 only at the moment. On Bangle.js 1 widgets will be hidden permanently. + +Note: On Bangle.js 1 is is possible to draw widgets in an offscreen area of the LCD +and use Bangle.setLCDOffset. However we can't detect a downward swipe so how to +actually make this work needs some thought. +*/ exports.swipeOn = function(autohide) { + if (process.env.HWVERSION!==2) return exports.hide(); exports.cleanup(); if (!global.WIDGETS) return; exports.autohide=autohide===undefined?2000:autohide; From 5b6eed5f9ce03837d854bcec28916b145c2e64c4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 19 Dec 2022 10:17:08 +0000 Subject: [PATCH 335/342] 0.04: Now shows message icons again (#2416) --- apps/widmessages/ChangeLog | 3 ++- apps/widmessages/metadata.json | 2 +- apps/widmessages/widget.js | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/widmessages/ChangeLog b/apps/widmessages/ChangeLog index 709fb19c3..348d49528 100644 --- a/apps/widmessages/ChangeLog +++ b/apps/widmessages/ChangeLog @@ -1,4 +1,5 @@ 0.01: Moved messages widget into standalone widget app 0.02: Fix 'srcs' being defined in global scope Remove library stub -0.03: Fix messages not showing if UI auto-open is disabled \ No newline at end of file +0.03: Fix messages not showing if UI auto-open is disabled +0.04: Now shows message icons again (#2416) diff --git a/apps/widmessages/metadata.json b/apps/widmessages/metadata.json index 47a1151da..0e399f71f 100644 --- a/apps/widmessages/metadata.json +++ b/apps/widmessages/metadata.json @@ -1,7 +1,7 @@ { "id": "widmessages", "name": "Message Widget", - "version": "0.03", + "version": "0.04", "description": "Widget showing new messages", "icon": "app.png", "type": "widget", diff --git a/apps/widmessages/widget.js b/apps/widmessages/widget.js index bbf980fd3..44f525ec8 100644 --- a/apps/widmessages/widget.js +++ b/apps/widmessages/widget.js @@ -22,10 +22,9 @@ let settings = Object.assign({flash: true, maxMessages: 3}, require("Storage").readJSON("messages.settings.json", true) || {}); if (recall!==true || settings.flash) { const msgsShown = E.clip(this.srcs.length, 0, settings.maxMessages); - srcs = Object.keys(this.srcs); g.reset().clearRect(this.x, this.y, this.x+this.width, this.y+23); for(let i = 0; i Date: Mon, 19 Dec 2022 10:26:37 +0000 Subject: [PATCH 336/342] 0.08: Don't completely remove the lock widget when screen unlocked (use 1px) to ensure appRect/drawWidgets still thinks there are widgets (fix #2409, #2413) --- apps/widlock/ChangeLog | 1 + apps/widlock/metadata.json | 2 +- apps/widlock/widget.js | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/widlock/ChangeLog b/apps/widlock/ChangeLog index 665750150..abceba48e 100644 --- a/apps/widlock/ChangeLog +++ b/apps/widlock/ChangeLog @@ -5,3 +5,4 @@ 0.05: Set sortorder to -10 so that others can take -1 etc 0.06: Set sortorder to -10 in widget code 0.07: Remove check for .isLocked (extremely old firmwares), speed up widget loading +0.08: Don't completely remove the lock widget when screen unlocked (use 1px) to ensure appRect/drawWidgets still thinks there are widgets diff --git a/apps/widlock/metadata.json b/apps/widlock/metadata.json index db532851a..509a5b7a5 100644 --- a/apps/widlock/metadata.json +++ b/apps/widlock/metadata.json @@ -1,7 +1,7 @@ { "id": "widlock", "name": "Lock Widget", - "version": "0.07", + "version": "0.08", "description": "On devices with always-on display (Bangle.js 2) this displays lock icon whenever the display is locked", "icon": "widget.png", "type": "widget", diff --git a/apps/widlock/widget.js b/apps/widlock/widget.js index abcedde20..b5787e09d 100644 --- a/apps/widlock/widget.js +++ b/apps/widlock/widget.js @@ -1,8 +1,8 @@ Bangle.on("lock", function() { - WIDGETS["lock"].width = Bangle.isLocked()?16:0; + WIDGETS["lock"].width = Bangle.isLocked()?16:1; Bangle.drawWidgets(); }); -WIDGETS["lock"]={area:"tl",sortorder:10,width:Bangle.isLocked()?16:0,draw:function(w) { +WIDGETS["lock"]={area:"tl",sortorder:10,width:Bangle.isLocked()?16:1,draw:function(w) { if (Bangle.isLocked()) g.reset().drawImage(atob("DhABH+D/wwMMDDAwwMf/v//4f+H/h/8//P/z///f/g=="), w.x+1, w.y+4); }}; From d8543f4d41cbc991aa72b27a3430e19a0f240da1 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 19 Dec 2022 12:52:33 +0100 Subject: [PATCH 337/342] choozi - Fix library not working standalone --- apps/choozi/app.js | 6 +++--- modules/graphics_utils.js | 32 ++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 577ef606a..517628470 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -58,7 +58,7 @@ function drawPerimeter() { for (var i = 0; i < N; i++) { g.setColor(colours[i%colours.length]); var minAngle = (i/N)*radians; - GU.drawArc(g, perimMin,perimMax,minAngle,minAngle+arclen); + GU.drawArc(g, perimMin,perimMax,minAngle,minAngle+arclen, centreX, centreY, stepAngle); } } @@ -115,10 +115,10 @@ function choose() { animateChoice((minAngle+maxAngle)/2); g.setColor(colours[chosen%colours.length]); for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep){ - GU.drawArc(g, i, perimMax, minAngle, maxAngle); + GU.drawArc(g, i, perimMax, minAngle, maxAngle, centreX, centreY, stepAngle); if (process.env.HWVERSION == 2) g.flip(); } - GU.drawArc(g, 0, perimMax, minAngle, maxAngle); + GU.drawArc(g, 0, perimMax, minAngle, maxAngle, centreX, centreY, stepAngle); for (var r = 1; r < segmentMax; r += circleStep){ g.fillCircle(centreX,centreY,r); if (process.env.HWVERSION == 2) g.flip(); diff --git a/modules/graphics_utils.js b/modules/graphics_utils.js index 8e4b893ba..925502afb 100644 --- a/modules/graphics_utils.js +++ b/modules/graphics_utils.js @@ -1,6 +1,6 @@ -// draw an arc between radii minR and maxR, and between angles minAngle and maxAngle -exports.drawArc = function(graphics, minR, maxR, minAngle, maxAngle) { - var step = stepAngle; +// draw an arc between radii minR and maxR, and between angles minAngle and maxAngle, all angles are radians +exports.drawArc = function(graphics, minR, maxR, minAngle, maxAngle, X, Y, stepAngle) { + var step = stepAngle || 0.2; var angle = minAngle; var inside = []; var outside = []; @@ -8,20 +8,28 @@ exports.drawArc = function(graphics, minR, maxR, minAngle, maxAngle) { while (angle < maxAngle) { c = Math.cos(angle); s = Math.sin(angle); - inside.push(centreX+c*minR); // x - inside.push(centreY+s*minR); // y + inside.push(X+c*minR); // x + inside.push(Y+s*minR); // y // outside coordinates are built up in reverse order - outside.unshift(centreY+s*maxR); // y - outside.unshift(centreX+c*maxR); // x + outside.unshift(Y+s*maxR); // y + outside.unshift(X+c*maxR); // x angle += step; } c = Math.cos(maxAngle); s = Math.sin(maxAngle); - inside.push(centreX+c*minR); - inside.push(centreY+s*minR); - outside.unshift(centreY+s*maxR); - outside.unshift(centreX+c*maxR); - + inside.push(X+c*minR); + inside.push(Y+s*minR); + outside.unshift(Y+s*maxR); + outside.unshift(X+c*maxR); + var vertices = inside.concat(outside); graphics.fillPoly(vertices, true); +} + +exports.degreesToRadians = function(degrees){ + return Math.PI/180 * degrees; +} + +exports.radiansToDegrees = function(radians){ + return 180/Math.PI * degrees; } \ No newline at end of file From bc20ce3f5bd1e0fd02699e1d6b6458f5e5bad9c5 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 19 Dec 2022 12:53:01 +0100 Subject: [PATCH 338/342] choozi - Correct README file --- apps/choozi/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/choozi/README.md b/apps/choozi/README.md index 8d0aa97f4..ccaa97a27 100644 --- a/apps/choozi/README.md +++ b/apps/choozi/README.md @@ -11,7 +11,7 @@ the players seated in a circle, set the number of segments equal to the number of players, ensure that each person knows which colour represents them, and then choose a segment. After a short animation, the chosen segment will fill the screen. -You can use Choozi to randomly select an element from any set with 2 to 14 members, +You can use Choozi to randomly select an element from any set with 2 to 15 members, as long as you can define a bijection between members of the set and coloured segments on the Bangle.js display. From 36557e4f5ea5f721f450de7c71e56900ba72335c Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Mon, 19 Dec 2022 13:01:28 +0100 Subject: [PATCH 339/342] choozi - Rename drawArc to fillArc --- apps/choozi/app.js | 6 +++--- modules/graphics_utils.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/choozi/app.js b/apps/choozi/app.js index 517628470..b9f53bc89 100644 --- a/apps/choozi/app.js +++ b/apps/choozi/app.js @@ -58,7 +58,7 @@ function drawPerimeter() { for (var i = 0; i < N; i++) { g.setColor(colours[i%colours.length]); var minAngle = (i/N)*radians; - GU.drawArc(g, perimMin,perimMax,minAngle,minAngle+arclen, centreX, centreY, stepAngle); + GU.fillArc(g, centreX, centreY, perimMin,perimMax,minAngle,minAngle+arclen, stepAngle); } } @@ -115,10 +115,10 @@ function choose() { animateChoice((minAngle+maxAngle)/2); g.setColor(colours[chosen%colours.length]); for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep){ - GU.drawArc(g, i, perimMax, minAngle, maxAngle, centreX, centreY, stepAngle); + GU.fillArc(g, centreX, centreY, i, perimMax, minAngle, maxAngle, stepAngle); if (process.env.HWVERSION == 2) g.flip(); } - GU.drawArc(g, 0, perimMax, minAngle, maxAngle, centreX, centreY, stepAngle); + GU.fillArc(g, centreX, centreY, 0, perimMax, minAngle, maxAngle, stepAngle); for (var r = 1; r < segmentMax; r += circleStep){ g.fillCircle(centreX,centreY,r); if (process.env.HWVERSION == 2) g.flip(); diff --git a/modules/graphics_utils.js b/modules/graphics_utils.js index 925502afb..5c08188bc 100644 --- a/modules/graphics_utils.js +++ b/modules/graphics_utils.js @@ -1,5 +1,5 @@ -// draw an arc between radii minR and maxR, and between angles minAngle and maxAngle, all angles are radians -exports.drawArc = function(graphics, minR, maxR, minAngle, maxAngle, X, Y, stepAngle) { +// draw an arc between radii minR and maxR, and between angles minAngle and maxAngle centered at X,Y. All angles are radians. +exports.fillArc = function(graphics, X, Y, minR, maxR, minAngle, maxAngle, stepAngle) { var step = stepAngle || 0.2; var angle = minAngle; var inside = []; From 67e91e6873576afc00203ddecfd4690bb2cd1d39 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 19 Dec 2022 12:09:30 +0000 Subject: [PATCH 340/342] 0.08: Stability improvements - ensure we continue even if a flat string can't be allocated Stop ClockInfo text drawing outside the allocated area Fix https://github.com/espruino/BangleApps/issues/2394 --- apps/slopeclockpp/ChangeLog | 2 ++ apps/slopeclockpp/app.js | 26 +++++++++++++++----------- apps/slopeclockpp/metadata.json | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/slopeclockpp/ChangeLog b/apps/slopeclockpp/ChangeLog index eef1840ea..58299b236 100644 --- a/apps/slopeclockpp/ChangeLog +++ b/apps/slopeclockpp/ChangeLog @@ -7,3 +7,5 @@ 0.05: Images in clkinfo are optional now 0.06: Added support for locale based time 0.07: README file update as UI interaction was not easy to understand +0.08: Stability improvements - ensure we continue even if a flat string can't be allocated + Stop ClockInfo text drawing outside the allocated area diff --git a/apps/slopeclockpp/app.js b/apps/slopeclockpp/app.js index bf719344e..4535d7a79 100644 --- a/apps/slopeclockpp/app.js +++ b/apps/slopeclockpp/app.js @@ -1,7 +1,7 @@ Graphics.prototype.setFontPaytoneOne = function(scale) { // Actual height 71 (81 - 11) this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('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'))), + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAA//gAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/+AAAAAAAAAAAAAD//8AAAAAAAAAAAAAf//wAAAAAAAAAAAAB///gAAAAAAAAAAAAH//+AAAAAAAAAAAAAf//4AAAAAAAAAAAAD///gAAAAAAAAAAAAP//+AAAAAAAAAAAAA///4AAAAAAAAAAAAD///gAAAAAAAAAAAAH//+AAAAAAAAAAAAAf//4AAAAAAAAAAAAB///gAAAAAAAAAAAAD//8AAAAAAAAAAAAAP//wAAAAAAAAAAAAAf/+AAAAAAAAAAAAAA//wAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAD/wAAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAP//wAAAAAAAAAAAAD///AAAAAAAAAAAAB///8AAAAAAAAAAAAf///wAAAAAAAAAAAP////AAAAAAAAAAAD////8AAAAAAAAAAB/////wAAAAAAAAAA//////AAAAAAAAAAP/////8AAAAAAAAAH//////wAAAAAAAAB///////AAAAAAAAA///////8AAAAAAAAf///////wAAAAAAAH////////AAAAAAAD////////wAAAAAAA////////4AAAAAAAf///////+AAAAAAAP////////AAAAAAAD////////gAAAAAAB////////4AAAAAAAf///////8AAAAAAAB////////AAAAAAAAH///////gAAAAAAAAf//////wAAAAAAAAB//////8AAAAAAAAAH/////+AAAAAAAAAAf/////gAAAAAAAAAB/////wAAAAAAAAAAH////4AAAAAAAAAAAf///+AAAAAAAAAAAB////AAAAAAAAAAAAH///wAAAAAAAAAAAAf//4AAAAAAAAAAAAB//8AAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/gAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAfAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAB///4AAAAAAAAAAAA////8AAAAAAAAAAAP////+AAAAAAAAAAD/////+AAAAAAAAAA//////8AAAAAAAAAP//////8AAAAAAAAB///////4AAAAAAAAP///////4AAAAAAAB////////wAAAAAAAP////////gAAAAAAB/////////AAAAAAAP////////+AAAAAAB/////////4AAAAAAP/////////wAAAAAA//////////gAAAAAH/////////+AAAAAA//////////8AAAAAD//////////wAAAAAP//////////gAAAAB//////////+AAAAAH////gB////8AAAAA////gAAf///wAAAAD///wAAAP///AAAAAP//8AAAAP//8AAAAA///gAAAAf//4AAAAD//8AAAAA///gAAAAf//gAAAAB//+AAAAB//+AAAAAH//4AAAAH//4AAAAAP//gAAAAf//AAAAAA//+AAAAB//8AAAAAD//4AAAAH//wAAAAAP//gAAAAf//AAAAAA//+AAAAB//+AAAAAD//4AAAAH//4AAAAAf//gAAAAf//wAAAAD//+AAAAA///gAAAAf//4AAAAD///AAAAD///gAAAAP///AAAA///8AAAAA////AAAP///wAAAAB////gAH////AAAAAH//////////4AAAAAf//////////gAAAAA//////////+AAAAAD//////////wAAAAAH//////////AAAAAAf/////////4AAAAAA//////////AAAAAAB/////////8AAAAAAD/////////gAAAAAAP////////8AAAAAAAf////////gAAAAAAA////////8AAAAAAAB////////gAAAAAAAB///////8AAAAAAAAD///////gAAAAAAAAH//////4AAAAAAAAAH/////+AAAAAAAAAAH/////gAAAAAAAAAAH////4AAAAAAAAAAAD///8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAAAB//wAAAAAB//gAAAAH//AAAAAAH/+AAAAAf/8AAAAAAf/4AAAAB//wAAAAAB//AAAAAH//AAAAAAH/8AAAAAf/8AAAAAAf/wAAAAB//wAAAAAD//AAAAAH//AAAAAAP/////////8AAAAAA//////////wAAAAAH//////////AAAAAAf/////////8AAAAAB//////////wAAAAAP//////////AAAAAA//////////8AAAAAH//////////wAAAAAf//////////AAAAAD//////////8AAAAAP//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAD/AAAAAAB//wAAAAAP/gAAAAAP//AAAAAA//wAAAAB//8AAAAAH//4AAAAP//wAAAAAf//AAAAB///AAAAAD//8AAAAP//8AAAAAP//gAAAB///wAAAAA//+AAAAP///AAAAAH//wAAAB///8AAAAAf//AAAAP///wAAAAB//8AAAB////AAAAAH//wAAAP///8AAAAA//+AAAB////wAAAAD//4AAAP////AAAAAP//gAAB////8AAAAA//+AAAP////wAAAAD//4AAB/////AAAAAP//gAAP////8AAAAA//+AAD/////wAAAAD//4AAf/////AAAAAP//wAH/////8AAAAA///gA///9//wAAAAD///Af///3//AAAAAP///////+f/8AAAAA////////x//wAAAAD////////H//AAAAAP///////4f/8AAAAAf///////B//wAAAAB///////4H//AAAAAH///////gf/8AAAAAf//////8B//wAAAAA///////gH//AAAAAD//////8Af/8AAAAAH//////gB//wAAAAAf/////8AH//AAAAAA//////gAf/8AAAAAB/////8AB//wAAAAAD/////gAH//AAAAAAH////8AAf/8AAAAAAP////AAB//wAAAAAAf///wAAH//AAAAAAAf//+AAAf/8AAAAAAAf//AAAB//wAAAAAAAP/AAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAB+AAAAAAAAPAAAAAAP/gAAAAAAf8AAAAAA//wAAAAAf/wAAAAAH//gAAAAP//gAAAAAf/+AAAAAf/+AAAAAB//wAAAAB//4AAAAAP//AAAAAH//gAAAAA//8AAAAAP//AAAAAD//gB//AA//8AAAAAf/+AH/8AD//wAAAAB//4Af/wAP//AAAAAH//gB//AAf/+AAAAAf/8AH/8AB//4AAAAD//wAf/wAH//gAAAAP//AD//AAf/+AAAAA//8AP/8AB//4AAAAD//wA//wAH//gAAAAP//AD//AAf/+AAAAA//8AP/+AB//4AAAAD//wA//4AH//gAAAAP//AH//gAf/+AAAAA//8Af/+AB//4AAAAD//wD//8AH//gAAAAP//gP//wA//+AAAAA///B///gH//4AAAAD///f///g///gAAAAP//////////+AAAAA///////////4AAAAD///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAD//////////4AAAAAP//////////gAAAAA////+/////8AAAAAB////5/////wAAAAAD////H////+AAAAAAP///4P////4AAAAAAf///A/////AAAAAAA///4B////4AAAAAAA//+AD////AAAAAAAB//wAH///4AAAAAAAA/4AAP///AAAAAAAAAAAAAP//4AAAAAAAAAAAAAP/+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAH//wAAAAAAAAAAAAA///AAAAAAAAAAAAAP//8AAAAAAAAAAAAB///wAAAAAAAAAAAAP///AAAAAAAAAAAAD///8AAAAAAAAAAAAf///wAAAAAAAAAAAD////AAAAAAAAAAAA////8AAAAAAAAAAAH////wAAAAAAAAAAB/////AAAAAAAAAAAP////8AAAAAAAAAAB/////wAAAAAAAAAAf/////AAAAAAAAAAD///v/8AAAAAAAAAA///4//wAAAAAAAAAH///D//AAAAAAAAAA///wP/8AAAAAAAAAP//+A//wAAAAAAAAB///gD//AAAAAAAAAf//8AP/8AAAAAAAAD///AA//wAAAAAAAAf//4AD//AAAAAAAAH//+AAP/8AAAAAAAA///wAA//wAAAAAAAH//8AAD//AAAAAAAAf//////////wAAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAB///wAB/+AAAAAAf/////gA//8AAAAAP/////+AB//wAAAAA//////8AH//AAAAAD//////wAf/+AAAAAP//////AA//4AAAAA//////+AD//gAAAAD//////4AP//AAAAAP//////wA//8AAAAA///////AB//wAAAAD//////8AH//AAAAAP//////gAf/+AAAAA//////+AB//4AAAAD//////wAH//gAAAAP//////AAf/+AAAAA//8Af/4AB//4AAAAD//gD//gAH//gAAAAP/+AP/+AAf/+AAAAA//4A//wAB//4AAAAD//gH//AAH//gAAAAP/+Af/8AAf/+AAAAA//4B//4AD//4AAAAD//gH//gAP//gAAAAP/+Af//AB//+AAAAA//4B//+AP//4AAAAD//gH//+D///gAAAAP/+Af//////8AAAAA//4B///////wAAAAD//gH///////AAAAAP/+Af//////8AAAAA//4B///////gAAAAD//gD//////+AAAAAP/+AP//////wAAAAA//4A///////AAAAAD//gB//////4AAAAAP/+AH//////gAAAAA//4AP/////8AAAAAD//gAf/////gAAAAAP/+AA/////8AAAAAA//gAD/////gAAAAABgAAAD////8AAAAAAAAAAAH////gAAAAAAAAAAAP///8AAAAAAAAAAAAP///AAAAAAAAAAAAAP//wAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAB///4AAAAAAAAAAAA////+AAAAAAAAAAAf////+AAAAAAAAAAH/////+AAAAAAAAAB//////+AAAAAAAAAP//////8AAAAAAAAD///////4AAAAAAAAf///////wAAAAAAAD////////gAAAAAAAf////////AAAAAAAD////////+AAAAAAAf////////8AAAAAAD/////////4AAAAAAf/////////gAAAAAB//////////AAAAAAP/////////8AAAAAB//////////4AAAAAH//////////gAAAAA//////////+AAAAAD//////////8AAAAAP///4f+D///wAAAAB///8D/wB///AAAAAH///AP/AB//+AAAAAf//wB/8AD//4AAAAD//+AP/wAH//gAAAAP//wA/+AAP/+AAAAA//+AH/4AA//4AAAAD//4Af/gAD//gAAAAP//gB/+AAP/+AAAAA//8AP/4AA//4AAAAD//wA//wAD//gAAAAP//AD//AAP/+AAAAA//8AP/8AA//4AAAAD//wA//4AH//gAAAAP//AD//gA//+AAAAA//8AP//AH//4AAAAD//wA///B///AAAAAP//AD//////8AAAAAf/8AP//////wAAAAB//4A///////AAAAAH//gD//////4AAAAAf/+AP//////gAAAAA//8Af/////8AAAAAD//wB//////wAAAAAP//AH/////+AAAAAAf/+AP/////wAAAAAB//4Af/////AAAAAAD//wB/////4AAAAAAP/+AD/////AAAAAAAf/AAH////4AAAAAAB/gAAP////AAAAAAADwAAAf///4AAAAAAAAAAAA////AAAAAAAAAAAAA///wAAAAAAAAAAAAA//8AAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAA//4AAAAAAAAAAAAAD//gAAAAAAAAAAAAAP/+AAAAAAAcAAAAAA//4AAAAAAH4AAAAAD//gAAAAAD/gAAAAAP/+AAAAAA/+AAAAAA//4AAAAAP/8AAAAAD//gAAAAH//wAAAAAP/+AAAAB///gAAAAA//4AAAA///+AAAAAD//gAAAP///4AAAAAP/+AAAH////wAAAAA//4AAB/////AAAAAD//gAAf////+AAAAAP/+AAP/////4AAAAA//4AD//////wAAAAD//gB///////AAAAAP/+Af//////8AAAAA//4P///////4AAAAD//j////////gAAAAP/+////////+AAAAA///////////gAAAAD//////////wAAAAAP/////////8AAAAAA//////////AAAAAAD/////////gAAAAAAP////////4AAAAAAA////////8AAAAAAAD////////AAAAAAAAP///////gAAAAAAAA///////4AAAAAAAAD//////8AAAAAAAAAP//////AAAAAAAAAA//////gAAAAAAAAAD/////4AAAAAAAAAAP////8AAAAAAAAAAA/////AAAAAAAAAAAD////gAAAAAAAAAAAP///4AAAAAAAAAAAA///+AAAAAAAAAAAAD///AAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAA//4AAAAAAAAAAAAAH//4AAAAAAAAAAAAB///wAAAAAAAAAAAAP///gAAAAAAAB/8AB////AAAAAAAAf/+AH///+AAAAAAAH//8A////8AAAAAAA///8H////wAAAAAAH///4f////gAAAAAA////z/////AAAAAAH////v////8AAAAAA//////////wAAAAAD//////////gAAAAAf/////////+AAAAAB//////////8AAAAAP//////////wAAAAA///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////g///gAAAAH/8P///4A//+AAAAA//gP//+AB//4AAAAD/8Af//wAD//gAAAAP/wB///AAP/+AAAAA/+AD//+AAf/4AAAAD/4AP//4AB//gAAAAP/gAf//wAH/+AAAAA/+AB///AAf/4AAAAD/4AD//8AB//gAAAAP/gAP//4AH/+AAAAA//AA///gAf/4AAAAD/8AB///AD//gAAAAP/4AP//+AP/+AAAAA//wD///4A//4AAAAD//5////wH//gAAAAP///////x//+AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAP//////////wAAAAA//////////+AAAAAD//////////4AAAAAH//////////gAAAAAP///3/////8AAAAAA////P/////wAAAAAB///4/////+AAAAAAD///B/////4AAAAAAH//4D/////AAAAAAAP//AH////4AAAAAAAP/wAP////AAAAAAAAHwAA////8AAAAAAAAAAAA////AAAAAAAAAAAAB///4AAAAAAAAAAAAD///AAAAAAAAAAAAAB//gAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP//wAAAAAAAAAAAAD///wAAAAAAAAAAAAf///gAAAeAAAAAAAH////gAAP8AAAAAAA/////AAH/wAAAAAAH////+AB//gAAAAAA/////8Af/+AAAAAAH/////wA//8AAAAAAf/////gD//wAAAAAD/////+AH//gAAAAAf/////8Af/+AAAAAB//////wB//4AAAAAP//////AD//wAAAAA//////+AP//AAAAAD//////4A//8AAAAAf//////gB//wAAAAB//////+AH//gAAAAH//8H//4Af/+AAAAA///AH//gB//4AAAAD//4AP/+AH//gAAAAP//AAf/4Af/+AAAAA//4AB//gB//4AAAAD//gAD/+AH//gAAAAP/+AAP/4Af/+AAAAA//4AA//gB//4AAAAD//gAD/8AP//gAAAAP/+AAP/wA//+AAAAA//4AA//AD//4AAAAD//gAD/4Af//gAAAAP//AAP/gD//+AAAAA//+AA/8Af//wAAAAD//8AH/wD///AAAAAH//8Af+A///8AAAAAf//+B/wf///gAAAAB//////////+AAAAAH//////////4AAAAAP//////////AAAAAA//////////8AAAAAB//////////gAAAAAH/////////8AAAAAAP/////////wAAAAAA/////////+AAAAAAB/////////wAAAAAAD////////+AAAAAAAH////////wAAAAAAAP///////+AAAAAAAA////////wAAAAAAAA///////+AAAAAAAAB///////gAAAAAAAAD//////8AAAAAAAAAD//////AAAAAAAAAAD/////wAAAAAAAAAAD////4AAAAAAAAAAAB///8AAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAeAAAAAAAAAAf+AAAP/AAAAAAAAAH/8AAB//AAAAAAAAA//4AAP/+AAAAAAAAH//wAB//8AAAAAAAAf//gAP//wAAAAAAAD//+AA///gAAAAAAAP//8AH//+AAAAAAAA///wAf//4AAAAAAAH///AB///gAAAAAAAf//8AH///AAAAAAAB///wAf//8AAAAAAAH///AB///wAAAAAAAf//8AH///AAAAAAAA///wAf//4AAAAAAAD///AB///gAAAAAAAP//4AD//+AAAAAAAAf//gAP//4AAAAAAAB//+AAf//AAAAAAAAD//wAB//4AAAAAAAAH/+AAD//AAAAAAAAAP/wAAD/4AAAAAAAAAP8AAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), 46, atob("HTBFLTQ0PzU/Lz8+HQ=="), 100+(scale<<8)+(1<<16) @@ -47,6 +47,15 @@ let bgColor = bgColors[(Math.random()*bgColors.length)|0]||"#000"; // Draw the hour, and the minute into an offscreen buffer let draw = function() { + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + animate(false, function() { + draw(); + }); + }, 60000 - (Date.now() % 60000)); + // Now draw this one R = Bangle.appRect; x = R.w / 2; y = R.y + R.h / 2 - 12; // 12 = room for date @@ -70,15 +79,6 @@ let draw = function() { g2.setColor(0).fillPoly([0,0, g2.getWidth(),0, 0,slope*2]); // start the animation *in* animate(true); - - // queue next draw - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - animate(false, function() { - draw(); - }); - }, 60000 - (Date.now() % 60000)); }; let isAnimIn = true; @@ -123,7 +123,9 @@ let animate = function(isIn, callback) { // clock info menus (scroll up/down for info) let clockInfoDraw = (itm, info, options) => { let texty = options.y+41; - g.reset().setFont("6x15").setBgColor(options.bg).setColor(options.fg).clearRect(options.x, texty-15, options.x+options.w-2, texty); + // set a cliprect to stop us drawing outside our box + g.reset().setClipRect(options.x, options.y, options.x+options.w-1, options.y+options.h-1); + g.setFont("6x15").setBgColor(options.bg).setColor(options.fg).clearRect(options.x, texty-15, options.x+options.w-2, texty); if (options.focus) g.setColor(options.hl); if (options.x < g.getWidth()/2) { // left align @@ -135,6 +137,8 @@ let clockInfoDraw = (itm, info, options) => { if (info.img) g.clearRect(x-23, options.y, x, options.y+23).drawImage(info.img, x-23, options.y); g.setFontAlign(1,1).drawString(info.text, x,texty); } + // return ClipRect + g.setClipRect(0,0,g.getWidth()-1, g.getHeight()-1); }; let clockInfoItems = require("clock_info").load(); let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:126, y:24, w:50, h:40, draw : clockInfoDraw, bg : g.theme.bg, fg : g.theme.fg, hl : "#f00"/*red*/ }); diff --git a/apps/slopeclockpp/metadata.json b/apps/slopeclockpp/metadata.json index 3243d389a..fbab02fca 100644 --- a/apps/slopeclockpp/metadata.json +++ b/apps/slopeclockpp/metadata.json @@ -1,6 +1,6 @@ { "id": "slopeclockpp", "name": "Slope Clock ++", - "version":"0.07", + "version":"0.08", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen. This is a clone of the original Slope Clock which shows extra information and allows the colors to be selected.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], From 70de58ce24c8aeb05e9e9662be79c23121e87f54 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 19 Dec 2022 12:14:52 +0000 Subject: [PATCH 341/342] Allocate the font bitmap in RAM at startup - saves ~200ms on each redraw --- apps/slopeclockpp/app.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/slopeclockpp/app.js b/apps/slopeclockpp/app.js index 4535d7a79..dca4a84e4 100644 --- a/apps/slopeclockpp/app.js +++ b/apps/slopeclockpp/app.js @@ -1,14 +1,3 @@ -Graphics.prototype.setFontPaytoneOne = function(scale) { - // Actual height 71 (81 - 11) - this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAA//gAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/+AAAAAAAAAAAAAD//8AAAAAAAAAAAAAf//wAAAAAAAAAAAAB///gAAAAAAAAAAAAH//+AAAAAAAAAAAAAf//4AAAAAAAAAAAAD///gAAAAAAAAAAAAP//+AAAAAAAAAAAAA///4AAAAAAAAAAAAD///gAAAAAAAAAAAAH//+AAAAAAAAAAAAAf//4AAAAAAAAAAAAB///gAAAAAAAAAAAAD//8AAAAAAAAAAAAAP//wAAAAAAAAAAAAAf/+AAAAAAAAAAAAAA//wAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAD/wAAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAP//wAAAAAAAAAAAAD///AAAAAAAAAAAAB///8AAAAAAAAAAAAf///wAAAAAAAAAAAP////AAAAAAAAAAAD////8AAAAAAAAAAB/////wAAAAAAAAAA//////AAAAAAAAAAP/////8AAAAAAAAAH//////wAAAAAAAAB///////AAAAAAAAA///////8AAAAAAAAf///////wAAAAAAAH////////AAAAAAAD////////wAAAAAAA////////4AAAAAAAf///////+AAAAAAAP////////AAAAAAAD////////gAAAAAAB////////4AAAAAAAf///////8AAAAAAAB////////AAAAAAAAH///////gAAAAAAAAf//////wAAAAAAAAB//////8AAAAAAAAAH/////+AAAAAAAAAAf/////gAAAAAAAAAB/////wAAAAAAAAAAH////4AAAAAAAAAAAf///+AAAAAAAAAAAB////AAAAAAAAAAAAH///wAAAAAAAAAAAAf//4AAAAAAAAAAAAB//8AAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/gAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAfAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAB///4AAAAAAAAAAAA////8AAAAAAAAAAAP////+AAAAAAAAAAD/////+AAAAAAAAAA//////8AAAAAAAAAP//////8AAAAAAAAB///////4AAAAAAAAP///////4AAAAAAAB////////wAAAAAAAP////////gAAAAAAB/////////AAAAAAAP////////+AAAAAAB/////////4AAAAAAP/////////wAAAAAA//////////gAAAAAH/////////+AAAAAA//////////8AAAAAD//////////wAAAAAP//////////gAAAAB//////////+AAAAAH////gB////8AAAAA////gAAf///wAAAAD///wAAAP///AAAAAP//8AAAAP//8AAAAA///gAAAAf//4AAAAD//8AAAAA///gAAAAf//gAAAAB//+AAAAB//+AAAAAH//4AAAAH//4AAAAAP//gAAAAf//AAAAAA//+AAAAB//8AAAAAD//4AAAAH//wAAAAAP//gAAAAf//AAAAAA//+AAAAB//+AAAAAD//4AAAAH//4AAAAAf//gAAAAf//wAAAAD//+AAAAA///gAAAAf//4AAAAD///AAAAD///gAAAAP///AAAA///8AAAAA////AAAP///wAAAAB////gAH////AAAAAH//////////4AAAAAf//////////gAAAAA//////////+AAAAAD//////////wAAAAAH//////////AAAAAAf/////////4AAAAAA//////////AAAAAAB/////////8AAAAAAD/////////gAAAAAAP////////8AAAAAAAf////////gAAAAAAA////////8AAAAAAAB////////gAAAAAAAB///////8AAAAAAAAD///////gAAAAAAAAH//////4AAAAAAAAAH/////+AAAAAAAAAAH/////gAAAAAAAAAAH////4AAAAAAAAAAAD///8AAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAAAB//wAAAAAB//gAAAAH//AAAAAAH/+AAAAAf/8AAAAAAf/4AAAAB//wAAAAAB//AAAAAH//AAAAAAH/8AAAAAf/8AAAAAAf/wAAAAB//wAAAAAD//AAAAAH//AAAAAAP/////////8AAAAAA//////////wAAAAAH//////////AAAAAAf/////////8AAAAAB//////////wAAAAAP//////////AAAAAA//////////8AAAAAH//////////wAAAAAf//////////AAAAAD//////////8AAAAAP//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAB//wAAAAAAAAAAAAAH//AAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAD/AAAAAAB//wAAAAAP/gAAAAAP//AAAAAA//wAAAAB//8AAAAAH//4AAAAP//wAAAAAf//AAAAB///AAAAAD//8AAAAP//8AAAAAP//gAAAB///wAAAAA//+AAAAP///AAAAAH//wAAAB///8AAAAAf//AAAAP///wAAAAB//8AAAB////AAAAAH//wAAAP///8AAAAA//+AAAB////wAAAAD//4AAAP////AAAAAP//gAAB////8AAAAA//+AAAP////wAAAAD//4AAB/////AAAAAP//gAAP////8AAAAA//+AAD/////wAAAAD//4AAf/////AAAAAP//wAH/////8AAAAA///gA///9//wAAAAD///Af///3//AAAAAP///////+f/8AAAAA////////x//wAAAAD////////H//AAAAAP///////4f/8AAAAAf///////B//wAAAAB///////4H//AAAAAH///////gf/8AAAAAf//////8B//wAAAAA///////gH//AAAAAD//////8Af/8AAAAAH//////gB//wAAAAAf/////8AH//AAAAAA//////gAf/8AAAAAB/////8AB//wAAAAAD/////gAH//AAAAAAH////8AAf/8AAAAAAP////AAB//wAAAAAAf///wAAH//AAAAAAAf//+AAAf/8AAAAAAAf//AAAB//wAAAAAAAP/AAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAB+AAAAAAAAPAAAAAAP/gAAAAAAf8AAAAAA//wAAAAAf/wAAAAAH//gAAAAP//gAAAAAf/+AAAAAf/+AAAAAB//wAAAAB//4AAAAAP//AAAAAH//gAAAAA//8AAAAAP//AAAAAD//gB//AA//8AAAAAf/+AH/8AD//wAAAAB//4Af/wAP//AAAAAH//gB//AAf/+AAAAAf/8AH/8AB//4AAAAD//wAf/wAH//gAAAAP//AD//AAf/+AAAAA//8AP/8AB//4AAAAD//wA//wAH//gAAAAP//AD//AAf/+AAAAA//8AP/+AB//4AAAAD//wA//4AH//gAAAAP//AH//gAf/+AAAAA//8Af/+AB//4AAAAD//wD//8AH//gAAAAP//gP//wA//+AAAAA///B///gH//4AAAAD///f///g///gAAAAP//////////+AAAAA///////////4AAAAD///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////////AAAAAD//////////4AAAAAP//////////gAAAAA////+/////8AAAAAB////5/////wAAAAAD////H////+AAAAAAP///4P////4AAAAAAf///A/////AAAAAAA///4B////4AAAAAAA//+AD////AAAAAAAB//wAH///4AAAAAAAA/4AAP///AAAAAAAAAAAAAP//4AAAAAAAAAAAAAP/+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAH//wAAAAAAAAAAAAA///AAAAAAAAAAAAAP//8AAAAAAAAAAAAB///wAAAAAAAAAAAAP///AAAAAAAAAAAAD///8AAAAAAAAAAAAf///wAAAAAAAAAAAD////AAAAAAAAAAAA////8AAAAAAAAAAAH////wAAAAAAAAAAB/////AAAAAAAAAAAP////8AAAAAAAAAAB/////wAAAAAAAAAAf/////AAAAAAAAAAD///v/8AAAAAAAAAA///4//wAAAAAAAAAH///D//AAAAAAAAAA///wP/8AAAAAAAAAP//+A//wAAAAAAAAB///gD//AAAAAAAAAf//8AP/8AAAAAAAAD///AA//wAAAAAAAAf//4AD//AAAAAAAAH//+AAP/8AAAAAAAA///wAA//wAAAAAAAH//8AAD//AAAAAAAAf//////////wAAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAB///////////gAAAAH//////////+AAAAAf//////////4AAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAB///wAB/+AAAAAAf/////gA//8AAAAAP/////+AB//wAAAAA//////8AH//AAAAAD//////wAf/+AAAAAP//////AA//4AAAAA//////+AD//gAAAAD//////4AP//AAAAAP//////wA//8AAAAA///////AB//wAAAAD//////8AH//AAAAAP//////gAf/+AAAAA//////+AB//4AAAAD//////wAH//gAAAAP//////AAf/+AAAAA//8Af/4AB//4AAAAD//gD//gAH//gAAAAP/+AP/+AAf/+AAAAA//4A//wAB//4AAAAD//gH//AAH//gAAAAP/+Af/8AAf/+AAAAA//4B//4AD//4AAAAD//gH//gAP//gAAAAP/+Af//AB//+AAAAA//4B//+AP//4AAAAD//gH//+D///gAAAAP/+Af//////8AAAAA//4B///////wAAAAD//gH///////AAAAAP/+Af//////8AAAAA//4B///////gAAAAD//gD//////+AAAAAP/+AP//////wAAAAA//4A///////AAAAAD//gB//////4AAAAAP/+AH//////gAAAAA//4AP/////8AAAAAD//gAf/////gAAAAAP/+AA/////8AAAAAA//gAD/////gAAAAABgAAAD////8AAAAAAAAAAAH////gAAAAAAAAAAAP///8AAAAAAAAAAAAP///AAAAAAAAAAAAAP//wAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAB///4AAAAAAAAAAAA////+AAAAAAAAAAAf////+AAAAAAAAAAH/////+AAAAAAAAAB//////+AAAAAAAAAP//////8AAAAAAAAD///////4AAAAAAAAf///////wAAAAAAAD////////gAAAAAAAf////////AAAAAAAD////////+AAAAAAAf////////8AAAAAAD/////////4AAAAAAf/////////gAAAAAB//////////AAAAAAP/////////8AAAAAB//////////4AAAAAH//////////gAAAAA//////////+AAAAAD//////////8AAAAAP///4f+D///wAAAAB///8D/wB///AAAAAH///AP/AB//+AAAAAf//wB/8AD//4AAAAD//+AP/wAH//gAAAAP//wA/+AAP/+AAAAA//+AH/4AA//4AAAAD//4Af/gAD//gAAAAP//gB/+AAP/+AAAAA//8AP/4AA//4AAAAD//wA//wAD//gAAAAP//AD//AAP/+AAAAA//8AP/8AA//4AAAAD//wA//4AH//gAAAAP//AD//gA//+AAAAA//8AP//AH//4AAAAD//wA///B///AAAAAP//AD//////8AAAAAf/8AP//////wAAAAB//4A///////AAAAAH//gD//////4AAAAAf/+AP//////gAAAAA//8Af/////8AAAAAD//wB//////wAAAAAP//AH/////+AAAAAAf/+AP/////wAAAAAB//4Af/////AAAAAAD//wB/////4AAAAAAP/+AD/////AAAAAAAf/AAH////4AAAAAAB/gAAP////AAAAAAADwAAAf///4AAAAAAAAAAAA////AAAAAAAAAAAAA///wAAAAAAAAAAAAA//8AAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAA//4AAAAAAAAAAAAAD//gAAAAAAAAAAAAAP/+AAAAAAAcAAAAAA//4AAAAAAH4AAAAAD//gAAAAAD/gAAAAAP/+AAAAAA/+AAAAAA//4AAAAAP/8AAAAAD//gAAAAH//wAAAAAP/+AAAAB///gAAAAA//4AAAA///+AAAAAD//gAAAP///4AAAAAP/+AAAH////wAAAAA//4AAB/////AAAAAD//gAAf////+AAAAAP/+AAP/////4AAAAA//4AD//////wAAAAD//gB///////AAAAAP/+Af//////8AAAAA//4P///////4AAAAD//j////////gAAAAP/+////////+AAAAA///////////gAAAAD//////////wAAAAAP/////////8AAAAAA//////////AAAAAAD/////////gAAAAAAP////////4AAAAAAA////////8AAAAAAAD////////AAAAAAAAP///////gAAAAAAAA///////4AAAAAAAAD//////8AAAAAAAAAP//////AAAAAAAAAA//////gAAAAAAAAAD/////4AAAAAAAAAAP////8AAAAAAAAAAA/////AAAAAAAAAAAD////gAAAAAAAAAAAP///4AAAAAAAAAAAA///+AAAAAAAAAAAAD///AAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAA//4AAAAAAAAAAAAAH//4AAAAAAAAAAAAB///wAAAAAAAAAAAAP///gAAAAAAAB/8AB////AAAAAAAAf/+AH///+AAAAAAAH//8A////8AAAAAAA///8H////wAAAAAAH///4f////gAAAAAA////z/////AAAAAAH////v////8AAAAAA//////////wAAAAAD//////////gAAAAAf/////////+AAAAAB//////////8AAAAAP//////////wAAAAA///////////AAAAAH//////////8AAAAAf//////////wAAAAB///////g///gAAAAH/8P///4A//+AAAAA//gP//+AB//4AAAAD/8Af//wAD//gAAAAP/wB///AAP/+AAAAA/+AD//+AAf/4AAAAD/4AP//4AB//gAAAAP/gAf//wAH/+AAAAA/+AB///AAf/4AAAAD/4AD//8AB//gAAAAP/gAP//4AH/+AAAAA//AA///gAf/4AAAAD/8AB///AD//gAAAAP/4AP//+AP/+AAAAA//wD///4A//4AAAAD//5////wH//gAAAAP///////x//+AAAAAf//////////wAAAAB///////////AAAAAH//////////8AAAAAP//////////wAAAAA//////////+AAAAAD//////////4AAAAAH//////////gAAAAAP///3/////8AAAAAA////P/////wAAAAAB///4/////+AAAAAAD///B/////4AAAAAAH//4D/////AAAAAAAP//AH////4AAAAAAAP/wAP////AAAAAAAAHwAA////8AAAAAAAAAAAA////AAAAAAAAAAAAB///4AAAAAAAAAAAAD///AAAAAAAAAAAAAB//gAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP//wAAAAAAAAAAAAD///wAAAAAAAAAAAAf///gAAAeAAAAAAAH////gAAP8AAAAAAA/////AAH/wAAAAAAH////+AB//gAAAAAA/////8Af/+AAAAAAH/////wA//8AAAAAAf/////gD//wAAAAAD/////+AH//gAAAAAf/////8Af/+AAAAAB//////wB//4AAAAAP//////AD//wAAAAA//////+AP//AAAAAD//////4A//8AAAAAf//////gB//wAAAAB//////+AH//gAAAAH//8H//4Af/+AAAAA///AH//gB//4AAAAD//4AP/+AH//gAAAAP//AAf/4Af/+AAAAA//4AB//gB//4AAAAD//gAD/+AH//gAAAAP/+AAP/4Af/+AAAAA//4AA//gB//4AAAAD//gAD/8AP//gAAAAP/+AAP/wA//+AAAAA//4AA//AD//4AAAAD//gAD/4Af//gAAAAP//AAP/gD//+AAAAA//+AA/8Af//wAAAAD//8AH/wD///AAAAAH//8Af+A///8AAAAAf//+B/wf///gAAAAB//////////+AAAAAH//////////4AAAAAP//////////AAAAAA//////////8AAAAAB//////////gAAAAAH/////////8AAAAAAP/////////wAAAAAA/////////+AAAAAAB/////////wAAAAAAD////////+AAAAAAAH////////wAAAAAAAP///////+AAAAAAAA////////wAAAAAAAA///////+AAAAAAAAB///////gAAAAAAAAD//////8AAAAAAAAAD//////AAAAAAAAAAD/////wAAAAAAAAAAD////4AAAAAAAAAAAB///8AAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAeAAAAAAAAAAf+AAAP/AAAAAAAAAH/8AAB//AAAAAAAAA//4AAP/+AAAAAAAAH//wAB//8AAAAAAAAf//gAP//wAAAAAAAD//+AA///gAAAAAAAP//8AH//+AAAAAAAA///wAf//4AAAAAAAH///AB///gAAAAAAAf//8AH///AAAAAAAB///wAf//8AAAAAAAH///AB///wAAAAAAAf//8AH///AAAAAAAA///wAf//4AAAAAAAD///AB///gAAAAAAAP//4AD//+AAAAAAAAf//gAP//4AAAAAAAB//+AAf//AAAAAAAAD//wAB//4AAAAAAAAH/+AAD//AAAAAAAAAP/wAAD/4AAAAAAAAAP8AAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), - 46, - atob("HTBFLTQ0PzU/Lz8+HQ=="), - 100+(scale<<8)+(1<<16) - ); - return this; -}; - { // must be inside our own scope here so that when we are unloaded everything disappears // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global @@ -16,6 +5,17 @@ let settings = Object.assign( require("Storage").readJSON("slopeclockpp.default.json", true) || {}, require("Storage").readJSON("slopeclockpp.json", true) || {} ); +const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); + +Graphics.prototype.setFontPaytoneOne = function(scale) { + // Actual height 71 (81 - 11) + this.setFontCustom(fontBitmap, + 46, + atob("HTBFLTQ0PzU/Lz8+HQ=="), + 100+(scale<<8)+(1<<16) + ); + return this; +}; let drawTimeout; From c47bc078acf593e3e7554c557c1fa01fd68fc14a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 19 Dec 2022 12:23:31 +0000 Subject: [PATCH 342/342] stability --- apps/slopeclock/ChangeLog | 1 + apps/slopeclock/app.js | 9 ++++++--- apps/slopeclock/metadata.json | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/slopeclock/ChangeLog b/apps/slopeclock/ChangeLog index 2eb04a4f0..da82f6355 100644 --- a/apps/slopeclock/ChangeLog +++ b/apps/slopeclock/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Reset font to save some memory during remove 0.03: Added support for locale based time +0.04: Stability improvements diff --git a/apps/slopeclock/app.js b/apps/slopeclock/app.js index cc3dce630..2164e7ede 100644 --- a/apps/slopeclock/app.js +++ b/apps/slopeclock/app.js @@ -1,7 +1,12 @@ +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + +const fontBitmap = E.toString(require('heatshrink').decompress(atob('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'))); + Graphics.prototype.setFontPaytoneOne = function(scale) { // Actual height 81 (91 - 11) this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('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'))), + fontBitmap, 46, atob("ITZOMzs7SDxHNUdGIQ=="), 113+(scale<<8)+(1<<16) @@ -9,8 +14,6 @@ Graphics.prototype.setFontPaytoneOne = function(scale) { return this; }; -{ // must be inside our own scope here so that when we are unloaded everything disappears - // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global let drawTimeout; let g2 = Graphics.createArrayBuffer(g.getWidth(),90,1,{msb:true}); diff --git a/apps/slopeclock/metadata.json b/apps/slopeclock/metadata.json index 6ee78350f..d9d4d85ca 100644 --- a/apps/slopeclock/metadata.json +++ b/apps/slopeclock/metadata.json @@ -1,12 +1,12 @@ { "id": "slopeclock", "name": "Slope Clock", - "version":"0.03", + "version":"0.04", "description": "A clock where hours and minutes are divided by a sloping line. When the minute changes, the numbers slide off the screen", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "type": "clock", "tags": "clock", - "supports" : ["BANGLEJS2"], + "supports" : ["BANGLEJS2"], "storage": [ {"name":"slopeclock.app.js","url":"app.js"}, {"name":"slopeclock.img","url":"app-icon.js","evaluate":true}

    ?%*!OQ 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 literal 43280 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

    FYNo*gFdFG2fy~uBHJA*qcRG+JUM!b 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 diff --git a/apps/widhwbttm/widhwbttm.ss2.jpg b/apps/widhwbttm/widhwbttm.ss2.jpg index 7556832b28a8beca7f65b987ebdd8fea431e5f1f..5e1764d943f56919dcdeb653e1ac51412947023d 100644 GIT binary patch literal 514293 zcmb5VWn3J~@&LNHLm;>Z4eoA%1c%`6EE3!au0et=y0`>g+%;IR#cgp3vbZEcgXeM1 zJ?Gy4`|v)z`prz&RF`#kbx%)E&!43~TS&38K6W+$fT}8h6#xLB1F#VQ0OV)vIl=2i zcmY6s#xb7HJOqS)=~&YUJb%-1pXp@?1OTM}@IMRj{!J%*zHdf+`49bBQRDh@7qh4}h1O zmsgbM`4FV#<^K!e7kQQdDEy=H@6^M>$-~Rp764#~X8ye@V)xU0kJ)c(3=d*@wTn2C}Az@N;GVQ-XiI1|UB>_)jN#X8do*K?wPO zb(VkY9`#wzGyK^Eyik%;l>1BIS^M+l&nn<801*M1{&sbzRL6Pfq;mDh=PEE`s_C% z0Pi_IknsU1s06Qgq|si|X;`=s(({HUp<@uqe5ohq`!=)1p!ti$@{IAVJ0=r<80kB$ zO8>0SU{s%??l|(ZgluTnT^z$fFFX9v;~#F? zB+17Pym2&U+pFHl^nx@X}Io;&8X>($VTbxAj&z}?X&d|*g_vJkZxP(Mr7 zd?%aY3ay*QRlkOG?W*lC;&WISyJOBq59~z%s-gLb|+2Av$KOOJ2Ak>xYb{aWB1!B>tA|G|-v>CMvxJkdK5s(Rgw zs$Y&m+2naf=a@014MxUUki5CJB#z+#(s@usps4);bdp|yt_kKQDx1#x=6=blQlgIz ziv;)k!-*ty%%+%|tK!}l1X;Wa0J z{J0hDdf6v7%@Olqbo$%+d^KIj1mA}hG^2qt2vQ_fZLB?O_JacI#AtXJ_brF%+L609 z665KKTdc&7I1zdV5k{ai^{wTDva`zuZpyn`aRLTprekVht#||M$jE$Ntrr(mOAnMv zF;Rh>HPQ4u_1`%*Hqf~JLf_Nt%JeR+l3VDne4UHjb;fI9vZhQa!BP1@EvQb47r^A8 zA;96pN2-tUMxARCafLOtbkc@^9)*XX<={P!^+_3PwN*rxUQgjhwB>CDLvr=}G*)%$ zHiUJB+*gAT1Fx6@uHTqsVb-#f#MVc@@_yH1qTVx4S2;r?IX%o8Ic4eIg7W<`Wi?&m zsA}}Fzqt+3xk|fL$`Fxy0bu**+E|cH*d;S!$ z`u!ohaL*)aFynip?Hv|EIfcDQNvX#r`Z!y%dEK0R^*2C8L;p^d;KYp$I0?>W+i#C{ z`zt4vU+UHz?=S0rU|EVr4PnE$3!jK6pH#FfPBfz4C>+O`2DEo4)}(kanuyExUr_=V z)mGrwQ58~+*^-Ld^%F$zQs;W!f-gSC; z*&YXJbv1}EG5s+}BiQK=VCC8c=i%*G&^P=SNrc5HyI)rxMWB@(7r#F(9Gl>$PFKP5 zx9-z+vfh;RZf`F#{Q(#UsorY@%}s4HfxduwUe}bw$t^Zthno8^Q%`Y$&>|xD{iTFp zAeO<=DYFT9eydb0;djoPT3pu|IR-y3Qd!Llrj0fFa`oMRe22W(%RM2~|apXM1)is6Gv)uiJ@RX$MSNTiH zZBDMKMWP9jh&LMkzlA$8e{4V1hyk}3@=Z02v5p+VfpP&>V@RKf2U*K`TW8 z1WofCXCl~>X@>mFXk>zIq?Xsk=}K8lY4iEYS6xvC*iN`&q^x_ElW9!Q~G}L4|6-b%+1rQSzxbZx7RO5RSr{= z`VE965)~t47(M{0#Az|ucdBoOhGhBI>IH@O{p&3*-f4RTn~|qF$MIA5UAGp z_Ox)N%n=Wy!0@_I-YFP|JG-VOf>D!x={s!(vg7#eV-=pqExTSF6mqdIHua~mJ0-f1 z_LM|1IHvg9(ish z9eC*_GJYi0=wlhfN17SFE29uNzG-1?J7Zm%IH~lc8u8lhbo;nOTZ2qbt6 z7bhNXVq}TsEhT89EtxakI0oT?hQ`FZNPPoEc7=rlOMJObj5ezUm|`Ofd)UfKtG#$= zc@h9WE%AgOEBhg3Gq*XvCR7=E^OX^9eBmu(zC=h?hQ(?es0SDg)u&DO@OEl9-aRiB zT8*Ax^}_eQ&Sunv3mrWolNar04K3F-PBw>>y z<%Rs>(RR^$e_rn4@lA5ci50S46#)K_3TPl8tDXiDc@dfDX4%^j2u1kuNJwU^qMGP& zVE3PXH5Xb#Cm9sTly#EK!=111;$}Fdi3a-YTOZtB^y$?Gw@96|1b?W;Qj=j;V!d<< zslb_y4K@x~dk!k+@dt#3@>JWYJt*Dd+`R&Yd>eFGLb+rca*rfvjvUd?0TK&21j$JG zQ>VSKS;l!gvNu|?Z6nTy+j9(>aqqc{V;}1T32{3A5^jTcgS+siJiGXb*pHNl*8Ke8 z5nAanB9AC>PSd}k2lFC$84)2CBY>6Pq-PScDP5Fek=M+%B+%GFsM_NBngN)%y=i_6 z<#`Bh*}?YW4LBIu3V%^>ztT@h*t)!g6`QY9cUFXH3wXlIYrFj+25Ma_JIP`;fP@;- z`@RS(rqPGCnl*ep)pgGq%>#Fo7i5NLC$9<30r!WrGPSMo2N{eqzF#Bd1kG#)dW_^u zi*S;Tv~A>do$Yw!i1g=m`a_p{GtTylgqAo^QmsT+h%3s+ZIf%>FzE7~mca%CH|Or)G$6K*XbK)_c}oU{T$Iz=^A<{swFzi0{&vgX;-ZI zjfybD_a~?_ecO~7*XChSp#NTyqmSjwmtl(jeGENr$eIb?Ot3p_Z@7oy_`2-??E) z6^l#j*b$S1e1?_O z*?dkQckCAsu7mNjkRYvK8myb}I9B0WVNo;l6In^8m zzn#97<5Q{r$A}MOYn(iqb}9+v*h3-@7n&uh5th;<@VF02m)<62gi%SQ8!ZaHU8kp? z4GnS+R0U8>wQKX$bd*kyIzRc!tasJTX9+35j+O$(XAKUiP(EiQm#y4PX=Q$hu7u!7 zh|iY(?9r2>#q#(z*q%@{>vm*uOgRGO0*2Ha?(4;@XuT9l=<$Z?LrHq-~bjP%hd|!%RNi!5LL$l|D4sXMFL* z9&60b51_wEO4YI@Vs}?8j!(t;>f&+d7JI>Al%sQG&)Oj&MY2LCQ;OI(=nuy=$+8z6 zUuk(ad^lR)_)ekI_Hw8`&N}d<>F%s}_?XT~gx{6hjj-N**e_w}A!?|Wq_W`;0NsOO zqUq|LYZGqam*GZ_$FsYFxw|r!S%a!mA~skbgH1GG{FC<~NaMljv7u}si(X`QInqp( zvc3q9$657fF93oR=WjZ(>6N)FDxTmU>z)@!4RHXyC=ZTMQ+{8_m{HGAzopnMg)_gr zurh+l81?Nqp}TZa+14wW#7i+Jg7|^%2};eFF(2~7WI6hvtY=cp!`L*-Z!HQH=qKFF z8fHhnfOk|+CCLNML$wF9gSAcgnh zaHD5wN_7{MWgX5dDKjQG4?MJ@_3CMn5;&!1oQf6pXq?}I3kR^}r`HD&1Wly|y*U0t z=$jMD6#FB`mCHHf5y(Ev(y>WK{rpzut2 zQ|Y+GX@FJKTe}VpKB{-VU)5+`I^%7a-EK*G#}?mBBrRZ;?<7D7DjXNxp4u8fyfaPh zc-gpS>dp91T+&|y5sm}w?{hfpCfuoBQOt}wtd6mZ_cjR38Rh5b&UGM4sL|w#&1rT3 z($_7nhC0V|?Sh*$Ml-eH4u%R@G#YSXm_wIHioJz~YLY7J&%@Dz1jU3T&y!>X3* z&=tC?FF&EpXL)!pOvRhG{s6E?7#WxPR;8C*zCUb#EV7TH4w0IK^9?R4mkuRmDPK-pjvMe2MekxB_C$=7ez)oe~q&62fnx4<}6Qc z$dZHEscGhLtVR+4ZXvIR(wW#%c^9m!l`^XXcwfEGAk@)X&{5M-P97g2{fa`OeHZ8b zx>>HFYJQB7Nl_8|82th{8B6%4`}IhplZU2<$Oqn|*Qs5l@oUbgkM$qT2bd-DfTE&vg+5`NFdz>^PMx3ci;<^1y@G z9GqOXhEi1el(MkLg5PkT9ojJ%~ z85Dt5ws&*Y-s6z7r&R83gXZx4a38U3(-_EPcCWVoGO(0|PjM?jdgu^m;4*P>^KrI9S2@&f3Dxx{lRPJ9fAi)Kq0?vq@#e3pZlj0~zJOGlWDJ{aTqs`n?z}GKw@{ z2IhYB%ai&ZBJWrFmFrc(H5}ari}Er~FH4F>Hkq{$E7&(xy=fNXY(Ppr-tARP#@`Jq z?Bv$-989l|15hSA#q2TlK&`~^(I;hRW_X;QPPOOHvqnL)(h3zv)Loy^ ziic1~`;s$)Pu5E15(Ms9J zmOOpliq_?ur1B*fi5qdarcbKTYgrRUBQhbYL^<}2`~bzyH&gcZhu^d1Yct{m(`n5> z0Va$Zc+uoRAobD94!Ob_E_Q-SoE5%HVKU~=zA9&Xm|3D-n_R&vfZO2H__LeX>R^ym zQt`p8Wyo;k8|?7om~w%ZuRh0FR03ewt2&?0Vj%I9xTEI-DshNfOhH~UGeNG zBePRMeNR2K@_89h%0NObf>%1zE@r%X95`CeT7r%QFEjR+DEEqNpY0&8sM{qoF%e~x zN^KOpX>Uh1qD~B&`vYisc;fw_^bi)%K^jaTamR&>KPjblg3Sw+YFd0>J9V#gcMhfW zAH8j@8rSif{QAZUXak3VC~8V#2wx$tg+kk*z=7AW`#O@8DZ|H5awZ=Pi?zs~m3p`6*<-oV(Tx_g;7KY8>9r#JW0`xkgm> z;#JxW-Lrn&t4qMm$?gXa7uXzK60nUTJ9Nqjer>i~-gm5o%8q&~xO&O(2k;g&avle+ zXyv9r+VH9YT*d+qKtE0&V*@1SO)26QwLeEXFjvrDr{IVDpha@-^Z!jr3%l*%{mhSz&^u)b$gfhgFH=RuJz|1CD180^;(VKfBbSGaQncov{JE5u)2HA6Ooi=?hs%WI(DV(0C;xzcKrm?Px5pN^4@8qeu!7R@|dVU zau*k`+k{8_dJqyy9g7ERP1H0yhvc;=(AUhn-@3Q04a*nBUbPKw+-W7N+oZ^9)UfIb zsssN3Ahdq~L2gsy2M=Onm2_T};0g@93hp1fs@>e~_8@FK4}*XeUsk#ggW&@wK*LR4Zs&uQsgT?R@Mqk3lby;u{`AC4p6&&-Qi0v9?yTsI8@{GVowqg?gD_s*t5sE9BKyg5`xmqD?kT+C$*Nn4SIrX z!=1T~7{3Y*da-qkOr@pO*i~X3`+yCpvd~Ex`ea}?N8jEb05cVKqqhA*4ot(!vs?qy zIdSw4AUe2)&!)&{fgLo6&T?q~J>~6OCvWqTqp4&oX_@eu7(W@URzap+($k)%?&6){ z&4GNrPkQFed|*ENC@>zaoDwVF--6|WhTzCEW^^u7Es61w;VvcbW~lTx>}X_T@cGT& zgs^AxD$+~6+!vrr{JVemZo|+KHNCG9f4Auk zH`3A{z(s5^O!VCGYCA=+q$n{6EkTlI3IB7I*Otu#>uB@G=y|e0tNO!-COQg!USXV| z9qgAmH}QI9+g62R1R_F#-+z(63SeZ4pKl;5CjTTYN>x=NTl^c2Br=`3V3Ly6Jh!?d z#D`$6m$&3Vb;DjQaCUrW^VzhA162lKf!{%4Ud>q}5C_|~YO;})aH?0L0wb&|cM1)ZT&QF;9iJUrvTL@e_|#@Nw_JuA+`>^vas zBZ7I`Ba#%1nnL$OM~B3@G7CVS1)J>s4=6QSd4ma7x*a+TeNmp@owp0;JFTx^lAa#Y ztM>Qy)(IWIe+STnUV|FjyVc?)CprHBP!8^Zn6SNBkr0SwW5|h9th*{#!FF}IeMS48 zL5h7=cou|iURK~)ges$&X7MgN!c+NQIp~B1hIZJrJ0WBHx z{s)_LTcfjh&4rf335ZvRb8hUAF6O6GNMeWwmMaC<-j;5S5pv79@BNMU^k?lfLBf9*)Y9@6? z`x|v$UMZQc*&VPw$d?l6aT99nCGfgr)_qVDrR$wRL==sRxZ$d3X|>ENb|%@kE(5uUv#tulXauvP{_ug$D{~0rQ!gYyh;^08s%LPwnlT_;C`{@ z#Z0(MWH{MSQJ?JCktf@7pMclGb9mVP>-=C)ujYzFP#V7!c2K@Y5#JM@w~6h^)=XRr zsVR!vnbQz^O{XcO@3u&K1k=Ti9(J&6MU}K1^22r+=Z)7>=0Ls44ATz?e}Yu4f%{Y~fPqTq^3EdG1oWzw9OhPB(kCmIgT{aOce*g@{Q+v23|FR|m` zfsx)5pWdSB;nrjAxPKuR2*SO5La$HBpVd(rIMCLX5&HrHsmme)?OF{zeG zO<93KWy2Yn0|w%ym>3-M0KX#m zybGjv?Fr6tsF)S7D__dhFP6d*nB%>3>z^|elG#o5oK?=8i&%ul;z_q{?!hkp{7gcq=QDT;QUShl`_<%2(Ck=wc#)n#A*%NEwA5M?p8i zyo6dVX3nY@?G<#LR!XnmaFS^o!=QZi`Qdi$3#Mbo^D4zwv)iGD9xvDKY zSzZ-plf%$%{AjoZh85|_lxQMq}&#TBkIUd)< zbE{1Mvqv%njrklp(nAbEQPp{qiiM%D4$FI9F0ScmZFUm$O&nr<%~)(;i7l;65rTFN z9hoBI-z=W+plNJ}=;NLjUK^b~MoPH_Uy}ymP2STv#HZbK1TtRb>N(^F*W52I`ynD(xTRzbE6r)W<->Pv28oGGt^@tXlSM2lYwX7nt zlTO$0aa^PJOEzeIh=kZGRn=_%Na9dv28AEU*n^GM8pBx<&)7E;UU4OC;Oz7{)Dm4X z(f?(H+pdUE_omNv|E(M|gOQ8bZJ&|?!eIQ3B%G4!j3{fN9`jATU^h$F*sF#OlmHX_XxB!v{>&x-k&L-(Dib7M|PPhjq+TFyDh=4Z-vZm`kjVf^wd0LUrLA!MR@U6 zzLs1AvOBceVak6yjvcGFEC7hDhKJ>b%kBI?&RcqCn-sa#thjvxB%UU1m0aRg91W3; zGUaA*WU?HWN%-VBkeVsM7>yK%&w1spjYSPdxaR3Pt8&O>R}OJ@x}(&OK_W(6uTe8* z0W{aT1^KoMBd_$j;_W+rc#)GQ+d<&kr<~2bQa!t*| z{HuYZQeIH^jg|5+7S?^}C*4M4thGxjZcBEC))JRh@}X!W^DD#6i%ANQV7L+?7Yi(2=4#n^XY1N~L}E zr*tlg1wyR9nl4hEEt0TTj(DEDo^Ug7J$4Lg+)8*q-^Yy!?&@xP$Y)4*3abe17yw>N zVZ5E~wH6EL9VJrsSR|ine92*T_vOCH^EAk)(4yR%pl>S)rM-^LKQJnPB;hl^?n_8UR@LuBK_-O96%LQpAXm5y$$wXlNohn^w z9_n|zbBe3Mj*mGZX-j>@mNvIz`Y4Vo-O=p+9OGadr7JIg1v!*9Y9I#TNB1Wxi4j} zJ~G4*!OHu0+9fSe8zCh;KSJp_Nn=kKw(r`QzRbIJi4PhR*=S6Mx!IU#7zsranX10g z|1LHh)m-Zlw`(}~-h}Gy%)C5Le6&ryX%rko{{r@5KP_c8zN!Anku!U2Zgy{$(L6cV zx~+Xj$lvl|G_BEzcEZMAh--ynzSkr@ixeKwCF53Qi7%=# zP?z@m-_VUh=0-Z+ZJO1Rc9(vP;)^50xQtDJ627wkG`@pfP+9%$dPw1Q1;vEZqPil} z^Lmr0RP$b>nn*h_+bTJ41wJE{r*#d=&sAs6*&#dPimyr&1e5hmn$B+>e!xrlj#x!U zv)G$ErxOH2IGmm039KvSlZX2(9amG$N?9izGCv#^Cxs$JBnZR`;(BOlC~m7#IjD&D zCB3`8MqJv}*cB=E`^_zzM`n>rRYGtTXPg~+2{jUm%u{`vI>GQoxgik!7Wz_b3SM|- zuTTgg!ln38;I+hDG~5KQn#~koYM!&T4s?gZ|8G~bP`BbW~hH$e%_RD zt#uvr>zjj3f?qU{`&WGt7aRy8oi@eN)l^m!cyFd|hXt6dP>KsAc}(oFKB?(ZRo^F? ztDqL_55O45g-Khf5F5=L&u%HjU%#(?hxs{+ ziYM$wJ0T0KoJ#k=>qntt0>B@D{Ti@-2~Xn|XpNioB}T|9Y|wCl9s&)bL5iyFTHkW> z9dpX)NK)5SO_`YsAx)NBy&Qt-d)NFNgX1ZxD!(m@Ev!#6a(muu!(;qOTdO!m=-u`; z{THaB*Q_Lkkhfx(s&1T!zu`@H@@r)tpt%Ipm|hg42!*r;MZ3QGZ6!UHYmcy#ZJTDY zh)Nu1MLMlzOCCz(TI?BcX>(V{4smRcg=wMnZo9pLj!>nKcigwtEgGDei8@Fk*2aLF zp)xfVQ_6$i_Tx>jqnURQ-gN;q>9*Mpg`Xufly zVHqGd`QeA|Cy(VjMVPk#2#lcwhJ7rl4Ud zC)SLfM`I7TDuw}#on_%~q*~!yq6!2ylHi7Lf)J&r+Oc#Rs~P-m^}@#)1-56fI;j!QOg%l3&VYmVDdZr{l! zMEo~1HL$v&7;FOxC1wNEPT_#iD{Lc+QNH5O!TYzRTt=@wd5>JJSKf%p-X6K_=TRRL z*|$}^p)Fsx0#l@yZc^gsLi(g64F5UQCkF!m00XyN}U6!Q! zhaDO}mnT;g_}}6#z(G5_hMG`g;UFDKQ$=mCo@QJ@wlO2sJ=kl zZO$LKaWcV_2;)yPy5FaSPu(3|}*W@e1qZl<>T)>UH}l`>Fv{`3z*TrCt_kZ^L@y%v)7+sT6DAY zGb20ZJ+RcjZg-$CrbGdytTd~wtd7?)XJcy+8(dfH$LTzto;WVePWQ8qc?%)kZO15y zzHTH=mZeziG1^RT%*8>L0zx)47@Y8#tNT5|8MHBylkMZ;`qSEl562W`IrvYVT1b$R zf&;8wwo(n=rp8W`WBM%jlGcxLPEr?+J%<}Bi>A!|?&_Ww*3;5u`0qBlZ`3kpg1gD) zUuw@rpk01p4WD-Aj+&~O(`nQCYW+PdKyp$6sMcx^T(1e|PAqI*y0qS!W&;A-p$A>@ z!L@$?Lp=hg>`vRiivIvQBuK_Dd|8T@en?YtO^W+VOm+_IBUVY*F_ZIEttnHLxqWSp zGWID2no_2c9IqBYQ-;3Qem@U*-UTXNQX!bHAbtiThm^;KCMjAANzub8n=|TZO*h85 z65=VlmD%2@F1d4o@+Ktz0F=l0$Cc^m(%LjyL;ZnQKha*Bs{8?Pg}uH>eqU50MLSzO z$i4mwyWgv;{@x{Aq`Yk6kTC?6gr$vwh?!cx$>pKr-k04g<&f*ddtT$PN7oQm3D5~W zws3%7P4ML`s1jRX`zjS0C;EqjCVQ-wJv_b~kbk!HjHEU4y$XJR^C-_U?qO&Rar)fZ z&fzL?7MSa@B)|Vy^l{v3LR!Gzinqvm_gh!Sqg#OH9?uMOrZS;p>E`#%2TN&5f8zWc z60-&pcHC9o`-|AhhKaWtDKLyR$MCK1rW|$I++SVkP?z&+F+J55^V* zs^(rkbXj?Td%n~qWF>?iwt}e?a%T_}*|u(C6P(<|V?u+ApPWS>Jd^uQ z&m3*kGgY!mF32~S?5)#;)5uVuFdVR!{RjSazqdvzb~+|GymxaO*_KuLDmrTUwiuG0 z)AL$5RS16od^?tLUzPE;uADvk2~Mqj`jOf!O{@FArP?MRl3L{pnl(s_)&Xv8PhZLFsmFB5Gq2!F{!ssh0q|xRv@Jp;b$%Vs~6B426Nwjqg*mU#Zm~FhuKrp%y8UW z1eR51$@O1NqCl2FR)&E2?;qZp0=%_sGF>(4X3(8m7ao?E^Kr?c?( ztFr2_I4332z<6NQ><$ zLtvF!GpgO&_lb%9ZeONH=hB{3sp~hYl znYRObj}0V=daPY5qP1JpuJ$zx-}U*qVPt|r-zhrMyCAn&*j)@uz@pN@&skSha`Bx#kAj>2 z%;V}X-s6}{;^Bp&}T>oEA-{mp|B)CzfO3E|izG$rvmY5o-`0roM3qBiZFS z9=Re4sF%Pd03c7Fpcoy-`EusWUx_+!LyRX8#u zvGcSeFqmmjFD;ihnwV(es$r+jmGdbOF}Py3mc_YS!3?7hg?G~V!{Lz?CzT|bllF$;$Qr-hsDjG<%gpOp!X#R*!9C|d8lPmL<$JkE24Dl4zv16ze+ zvJ^7Nbo4&s^?sYX6XQu&pCPZ-9F+yL%!Dl&b#?u6U&l?dx6fplJBNxUN-F|*1Es~` z#U9(Hpvh+4x8;z_NiRBE#Y2Ls={jtheCO{=w+7p0u|$>SjlvQm2Pf7cmsukD5#6*&pv8szNp>N7F;;tbQzM;>b-=I{+#>+ zumz0*J@$ChwljZNGFryhx71s%c02%~6&EO(;VcNBH}MxqY??!3$sCob*C^c!Wi9XD z!~G%5IX(|6KXmT8@vvYNVI=iT`>_|_gn!yWsjXbk%>BK(g|&Yp$o>X6x_|^{J8beQ ze0I57`c}0+-ofE}!g)E~m%^kjuOEM2yUf05_BLZE--jvdk%AeO!A48)gHulMtbzEg zaq3(&mC}!Rpctque~LOY2%7n3#7hUcUMuD>S=%ZaD~#(=k@SwN+zXpPF@0V(QCn6I z33Yil;sOCF7JiWfHgg&po8N-1&$Bi*~t{DG$z~m=&6MZj8I##!tTJ<-p|mbQR26LQTnmr%5rs%rq(D& zJDGeX*}YZx(2OUsyST$(tT#CsZ@zznT-&&h%-9PhGcg-wUyjpD`+H%%57C zWS{zFZKu?)I}WzE!+!{~Y>lU=vtY)<4-}IQsBml6QQNy0lOz zE{It3E%RcY+X>C5Jc&{lM*KVvSDBS-XbDF4Z6gXTA~g20MLb3JCd6Iz7kygIMBgLN zj)yUo*WmRpx6F0DB{NKMn^})t4Xr)Tx~yh({BfgJkh$BPis%MQib8{8>A+`NCK3gg zjdJ1J#!Z@2T$MV8wGN}$t83`jC!C;psKzeOv}#&EL$shg-H5eRS{sy_geLeSGp<8g zo7do-m`^q1dkr;2J3ZUaA&QP9ULD>;Cu4)y!!~nT&?1J&au%;_i5)_qUwy&)koz#h+|JZdrrlXB*cmi{w&b zwWF0~p+NV8Gj{Xp=ZUtP1kXj!b@&;$`ijabN!%4PorC<8LT%~_3cUVu*2p_YbRX|# zog|%z%XRkvU+7#EP7#OLRM^=ZVSHDOa`YDu;@<)uY+bq}?sPA*1JE+ByBl!_k50Ue@oB`(S23ZSoC$3!Z|>&VvHm!JXV#c(FUCFoSt5i& z-yKycrDlt ztu*WC06n~fyk;|d<+z|!p!+8AHc|}n`}#NN^aDt5cO;LjXj(vr;1jCO3)UBSgY~!X zjs5_1#&@C679lm|mCgVkN}An(?=>Zy4qLer>@y`8X~r~NF}W?_K~O4|E4lDUaQ5)* z#ljf56N+8*#?wt1`x%ejxnBnC&71_!^Y#p|1c}7W&>a_v2RiR?oFS)cY+!_1Nl^FF zBTCxML#>`*qwx;NjIjR09fVO4WgCn{=HR&^3apmj4wKJN_|O!tWFU9xToA|+p6!#C zZ>t4UX3C9BsA1}~-dW>t&gHK2iO74b-XTmq)Li2R;K#bPkU~WFY9f;%gM}sh=h=6T zGTHa$n#YdYU)4T2v0PiN^(y;^xNK0_2g=r5yrw!hfIR;JZ8=~ZltE^d^%To0Rt`C` zE3sLN>>W}(J&U`x3+G>GpW&`r4&+Y?b>O0rj$fvBt2nYvIv+1hSd}kSD z)*OWB)dbghQ_9)5Iq@qC1?48+@(PF%m$tPJ&2a2&ijq87<40_A#fQ8O=lp}(J}mad zI3E6<($XT#;ccj2edLia1I+-7@S;`%5BI^1`f3az22w}tMwh~S6Nv|xqu6Fp`*;=h z0dUUUH_64p_8_~hI09{Sh;>zhGIB6u!lb_$@l@^y<`HuKG3x{c(p%e;apk37c%%&* zu|`Z5Ne4H_EH2sFBh4>JbuzO<&k{b(8A?X0@##$IsF}a>5Lge2f()^53{dfyaIlBd zRg_eJmT^hO344R)klP->vXSTZ}mL$n2^2#?*+i6uK{ePmITS3keaGX^`=M0C~% z(7?&5Q&_%Q&vtJQGMpQ(2mX4ZwD&x3)K5{FU>&cZa1RD^x)mIYek*<&Ax=uR*U#*% z)&MG42H(q4c&OF~42S%0)a?3DOXGQ+Q7QEi?J*IKk)4G9COmtx}6v z3>{C6%-=7yF>v?ReWlqvX4k9ZU2m?xlyh=B zI!&MeU%?ij82=9du|Q70J3DDEx0uJ$>pJdZ++#f?bnjHfl505fMvgqz zmNb#<>$hWY0oD3?{#w5mfYeWU<6?l9B% zZ>JK9DJr!aNTp9dXuomuiT8K?n(?P$vK;23rV}QkS9y6YWw%dkbE))oV@}b&rZKw> zzMFcnU3QMr`CfkrgE*IADnj{%t#R*$p~m6{H-pj zohkzmRiqYSemKU=$4TV^k1m=`O+1e3E(D_E++z)U=qJk^sw6U0mmXV|XEwO}u~u_g z;oK=k>qk@Pll-wU4fBld@5^$!G%y9XAAPv!ahopEx*}w#j;lPV zsB(kLCZT}q?R;Mjf1+d5Eb(QMv|x`*Q<2TO^upyjzej|sh7C1QGQEj^Cxtl0^=o~6 zdzy-qAki@7bjW9@6R9W6jfuVb-xr8g3A}FwWi6l2?S+sS~9}->5kX<+N=2d#vLvtAOKfj1aa^B;*677=Cs*0VW-og4eTUx zcp@Dw% z`JS!L>$12v@{mvDg=p+*>mc~i!963 zm`3F?+%UIeZn(`)n`-)vIPF(Wmq8jZEgPRz{qdRJ{Jgb0vg)mOnNLxbJvKxEBhtiN zNC(a@qt)5lYoiimF|3k-c2HyXmZm!RU)1aQIJrGub6r86JULLORgGGuU9Gmwb79{2!=C2)njHa8 zJQS2omV*AEY{2gyr#HuLlPlD<)p_I(n^VB+4ah{eor72d`D4ekts|dT=r$1Q80prY zc@)uYRRNX7`T0EKuMaQ3^ZlH;iM+Qx^Ynfr`*K%jM@B~VG*sj~MSvczpI?l8q4Aa> z25XoivZOLK-GA<40R!pIKC}MY`hPN_(Qx@W$J_5uXF?a!dB@1V8k%~%;;q|=W0}0h z`5Xa{+~IfZ{4c@zzh(ab*2;UU@qJH}Pd!6ySjvH5M+9TRv#8B9rBvT<1+R}d)z$AD zj!}al1dHRqE2h}2_aw+q7v}iqRU}<@M=*t~{*!y=)m85g9jD`Q6_cY67IBAY-`l#~ZUL3&a$gusudF z0$E95EZs4|+Y*!N+DN^uNaSG^5Zth0Z`kpR16@UwFjIt;UEGmi4?S&;b-Z31aMe8MkL`I}Uf>veqExtYQ z`#}S@wk+-hOc{tPVQvMmRmYRGkQGl$b-;GrChLF~=M54F#gFq2y={$#mPG+b;jO^J zsuw`5IdcYk{3}6fU-?75TmV0}D<*?!q&OKHu(;AhLkqnYtFQ9f9hB6l9hG1?7 zu)!>MTXx~z-LWE0OA~X`t~4wpY`uX4+xp_&-dtdSEPLXo9#RdW?0S>i7Aq_bW;P!E zjx~y2%@n{qiY;e7MmjW)wq@KlfyKS?&Ziq$m|Q=<`eStrjO;g9+w{igcO0HgkiXd` zL10zQ`gHo^_5T14B#OPDnkW=0m@eSgB=@k#;`wBTLZfwoL3vnrL8S6+u)g8Lhhexcc#rb#qBp4QrMMs70LwVZB{NxyPfQ zu%@KSB%q24sAXAWbXA>!0S%4M&-~-vZCRJn)@n?uUo&}>p-B;}59f{Yy{pFd$Nfm} z<=GuAM~JlxNmS+9H)#~~Bc7OjGftGzXDQ}xjaSsHZ{HMY$myv3UWBtaZy>6vVgqrF znhF|cqt$g)AnvDk4IS)4gL~t>c@Xp&R1j!-^3z{@hCsLPVQgKRB^yey zYk+!VpQo$oYV`cg5jL2TRPu4rta@{!sR4|#79f&84hr9xMHE@?R_!(9-5R?CU`4;S zG-WhUFNu|;PqATuvjTq*?f}O>HZ)C{WveqVSJ`O@_Qu+%sps)ZJKiSpMXZ0!`26wC zwTli(mQ&1`v5Cs5kjP^O#1Ez~qC^=_67P#~3NQF^WoOLH5NpFi}@!kVMQ#Bp?3(2b^bUzGB}FX+lQeQ{R*pbyy!6Mbf3zp< z8AagFk1dy0%w~pI<8XSiuX`JdbjPz^CTg6jmo>_ga3iOvM2Q)fo7;o^@$&xw_rPk( zT{+`bJw$Bad0||sAhm(oG4J~~gT5WhFLvHHF~s#}_I~%RpSFgvgFf+dJk04)qmHDr z2;~=LQsj@0haR=pRV?>q8%Sb#?T<6p8m>(KvZkh~-Q=t{W@CMzbQbu>=Xs4+ETFBA zLObIg(B{6=JCpQY$mORGg)yE9Q9qUm7vIox(-l$GlD4_9z3<-?$su(H*KV6|(UuqF z0pE_8^0&9OEomfFxabM=k=q@OH~JyOO^BvJzY*b<0R7(8Y*cN zixvct&4x3V6I~Y9ocL|w9cI6ZNGYj_ij_CY>%sUK^REiOXAJt1yX`ASRL&THf-*=S z82y{~cKCTysP&shVOOVUg0e8`eev`+F7SDB#EI!BM&#<-1&8#fvza6R%qF`Mz^5HTOfUQpZ&L%1Wtf5fW9|U~k4V z2&NEBo?ws;cPQfpy;e43B>8+S0)<{U?r>+4N0t+?ZLq!j<0Da2RONB3GJpq9pVI=m zmc9w;k>mlkf(5#aUphvSJgrs!SSok}*kHjVw3RXllx`|-&LmJtHBs8Yxd0LEjD_W< ztaU7RFgGK%Hz1=dmPuNrE(2csv2_0cYJ9n)3=nrW>w}QfF4^w)=I0hxed5_WvO!3j7Un@UiP((ua6I`q%T!sp;xv%9wdI_l*(ys8D;=(wT~d<%=|PF#hLk& zl`)n8D|9CPapCkRsXD82NgewAapf5v(K205&~fo`dgEi!;bpA0`UCsDv-&E1c~cmX zRpdy#v3pz&xcUgoP2EXOT_Ar4fPgVUq>~jQUi{l0(;}>AMB;$ z%_od>lT+2isaHv3Bct6&Jq|psTmDv89K61NX>h%N^D%zsJsmU^i)p;l1=!x$)j&=rlxp^x)p)t#OWO=yuMvTr1HDmvd1 zoskm#aaCnP%EgM2Y#4JG;-Gf&x4&Rq*DZa_Uh;~dE<14&|cUz?tB;OCcG{qHTq)-!I7Ur=fat%qJn>T%?mL@G)+ z=EI)n9w(Q`A|V0lZ+`gl+=4`Cm6bqc@{n_-wyA(vW5qt5r!n!oj0q5jZ(+sK^dm zP=hXo;2$*T0Rr(BAs?PKuBvHETG#=7l!O_xnl!HG1`CgI4K3 zw^PGUNn2G&2dIj2HlNQLGVM{O>9g5mT$-urq_9$8JRbKJ!!L-kMV&z`8hc}l2ZY&6 ze2ib0c!iqBtS5ET>Jnf*JGoD;FIHJ{EnSwa4sQ&Z46RGJ`Ar;tp@Wob82#kq`)+;k zm);BNO2x{cjx3BTBW?^x+TTNsGiREDt1zN^e1#&Jd9ge&wkef$hF_;6jp3t~ILO;G zHOLs2Ja@h&y;d>Bn`%?4_a;#SO(KsnCp|#!F}F&OaD3$!^_%t` zu`O$TT)KRxI-f0)suebJqB5sicu5ASp-nL`c8BFP}kV)cT?b zYP0&1OncT-DZd`)5ix7YbXIGaX7!CWsF5q7u{%or;O}vYa!nT_W!aRAsOCnDu#zQU z7EXHG7%6myl5G02p0_ugI)UZNvJt-hez>P6(>gMinzet8%^gycZSFxl@yC2km28?K zhKo*1JX!3rG-uZfO~+otwkphY#zjw;K_ljpyi@TcZz*6q<1#^|t8&R+Io+xvBuJ+I zzosl|?Jt*8Q?yAe%e&N@Nh^M)*y$sl#=k4lw6!#`$(RJyYWrgwpx@(pEt%f@D?u zmYkp9s=FpVGL)ox#wX7WQ!Nm+cN&E^&+{SCiddV}MB zr-wJ!RqqUe{P)}#G3LYHAFck{6iY$k#%VTNDm^7^-)V@BN`grONJkA+4h8x z4qEpNaqIg>iDq|)J39L-gN?#*XL{h~RsLx5%7Rzsp z{_a4>j`!!m-P2iY6;*1L7ZC*|yIl6ip6R_T)sGE57?t9v^dh3%lhYm-kVewVr~ue{ zu^9Gi_EE|qtgNSwK^^JOn5T{`Mm%3?b3TcuvB+?L*L*#T{g;1cZD-*|h062E=>+L4 zh!IuqCIXgX?$&RfYOKbeD}r2_mYQEpq%Cm%o&ovCj%cipRQ~|!E>#p0#yPY;pE~DL7dDrSD!Rw0W<#&+yx!TUD#G zT}?w1P*PG=q<)5G;f6KSQtO#>T8W6FS410=s3Y8BitQt*<_a_)M{)(xnpv=(fN#bQ=zBQ12<&Rt}ULWOu;Wi^uNQ_vQPdAHSn{$XZ zX4+Ff%VDMaZlp57BLJ+MPnU7m8jgdh%(W#v6`G;%<&Bd@>bzT_2OQkvL1|iSx|QYB z^T|xl>q9ll@!Q)OYqW-qqt$eYE_o$o9MN12=hMfy#A5e#DSSJC=T(qCrjcsnjY>`C zfE(i2!ItS72Bxf8wJed!mjyR~8{}eT*-wX*xt&Z^lbI9&vCA?3xEXVJesbF6m7V26 ze6}I3!`k>(ypmlfrYW+ullc6Me+-fCz3+w0G{%diNLjNJP>j}a3A*w9F!Scx8M2sJ za+u0pXrX6+cK6pXNTmx)1*V zU3A}-rZmj(XRwhWK_8Z~n|t)XTzu8lnoBs*S*31UpHNSiR#He7NTn7c{Rsa6e0|T? zRGQB|tEOS6vieC;tQn-`#lDxv&Hn)2eWCLt@gkah;)*J4$*7fG(QK|j_wU9(Rmhz$73q-5%QYfGCj$^kV}(u^v9XS$J3MRhMN7o zbByaKj+R=AWKcaUNF4n-jBOvbmU$IFnI&*Qr_w`<{{T#UqEFgCH=>Jw+KVs!tU0zN zXYE6oO2RQ#;03rKpVJ-i%PBQu&CitG>0eX_?Tek~6{$2C%&5rL^tRNu&AQ-Me%3mX zDSX&kMGa!TeU3Ur zqTR^#9+v*M#TAgpC#iz1{{X%@T&?c)ID9;CnvsN0cd#LkUQaf|!BAImUr_e;#WKWV zm{=(zu|zMHJuQzs@E1Yq9~HG+G#L#Xm9xq~3OEXH z!xQWdJV#DaOIKI~NRGlX8*t!Xi{sp{-J#+2T`set{ts6LJ!4!%^0D&R?@$8|Yvc0% z-R7?gh3Ufe$?SVKf!6UX?H=O(!`=z_mHRR3nq0cKOh;PPF~-72U?aZIQ3v$Lw>b`{ z*Ke9mBhu8=@~VLQrx*OO%$r2`lP+mMvSxWy3DPW*2xxPB-rTjomMv+aZXdzhF zaGE%MFY#lJp3da(<@hrkeD!`;+FagT#~1A{LS?zvh~=uJj*~BnEyPI-tP3yG+XkJy zLafTneqLIXvpEE-ejID8(b}%AnrWL-Q&KhkXpxV+A5(^d!%X01>mq9V!d03@-T?={ zPA!i^apx(_G^V(s%&F-<(?cyiNdQT-GY$vz#H#S?R3?hr{V5vErmI%eNRoF+g4o;Nz9#Rzxauc|+L7odPw_-lj6nOe z9DPPPdVj zBaeII24#?Vef%~ypFNss3Wi{_9o&y>Vak)jdMv;!lFL)Ynl}#nxc>mo*wyXR^jRG` zPYX1iEmV?AtYnf`A9jAxwEkosaaCT8@cN@Il`Av(=BSLHyc4?%U#DC)MV$C)1hsL; zmOQXJfgFM+Vu$O3z98rteKjQ~@Or}{h5>~sx##}jj(WYip|u8+@a8%S87Q+T;AOSq zj#ezgxgg=*i^E*EHiAO!RZnkHg=Z>l)Ql|J&qrq29Wp_tD?Z+YSQ=8MKs)Zm)H?o# zhd&ENqN=8l0A4czN}KWy7K2piT5N(y z8&A(amd&w*M*Vp8W3fl#k~7qr9ThjK-eR;u>V9yLYwYTiOuDv+CY-t0<8P#s-x6$T3To}Q0p zl&42kEV46P{{T!rU#omU&2yD_@+uf*2I5J*JH@&TPft(os%U&pT1T8xXj-pkqak__8Yo(YX

    Vk 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%0Duh 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