From ff8b799427684e9dc456388b072b00acd8e3231c Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 18 Aug 2023 17:51:14 +0200 Subject: [PATCH 1/7] Added option to show weather --- apps/edgeclk/ChangeLog | 1 + apps/edgeclk/README.md | 2 ++ apps/edgeclk/app.js | 33 ++++++++++++++++++++++++++++++--- apps/edgeclk/metadata.json | 4 ++-- apps/edgeclk/screenshot4.png | Bin 0 -> 2665 bytes apps/edgeclk/settings.js | 13 +++++++++++++ 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 apps/edgeclk/screenshot4.png diff --git a/apps/edgeclk/ChangeLog b/apps/edgeclk/ChangeLog index da75dfbae..b96d7207d 100644 --- a/apps/edgeclk/ChangeLog +++ b/apps/edgeclk/ChangeLog @@ -1,2 +1,3 @@ 0.01: Initial release. 0.02: Fix reset of progress bars on midnight. Fix display of 100k+ steps. +0.03: Added option to display weather. diff --git a/apps/edgeclk/README.md b/apps/edgeclk/README.md index 535a5e9df..cf2d0dd76 100644 --- a/apps/edgeclk/README.md +++ b/apps/edgeclk/README.md @@ -3,6 +3,7 @@ ![Screenshot](screenshot.png) ![Screenshot](screenshot2.png) ![Screenshot](screenshot3.png) +![Screenshot](screenshot4.png) Tinxx presents you a clock with as many straight edges as possible to allow for a crisp look and perfect readability. It comes with a custom font to display weekday, date, time, and steps. Also displays battery percentage while charging. @@ -15,6 +16,7 @@ The appearance is highly configurable. In the settings menu you can: - Switch between 24h and 12h clock. - Hide or display seconds.* - Show AM/PM in place of the seconds. +- Show weather temperature and icon in place of the seconds. - Set the daily step goal. - En- or disable the individual progress bars. - Set if your week should start with Monday or Sunday (for week progress bar). diff --git a/apps/edgeclk/app.js b/apps/edgeclk/app.js index 9f28e2588..5bfa77b09 100644 --- a/apps/edgeclk/app.js +++ b/apps/edgeclk/app.js @@ -7,7 +7,8 @@ monthFirst: true, twentyFourH: true, showAmPm: false, - showSeconds: true, + showSeconds: false, + showWeather: true, stepGoal: 10000, stepBar: true, weekBar: true, @@ -15,7 +16,6 @@ dayBar: true, }, require('Storage').readJSON('edgeclk.settings.json', true) || {}); - /* Runtime Variables ------------------------------------------------------------------------------*/ @@ -51,6 +51,30 @@ } else { drawSteps(stepsOnlyCount); } + + drawWeather(); + }; + + const drawWeather = function () { + if (!settings.showWeather){ + return; + } + + g.setFontCustom(font, 48, 10, 512 + 12); // double size (1<<9) + g.setFontAlign(1, 1); // right bottom + + try{ + const weather = require('weather'); + const w = weather.get(); + let temp = parseInt(w.temp-273.15); + temp = temp < 0 ? '\\' + String(temp*-1) : String(temp); + + g.drawString(temp, g.getWidth()-40, g.getHeight() - 1, true); + + weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 15); + } catch(e) { + g.drawString("ERR", g.getWidth()-3, g.getHeight() - 1, true); + } }; const drawDate = function (date) { @@ -135,7 +159,8 @@ g.setFontAlign(-1, 1); // left bottom const steps = Bangle.getHealthStatus('day').steps; - g.drawString((steps < 100000 ? steps.toString() : ((steps / 1000).toFixed(0) + 'K')).padEnd(5, '_'), + const toKSteps = settings.showWeather ? 1000 : 100000; + g.drawString((steps < toKSteps ? steps.toString() : ((steps / 1000).toFixed(0) + 'K')).padEnd(5, '_'), iconSize[0] + 6, g.getHeight() - 1, true); if (onlyCount === true) { @@ -229,12 +254,14 @@ // However, to save power while on battery only step count will get updated. // This will update icon and progress bar as well: if (!charging) drawSteps(); + drawWeather(); }; const onHealth = function () { if (!lcdPower || charging) return; // This will update progress bar and icon: drawSteps(); + drawWeather(); }; const onLock = function (locked) { diff --git a/apps/edgeclk/metadata.json b/apps/edgeclk/metadata.json index 3f72be77a..0d53cd008 100644 --- a/apps/edgeclk/metadata.json +++ b/apps/edgeclk/metadata.json @@ -2,11 +2,11 @@ "id": "edgeclk", "name": "Edge Clock", "shortName": "Edge Clock", - "version": "0.02", + "version": "0.03", "description": "Crisp clock with perfect readability.", "readme": "README.md", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}, {"url":"screenshot2.png"}, {"url":"screenshot3.png"}], + "screenshots": [{"url":"screenshot.png"}, {"url":"screenshot2.png"}, {"url":"screenshot3.png"}, {"url":"screenshot4.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], diff --git a/apps/edgeclk/screenshot4.png b/apps/edgeclk/screenshot4.png new file mode 100644 index 0000000000000000000000000000000000000000..66ec85c898aa6f87081bad5d75059dbc528cd2fa GIT binary patch literal 2665 zcmYjTc~sKb7k|Kj4r-cdnWUCFQ(;bJrdBScscmY?;v}ieWM-IKiW>%B`?Z=&=2B+n zIA$6em`u3^d|O;9jhb=Ijgitq6wOd^YRRqr7^GH+SU*o!z&B0Hi;f?gn8kQA+p=cT!%yrE8F0ufN zWfpZ+C}3Wi)J1n473)yZa$d;#pcjtp9$9KJkR#X}i%r;cvRH!EhD#&r-ln|wnaa;} ziTM$>K4cT>j{ulVg4Medg-N;7a;$7{mt$+uZC+%P@cD?1BA~-6SYO|kD80FgDa{`T0G%QL;I_B{Pssu6=^gsRe^G11PMK)v@)7Nf7V+85~jBKUd!TP=Yko(TQ1zmN4uk zT?9j6qXrq?ypN5oy6gF=kbW*Vh(A9Ts0w0&iBA;;we}!%SA3#;9?|n8L#xWE-c65`MGAar(d-od#pQ}ev#nO*1!P-`er_nxihF;KL3Z* zce+fdRbtG+AKf{OE&tlyFi6>&7p!~`7jy2YqC#m2^KoZ!gW(nUEd8okdabVgvP{vZ z8>2qp*V)Biu1BWGBm0xt!{x%OvAAC2Y?GnBo-n2w<{aP|euv^ias;)z$&Q@Y?}lrh ze@X5Z_OJd^YSd=y_=R}B*+?1^+DO;y4CBApSgjjcmq(y#LQn}MkVc|A_dSI+7A zd-yr;#={FkpetvcC_@qH9&R7)HLf0MUyOc!Gh>-WYww`tn5pt zlQHCURfX!odD~*EN`SD9cS)D{z5)PyY)kb{^?Tcy@<*Bn8r1nZTzXid?)86BBwIXe zmUP-6^SAI#01ltqYnY*qSQ_n*i_iC;@EIuH$^>&XOS>5qobi0SHrfVTjXc$HLKcU1 z@F4|bHD#~#|CiY`OIf`ja_$y7+Rr$41z1H$jG~S(Y3TRXPVMH9icbO+4346!*W3khHqwpb63-Y+L3TZM=StAkMzsY$04Exl#%J|k9 zfh-YtoDOu>*tl=g^a*X$w;iaJe8d-yC#3P@25d^<(3mVl4jmT zs#f*~*E+apo>snFrNqC|zmqVavMc_8n!OvW5MkTC(^D?gc%H}&Tv2;bWkJ)29NS-np&Ce?sJ)h**>6UeJR@ELJlnnH6Xi(4dfmscJ^pTdRZ zFH~@9cMr*!{Yu^xhk0g0k84PQm5DBV{|<+WKSy`oX-3g}qE|NhCy))Em4An%)#~k9 z_*xnW`qz?}_Qg0+VO_@WudjECygZ{e$5R?SVWe~n7Ki0fsAfCoOtE%_P8X7Al+t! zK7xL2Hr%HC(K9s{3GUp;dd5>v@7@*LSclZp`&Em$7YioOXxwrsgS%&CvDrkWwxAIS zQWB8fgDPvpTYLn%Ml+gY!e$o?VNBgJdEZfK@ zb{33>ceEg@&LbZiu(0R33iN$<0R=qWNYmX%IWo6477bZA5yMx&4__K)UAx7yJsHo) zi)eWu)E_P>*PAdUHZ^t^|4hQ(+PSk|eLF?)D4ft_H$|Wam?^DZ*uQufwTO)gdG6!ojz)-=HnPex7)zRhir{jD10{^8ck+3GzqkVPKEjVK=uYC* zQxbbA>k@)PDlXUMo7c2#15ddPl^I{BB3A^A zyXnD!-{;kL-s|EkHKU7TK{a_HC(AAPr!oB@i+;mji+dv|l?@pMSpo8Vn%)dGFm%il5C;P&RD@3+;`6o&#n)KU`%v(D@Y@*sY zv->T$a^yNEjX3AbO0Trr)%IKhBZ|O&?5ps2Oh^h1R?X30UwLFrxk}49zN&vNdxRKX zN((-wMOql6gZK`qkro^=Ji#p3cw=I7a!6C=M+*%4IGTyLxVO?R=aY>}{dWWh-M#m7 IT&d^(3xcHytN;K2 literal 0 HcmV?d00001 diff --git a/apps/edgeclk/settings.js b/apps/edgeclk/settings.js index 205dc5170..d7eff58d5 100644 --- a/apps/edgeclk/settings.js +++ b/apps/edgeclk/settings.js @@ -11,6 +11,7 @@ stepGoal: 10000, stepBar: true, weekBar: true, + showWeather: false, mondayFirst: true, dayBar: true, }; @@ -57,6 +58,7 @@ settings.showAmPm = !settings.showAmPm; // TODO can this be visually changed? if (settings.showAmPm && settings.showSeconds) settings.showSeconds = false; + if (settings.showAmPm && settings.showWeather) settings.showWeather = false; save(); }, }, @@ -66,6 +68,17 @@ settings.showSeconds = !settings.showSeconds; // TODO can this be visually changed? if (settings.showSeconds && settings.showAmPm) settings.showAmPm = false; + if (settings.showSeconds && settings.showWeather) settings.showWeather = false; + save(); + }, + }, + 'Show Weather': { + value: settings.showWeather, + onchange: () => { + settings.showWeather = !settings.showWeather; + // TODO can this be visually changed? + if (settings.showWeather && settings.showAmPm) settings.showAmPm = false; + if (settings.showWeather && settings.showSeconds) settings.showSeconds = false; save(); }, }, From 03b12614c3c0aa07240caa1eb29d5ba64d7e5cbd Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 18 Aug 2023 17:53:46 +0200 Subject: [PATCH 2/7] Changed default --- apps/edgeclk/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/edgeclk/app.js b/apps/edgeclk/app.js index 5bfa77b09..45dd0c4c2 100644 --- a/apps/edgeclk/app.js +++ b/apps/edgeclk/app.js @@ -7,8 +7,8 @@ monthFirst: true, twentyFourH: true, showAmPm: false, - showSeconds: false, - showWeather: true, + showSeconds: true, + showWeather: false, stepGoal: 10000, stepBar: true, weekBar: true, From 817607287c918f0cdfc74817f798406b01f8af57 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 18 Aug 2023 18:35:58 +0200 Subject: [PATCH 3/7] Ensure same default settings in app.js and settings.js --- apps/edgeclk/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edgeclk/settings.js b/apps/edgeclk/settings.js index d7eff58d5..6f38e774c 100644 --- a/apps/edgeclk/settings.js +++ b/apps/edgeclk/settings.js @@ -8,10 +8,10 @@ twentyFourH: true, showAmPm: false, showSeconds: true, + showWeather: false, stepGoal: 10000, stepBar: true, weekBar: true, - showWeather: false, mondayFirst: true, dayBar: true, }; From a335acf17eb83f13fe5efb569ab560abc8e85e2a Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 18 Aug 2023 18:37:51 +0200 Subject: [PATCH 4/7] Added contributors --- apps/edgeclk/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/edgeclk/README.md b/apps/edgeclk/README.md index cf2d0dd76..90f6443fc 100644 --- a/apps/edgeclk/README.md +++ b/apps/edgeclk/README.md @@ -24,3 +24,8 @@ The appearance is highly configurable. In the settings menu you can: *) Hiding seconds should further reduce power consumption as the draw interval is prolonged as well. The clock implements Fast Loading for faster switching to and fro. + +## Contributors + - [tinxx](https://github.com/tinxx) + - [peerdavid](https://github.com/peerdavid) + \ No newline at end of file From 188aaa99f775f79438c2cd9a2edfc8dc134f5b58 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 19 Aug 2023 07:18:53 +0200 Subject: [PATCH 5/7] clear icon area in case weather condition changed --- apps/edgeclk/app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/edgeclk/app.js b/apps/edgeclk/app.js index 45dd0c4c2..4bb1f4700 100644 --- a/apps/edgeclk/app.js +++ b/apps/edgeclk/app.js @@ -70,8 +70,11 @@ temp = temp < 0 ? '\\' + String(temp*-1) : String(temp); g.drawString(temp, g.getWidth()-40, g.getHeight() - 1, true); + + // clear icon area in case weather condition changed + g.clearRect(g.getWidth()-40, g.getHeight()-30, g.getWidth(), g.getHeight()); + weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 13); - weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 15); } catch(e) { g.drawString("ERR", g.getWidth()-3, g.getHeight() - 1, true); } From 0cec394aab823e23074566237c71ba15749535e5 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 19 Aug 2023 07:21:12 +0200 Subject: [PATCH 6/7] Minor design change --- apps/edgeclk/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edgeclk/app.js b/apps/edgeclk/app.js index 4bb1f4700..603dbd921 100644 --- a/apps/edgeclk/app.js +++ b/apps/edgeclk/app.js @@ -73,7 +73,7 @@ // clear icon area in case weather condition changed g.clearRect(g.getWidth()-40, g.getHeight()-30, g.getWidth(), g.getHeight()); - weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 13); + weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 14); } catch(e) { g.drawString("ERR", g.getWidth()-3, g.getHeight() - 1, true); From 463a107c2809c37adb2882ffc5042e5cc8d92a5e Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 19 Aug 2023 07:22:56 +0200 Subject: [PATCH 7/7] Show ? instead of err if weather is unknown. --- apps/edgeclk/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edgeclk/app.js b/apps/edgeclk/app.js index 603dbd921..f9d5f803b 100644 --- a/apps/edgeclk/app.js +++ b/apps/edgeclk/app.js @@ -76,7 +76,7 @@ weather.drawIcon(w, g.getWidth()-20, g.getHeight()-15, 14); } catch(e) { - g.drawString("ERR", g.getWidth()-3, g.getHeight() - 1, true); + g.drawString("???", g.getWidth()-3, g.getHeight() - 1, true); } };