From 02c4a1b9b70d5f650ea84e08a76025a295e4580d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 22 Apr 2022 13:06:42 +0200 Subject: [PATCH 01/80] sleepphasealarm add logging, display with chart.js --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 26 ++++++- apps/sleepphasealarm/interface.html | 103 ++++++++++++++++++++++++++++ apps/sleepphasealarm/metadata.json | 6 +- 4 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 apps/sleepphasealarm/interface.html diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 875b3c1da..94ad5852e 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -3,3 +3,4 @@ 0.03: Add compatibility for Bangle.js 2 and new firmware, added "Alarm at " for the alarm time 0.04: Read alarms from new scheduling library, account for higher acceleration sensor noise on Bangle.js 2 0.05: Refactor decodeTime() to scheduling library +0.06: Add logging diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 236b71c0b..0a8e83a08 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -1,6 +1,8 @@ const BANGLEJS2 = process.env.HWVERSION == 2; //# check for bangle 2 -const alarms = require("Storage").readJSON("sched.json",1)||[]; +const alarms = require("Storage").readJSON("sched.json",1) || []; +const config = require("Storage").readJSON("sleepphasealarm.json",1) || {logs: []}; const active = alarms.filter(a=>a.on); +let logs = []; // Sleep/Wake detection with Estimation of Stationary Sleep-segments (ESS): // Marko Borazio, Eugen Berlin, Nagihan Kücükyildiz, Philipp M. Scholl and Kristof Van Laerhoven, "Towards a Benchmark for Wearable Sleep Analysis with Inertial Wrist-worn Sensing Units", ICHI 2014, Verona, Italy, IEEE Press, 2014. @@ -108,12 +110,20 @@ function buzz() { }); } +function addLog(time, type) { + logs.push({time: time, type: type}); + require("Storage").writeJSON("sleepphasealarm.json", config); +} + // run var minAlarm = new Date(); var measure = true; if (nextAlarm !== undefined) { - Bangle.loadWidgets(); //# correct widget load draw order + config.logs[nextAlarm.getDate()] = []; // overwrite log on each day of month + logs = config.logs[nextAlarm.getDate()]; + Bangle.loadWidgets(); Bangle.drawWidgets(); + let swest_last; // minimum alert 30 minutes early minAlarm.setTime(nextAlarm.getTime() - (30*60*1000)); @@ -124,7 +134,16 @@ if (nextAlarm !== undefined) { if (swest !== undefined) { if (Bangle.isLCDOn()) { - drawString(swest ? "Sleep" : "Awake", BANGLEJS2 ? 150 : 180); //# remove x, adjust height + drawString(swest ? "Sleep" : "Awake", BANGLEJS2 ? 150 : 180); + } + // log + if (swest_last != swest) { + if (swest) { + addLog(new Date(Date.now() - sleepthresh*13/12.5*1000), "sleep"); // calculate begin of no motion phase, 13 values/second at 12.5Hz + } else { + addLog(new Date(), "awake"); + } + swest_last = swest; } } @@ -132,6 +151,7 @@ if (nextAlarm !== undefined) { // The alarm widget should handle this one setTimeout(load, 1000); } else if (measure && now >= minAlarm && swest === false) { + addLog(new Date(), "alarm"); buzz(); measure = false; } diff --git a/apps/sleepphasealarm/interface.html b/apps/sleepphasealarm/interface.html new file mode 100644 index 000000000..d9e5a2504 --- /dev/null +++ b/apps/sleepphasealarm/interface.html @@ -0,0 +1,103 @@ + + + + + + +

Please select a wakeup day:

+
+ +
+
+ +
+ + + + + + + diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index aecfa36e4..aba240e37 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.05", + "version": "0.06", "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", @@ -11,5 +11,7 @@ "storage": [ {"name":"sleepphasealarm.app.js","url":"app.js"}, {"name":"sleepphasealarm.img","url":"app-icon.js","evaluate":true} - ] + ], + "data": [{"name":"sleepphasealarm.json","storageFile":true}], + "interface": "interface.html" } From a4ae39ca48140ef956438218a848ebe9fe88bb95 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:05:04 -0700 Subject: [PATCH 02/80] Set theme jekyll-theme-slate --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 2f7efbeab..c74188174 100644 --- a/_config.yml +++ b/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-minimal \ No newline at end of file +theme: jekyll-theme-slate \ No newline at end of file From 7621a14276a796ecca531ac065072ff199239bc9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:30:38 -0700 Subject: [PATCH 03/80] Create brabury A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. --- apps/brabury | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 apps/brabury diff --git a/apps/brabury b/apps/brabury new file mode 100644 index 000000000..dfaa3485c --- /dev/null +++ b/apps/brabury @@ -0,0 +1,99 @@ +require("Font7x11Numeric7Seg").add(Graphics); +require("Font5x9Numeric7Seg").add(Graphics); +require("Font8x12").add(Graphics); +require("FontDylex7x13").add(Graphics); +const X = 98, Y = 46; + +function draw() { + var d = new Date(); + var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); + var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); + g.reset(); // Reset the state of the graphics library + g.clear(); + g.drawImage(require("Storage").read("Tigger4.gif")); + //TIME + g.setFont("7x11Numeric7Seg",2); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(time, 97, 53, false /*clear background*/); + g.setColor(0,0,0); + g.drawString(time, 96, 52, false /*clear background*/); + //SECONDS + g.setFont("7x11Numeric7Seg",1); + //g.setFont("5x9Numeric7Seg"); + g.setFontAlign(-1,1); // align right bottom + g.setColor(0,0,1); + g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); + g.setColor(0,0,0); + g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); + //DATE + g.setFont("5x9Numeric7Seg",1); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); + g.setColor(0,0,0); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); + //BATTERY + g.setColor(0,0,1); + g.drawString(E.getBattery(), 137, 53, 0); + g.setColor(0,0,0); + g.drawString(E.getBattery(), 136, 52, 0); + //STEPS + g.setColor(0,0,1); + g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); + g.setColor(0,0,0); + g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); + //WEEK DAY + g.setFont("8x12"); + g.setColor(0,0,1); + if (d.getDay()==0) { + g.drawString("Su", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Su", 136, 42, 0); + } else if (d.getDay()==1) { + g.drawString("M", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("M", 136, 42, 0); + } else if (d.getDay()==2) { + g.drawString("Tu", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Tu", 136, 42, 0); + } else if (d.getDay()==3) { + g.drawString("W", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("W", 136, 42, 0); + } else if (d.getDay()==4) { + g.setFont("Dylex7x13"); + g.drawString("Th", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Th", 136, 42, 0); + } else if (d.getDay()==5) { + g.drawString("F", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("F", 136, 42, 0); + } else { + g.drawString("Sa", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Sa", 136, 42, 0); + } +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first +draw(); +var secondInterval = setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +//Bangle.loadWidgets(); +//Bangle.drawWidgets(); From 876d842c80cb3bc2e2bb1c53d0c7e1f6a7952025 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:33:44 -0700 Subject: [PATCH 04/80] Delete brabury let's try again... --- apps/brabury | 99 ---------------------------------------------------- 1 file changed, 99 deletions(-) delete mode 100644 apps/brabury diff --git a/apps/brabury b/apps/brabury deleted file mode 100644 index dfaa3485c..000000000 --- a/apps/brabury +++ /dev/null @@ -1,99 +0,0 @@ -require("Font7x11Numeric7Seg").add(Graphics); -require("Font5x9Numeric7Seg").add(Graphics); -require("Font8x12").add(Graphics); -require("FontDylex7x13").add(Graphics); -const X = 98, Y = 46; - -function draw() { - var d = new Date(); - var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); - var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); - g.reset(); // Reset the state of the graphics library - g.clear(); - g.drawImage(require("Storage").read("Tigger4.gif")); - //TIME - g.setFont("7x11Numeric7Seg",2); - g.setFontAlign(1,1); - g.setColor(0,0,1); - g.drawString(time, 97, 53, false /*clear background*/); - g.setColor(0,0,0); - g.drawString(time, 96, 52, false /*clear background*/); - //SECONDS - g.setFont("7x11Numeric7Seg",1); - //g.setFont("5x9Numeric7Seg"); - g.setFontAlign(-1,1); // align right bottom - g.setColor(0,0,1); - g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); - g.setColor(0,0,0); - g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); - //DATE - g.setFont("5x9Numeric7Seg",1); - g.setFontAlign(1,1); - g.setColor(0,0,1); - g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); - g.setColor(0,0,0); - g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); - //BATTERY - g.setColor(0,0,1); - g.drawString(E.getBattery(), 137, 53, 0); - g.setColor(0,0,0); - g.drawString(E.getBattery(), 136, 52, 0); - //STEPS - g.setColor(0,0,1); - g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); - g.setColor(0,0,0); - g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); - //WEEK DAY - g.setFont("8x12"); - g.setColor(0,0,1); - if (d.getDay()==0) { - g.drawString("Su", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Su", 136, 42, 0); - } else if (d.getDay()==1) { - g.drawString("M", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("M", 136, 42, 0); - } else if (d.getDay()==2) { - g.drawString("Tu", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Tu", 136, 42, 0); - } else if (d.getDay()==3) { - g.drawString("W", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("W", 136, 42, 0); - } else if (d.getDay()==4) { - g.setFont("Dylex7x13"); - g.drawString("Th", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Th", 136, 42, 0); - } else if (d.getDay()==5) { - g.drawString("F", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("F", 136, 42, 0); - } else { - g.drawString("Sa", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Sa", 136, 42, 0); - } -} - -// Clear the screen once, at startup -g.clear(); -// draw immediately at first -draw(); -var secondInterval = setInterval(draw, 1000); -// Stop updates when LCD is off, restart when on -Bangle.on('lcdPower',on=>{ - if (secondInterval) clearInterval(secondInterval); - secondInterval = undefined; - if (on) { - secondInterval = setInterval(draw, 1000); - draw(); // draw immediately - } -}); -// Show launcher when middle button pressed -Bangle.setUI("clock"); -// Load widgets -//Bangle.loadWidgets(); -//Bangle.drawWidgets(); From 87e72910952a8b491553f2ed9d3b8350d76cc774 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:34:25 -0700 Subject: [PATCH 05/80] Create app.js A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. --- apps/bradbury/app.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js new file mode 100644 index 000000000..c8b1f747c --- /dev/null +++ b/apps/bradbury/app.js @@ -0,0 +1 @@ +A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. From 4a8247c433cce38d3b13602faaa42089f1174bb2 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:35:06 -0700 Subject: [PATCH 06/80] Add files via upload --- apps/bradbury/Tigger4.gif | Bin 0 -> 3443 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/Tigger4.gif diff --git a/apps/bradbury/Tigger4.gif b/apps/bradbury/Tigger4.gif new file mode 100644 index 0000000000000000000000000000000000000000..8e75e767704da66d551e56c1406856e96a9ba35c GIT binary patch literal 3443 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 literal 0 HcmV?d00001 From 93d8a2e17dc63a7561734f03ca7a5b60f5854cf9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:37:32 -0700 Subject: [PATCH 07/80] Add files via upload --- apps/bradbury/app.js | Bin 254 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index c8b1f747cea88aed3bce518b7629671550135846..f7141d15e964468848906f3be563e6bd7fa0f624 100644 GIT binary patch literal 4121 zcmeH}_d6B-`^R4*du4{mUfHW~taI!c4(AxjK1MQ9wvKV^2xWFe*(;k9vPWh}vNKLX zcxOZz=c~Wt`*~j1^M3wx|8PI9>%OjM{9R)m8cKFb0051iuBO>#O8qlA@#VB%plG}d z3LjmoM*vVU{xcECd37BCN)vY&?CxDRZ-4JcZr(oJdN3HbkDs@z`vVsM0_U*iD7g71 zi^}oRA=Dra{ldW8jG3I<44Q~$N);64p`h1~<0+VBHto8mrA5Lqm>)-+oQzIlHWi~z zp!`a<&hsWY>TO)Y(CJFZThA|T$KOXU8fR2DDi5&r<7A!W)ET<6rt)a&GAP%zZ&3ri z{VVGd>JgOuK7gLQ-kImoIUf-?35P&#@ph7Z07QXPROF!3D7RDUMl6AD3z}_9gpMZa z^iREGK#pbt>cPp-VxX=~gvMqGnuB~2U_b2SxCZWu1AC#T-=_c?dy*YO1Z-aLFcamc z0&Yf^I8ETD3@XPh6SM$Q3NX1E^eTd{;y_9d;i?O2nnC9nJyjhbrv_4{aTpOm5(4Z8 z`S=1sbT(kp-bX-w-KwVF5WOUoT?fJOD{4j9kc<10ArKN=!ee@@x0n`SRL>^T09M>aj6}}X|DwAaNOfn5?eJF5K0$BC|Wbn1;De{&9T;Pa1-R>5=J>@0qL{i}X2)W%^55q5#< zzTb&BfAA+9a&~<5?ZYa6gv`AN9g>r8-6MyFMK{LND54z~zNhG%HB%AJIH!1f^&D|X zQKmIh2H#}OoTLMpBHnmtnn<6(B*A%gS?rWpby*(Nc&HMEq>7i`b0Yq2AViP!?_50w zV87M7>$5O9G1@I^Wjuher*^KBF96W4dTG7@*lF@hz=!J92FL->%#RSQ(cn1jx-Qm9 zdZX*=LKoGUy+SmUzqcDo52bWQ-|({+sf>gQ$Bfo+irPzlR_B!KGOwrHVM z@uBd{x+N$U~nEPmhFk~J z`H}g9_%MK)CWbj`APyzWmV2G-I*Kje`nxQ{Vz#M7wgI@*ZRzc-jcmGXZwsVolV~V& z>Ja5i{g;9-IYcGlW#z@?OXXA+2NuKdlrlT>uxf1!S@X3riq9Dp7UkHx+vXhRs50f! z*m6{jcurXuEXgnX}H?dWXi6VcYJ zbI#U8mGZIzMVPF+sQ zMrH=GLbt-SLT9^Op?aqTTimYIYIPbxt1+N2WGkeDN*TL~-7uduUo4?4VKGusI;xf^ z_blQlXw?kpcv!NVmG{98ooDD>vJ}+5@%KiUu<@C4mFaro|>O@o_g#$q)*=0 z8^S3$F#pRGcCSYrR^;%~A#)`<6*mESJFWdpn=Z+{-*%0E&8y$5|E(aYAdjGd(U#F} zj+qgzSfp6lP}y)`bY%3+=$CByTovgVnT_0y+?m|vW_#;EYq6%%rWO~yx^?SftKFuy zhZt)`t0JU@^}TxSDr}X&m)5G*l4~V6<82%jJ?`b3+p?~*px&e$LYtv z%C0pr4vX}8!eb$$OM-+L>;lSkOx`rPiF z()oA03cK#Ru?w$97)H4YCW{RIsqk8>P%5%9g+yrJ4foj~~lXQ|yMO4ky zG#3SwA3N-^s{U5>d%dQ*2D!Z?vt)ID=V+N@&OYIut&?9e>F2SmvT|kCW`OG_2orX z%OyM@bGP5iy;tj(aJ3qlMq-hA4-9T7N{Ch~JbdtB`E2JPb``rywHCsfB{_J{C#Ybo z`w&yYQYOJ5rj(&>7-xLv#eW*~qNOZJ0{e^s0?Cv?-JIPhUdaiCiMX#YTTw3KeO*zb z;IyBqZSq0PjcwDql+4D9-8pFk0r976LC){2#DoX9rQE92qeWB$%M(ItcE!20{ zC&QI4n7WI;hl$OSTrbH!de%R$ylN#**#s^A0k;;O5hbfbxgcCSM&pMRGb-|KjqZ%p z56wTn{c7(uVTYlcVI{4pD8>LG&WZfqUg@D&2k{M>r(9#cdMn0~v=Y*i&?M?LZBns= z$gB=;7YsJ?jIiq(itK76^4zAfpu}Uswijl0?wKGZt(F@d{>ETARGH%ws+s0lGnt=$ z6UlPx=q0K1I{GLhskY;wSfo9pVVdv<#*1Tlq zsPKGiR1*yMwgb}A=2G%;Y*bkdUI;&g|Ai~;PA)b&%$z)&*yRXm`z`l#dfuk(_+0hl zhj|Mk3!`b*X_r&I)B0nz>iF`_lZ;cZdsW6>zB>cNlf>s_e6&q7xX;s^lPYktlrOio zb!Z1}ez?Hy1&Grq&{#Zs)xXN;qZzcmc}%f<%tfO#_arH#a)oT_<`Yg7r=$loXFo?f z*F5Lc#?j`z$%yL2m#wAXGoAUHbg$$fRzdm)@Q?0un~_uLsQvLI>`QD|xWu0Y`}sFb zAsbF(%N}&zd++J}S0=Rxi5tpo%44?sE&ls;^LR!?3nJ&8(tWQj|1HQx`jp8)>#NqB zYMiYnZa28SF~s$FlOyl;*y3S(&@UFkm+3r3mBsdhVDIC;r1k-p%)S z_j7&t7$_@kcW8OK(-p7~z`6H!na*TAl>4bL!R=4&k@=^R({#4qO z{}K5AMj#pEUwWHovW&bgLCj>EkI^X8dUT^zof8`)qx_M+-I(#71Z+%}&mELFNab~uT z-Aus3kCS+O9?i`>#Cc%NStGAsqb+j^-QS#uLr8U!e_Kv|a1fi_1v!q*f0e4(4xKSL zsGbQ~GInv15#hF1w?`V47P?E9(@#;-(ddfFy60D26||-=U3WGY2mHS?TG{p5%P&ytbqzgICBOT>hw?-iJ!RJI9~ zbGJ0dkRL(-S;>@~f5pU;qLw}%oti*yokm9Stii+jPh6N~s>c)juj=a$iKn#@wfr#; zNG-VsxgY%wB^QoH@;`~gK9Brqy7(zjroe-E|6BPHgM{OopI(Lcf@qxo<0bZZV)aC& zVca4j65@`?=^Ay=^vp`S+HE9dSDQdqE1dtB^83sf=i6V-uZyCQ@&0$V`+h&h+~N62 zjlpDpyJpv7acxWWRsHd>WiLE(H?;JdA|4L&geaY_9b!Wtm+;@@6e%&sD@nJEyxCLy z{aNLY@5MrZu7qq_tnkD4fn4>fMh(itvO^ssEz44Vr;BG&nSrlnai(XqPFxpU;kjOr h@~5oBunYPN8t_3vbhkT`&EenQ=xG^iRzvM0{|{AGLR=E|2u1sx;&*90zJtruIRRRbv}3e*SR`d{Z{&0g|Gf_noD^lnOhqtJ7lt*& zDkw_5*MeWEPs3&`iqpJd8i@#O#x~MB%xef}kJY^2@dK{hz5}zV+WF~9WT}l5S{O>h z_JI6R2^}}sD{5O3_l$fI&#_&)=T#R7^{N9d#5AcO>Lxc(V-WLYGDR*XiVz=AIYj^S W9`Zu5J=-oDv)lIhhvle6?q6?9Kw8uQ From 51e569b22c353e2481e10eeda94c05f229ac2b59 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:44:06 -0700 Subject: [PATCH 08/80] Delete Tigger4.gif --- apps/bradbury/Tigger4.gif | Bin 3443 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/Tigger4.gif diff --git a/apps/bradbury/Tigger4.gif b/apps/bradbury/Tigger4.gif deleted file mode 100644 index 8e75e767704da66d551e56c1406856e96a9ba35c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3443 zcmV-(4UF)0RR600RI30nE(I)A^8LV00000 zEC2ui0I&eC000C3c&c?>(82iTb8_O#Gxb%tW!tB9s8ybn%C(^>ze{c3^Jc^^x0Ae4 z4=4l?AHUSekrcX^q9AgJ8r`l72w_VAaJOFX_Z#Mx!RD?SeO{}@?=gAYhL`PbIlirT z-|2A$00jgXSXY8+Y;k*xj*F0Sk$-%Sjd+umnv|NEe}aUDhgoPaPAp4RN=2zhD$4~~-A_@^J7cJz~0QF0wx0(AAT@*xd1235wde#yt z!6Jq&7mVu6VgV+ulS5Atw9$i@L_#8M@|-|Y6iu2EaxzFL4_*h35J?fr*i8dBo+WZc zt?JL((UweyS|z&?Bsr}NC%o-=wp=1=gBuhw1Pbv_4LH?}ee%?nWrGH(QnvbTA+^VC zZ<_lXG3!OcT0P?1DKhQH$#)UDT1E@AvLaOFHdWybG2d_wTOX`JmUf-GSGwz`kYz9!ZYm%DxRRzFWq_i?Q*%2iW3q!EFvck3j5M~0AAUU4sN;@2_UNOF|A5HfZoU+0z#OEU8anBxmIip> z6F5SqXQ!yn3F@SkDt2iubxoBdJD|{NYpuB6s%x&i?&@o=!2arMq^nvwscb4LN`;{R zn;t1_u+Tm$ZM4)*JM03*E+&e$=3qCZtVUW}?YQEWOK!E5W@{`C7;d>@FQ;Y+51I7V zYwx}If{E?A+JZV$O7D`Oq^mD^3`( zF9csK^2qlpoUx@23#`(cYtBpZ%P^NYRWu;k7? zCr$FcG&9WYK~S;mEYeC>O>wJtsf+A}G(ah3%j;P!_QCu9ysxYOF6*(VMTR`~+a<5& zYQJ)qo#0ElNo^$6aQ8hX(@vk=Fx2!wxmtOP9TX&miev^+>xyz-SetO`nc77*!Y=dlh?0uU(_reF_y=?1f zYP&n{a0AY{N0kG-DCjq!iDp8uBk%Xd42EiVSltr6XzqkgFQ4_8+fBFGX$zk>_|k7m zI{C@hje5h$+Gz~&%=L6U{8cND^1A5@Ms1*HgZ3@vef$&Kl_2*Ih=Gqe8OcKR5~x6h z{jO#K43gvyp+EQSkAg9q9ngd}85Kpta1%-4N5Tfe3Odez8LSG9I9R}Se6WQ}d*R8r z=ebNhuqXPPAP#%xzuIxGd$$7^`v6Bh77me!It1R`Rx-Q?zN1+;eB#Cbib%V`QRpg4 zq+tXPm_;pKO>-{{UgSzO3Lr|*iDrbE|Ih|N+qr9oSU?ln5E#diVNZ&+Gv=v&qeEdb6A0{H8d=NzQSavz+KOXZzM^OOTLKnj{<~Ge4G2aCW1f z-UL7Z*aH9o2;dw3Jm)_H;LmI-Ae-FyXF~sZfB+Cw0Qk^gT))%`Bb?* z`#fn-SHLGiEh^D-Ry3h!GU-GK%A9WQGXNDGDMY#PQkKG0q5Zt4Ed%66LK!iNq!7_E zwM0*q#x$oQZ6`Kus#1Vvj+-PsY5w|2P>YTfru#IgEyLF=@ojW-rS#~{oN|byQuL-O z^(R$tnpKeoRG%)rCrQ=%Pn_Dbp9R$>J0r->T`rP->7gP~bC=Y@8r87jJm_H;t5tS7 zc8*BVMerKjnxLFpr6q$1HJT>++Ic$Ul#4Q zaNA|md!KTf_6{ji)wO1EftekZFxa~XmhX)yTio0-crz>e9D5^-;IR%EzX!Q4cJT|} z5ziBn_dSV!H4NaotPjLpTky9yJm3Jk*lP(6F@?b)``N~+%vX-~Z)NT+R|t~PNx%bz(~ItBe-O=76}1|=!ga>j>br&Tm9!flZMNmPIId- zeQQq#8qBrM$2T+$YhWbGD5jF3IrX~}{RPX4+sfQt_rLMgWpV!- z+y=ijM$&0NJzuVvcQUiPfx4F-RM3ElCkdjc$N@+sl0a_IbC@op4TbWekUoxzhFJja&=-(O4r-uVI_hffxz^RbZlY8D>Q3K6*vCHhu;(1K zUB@$)(9VT4ZF}ni4?B73Ri1)%MqjD6*WBY~=5ww(W@_#}DJ0?O?3WNUigH*fVr&Yr7>oXC|| zzw=95dG4@}ebXs&s@XUH_G$t>+w)%Xq60qUy?*-Z^~8ONquwEISC!ZOy!c!OfBCXM z|MKY*{oK=m*m)=U_~jpTtwX;3|0e$b*Qs9qR(2lxX`)Mf2X{ZGedva8*N1g(X9ln! zBR9}>`d5GehkUg~c&t}1(F1^cmwT^QTV2<0J8}iZr+;h5f9p3)prw2PsDW1^fc!9c z*LQbS5^(b7cl$?qCkTUL@_(wwg9(#*ZYFvJ0B*wPxyn4 zXIpbnXGpknBuI2_M;;ycS}M4KP>6p&IA<^jcQQyNTeo^)qGg(wd^;G0?6-mj<2v`} zfpO=9NcVqJ_i|n6T3^_LENCSHn1@tYXM|{j$9IJWsDSA}fnNBBf(U>;(tokHfADu_ zWygA0=6Q11fr&RJmnUqBz;(O-r*u9ThapIMb9jPNS8j2KeIA(R|kcR*c4DAXov(@dc^oyga?PZs94%`jSHYvTID4i z7>BO4iP?sT#As0D$c)&SM+4`JZP^IA zfH)^{(U^ix=#JHRjpb;L%4mD5NQRD=dAOH|QRrt`wvLbZhAmfS@KPp~H8AcMdLAf$ zg_kdfH+(-rhfn8al<0qe*p87{j|jMRB6o6}hIM>5fP1)zxmJCz=w-tAcMwT;LMa(p zmx){0dUOVCQ8#QUX^flywv$6Qec;;mHWG11glFg|_UDZICzT5bj0qTSm?kED zmUM*{hQwr*-ga{W*=R0zh-=A+QyGxrW^QIimqkgDV33gwCwEQ9YGMEk@7O79Ne+VP zZbYeERCjS(`6xiiYsBVsI7xtg@PS}iZ2A^&>ku6zQV$+?nAPTP8fQb*(1_1;c0Flw zX!nc!W^51_3JK972MH;M84jB%YDB?GZ&7wU>6%PglStWVRX1k{SC=#CX4#h<5C;qg zCkj_|jJQ`w+YrmiF06PHkrkel& From 3bd52a4ed6dedc3ea712c60734f906aa63bca8cc Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:57:56 -0700 Subject: [PATCH 09/80] Delete app.js --- apps/bradbury/app.js | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 17:58:33 -0700 Subject: [PATCH 10/80] Create app.js --- apps/bradbury/app.js | 99 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js new file mode 100644 index 000000000..dfaa3485c --- /dev/null +++ b/apps/bradbury/app.js @@ -0,0 +1,99 @@ +require("Font7x11Numeric7Seg").add(Graphics); +require("Font5x9Numeric7Seg").add(Graphics); +require("Font8x12").add(Graphics); +require("FontDylex7x13").add(Graphics); +const X = 98, Y = 46; + +function draw() { + var d = new Date(); + var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); + var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); + g.reset(); // Reset the state of the graphics library + g.clear(); + g.drawImage(require("Storage").read("Tigger4.gif")); + //TIME + g.setFont("7x11Numeric7Seg",2); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(time, 97, 53, false /*clear background*/); + g.setColor(0,0,0); + g.drawString(time, 96, 52, false /*clear background*/); + //SECONDS + g.setFont("7x11Numeric7Seg",1); + //g.setFont("5x9Numeric7Seg"); + g.setFontAlign(-1,1); // align right bottom + g.setColor(0,0,1); + g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); + g.setColor(0,0,0); + g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); + //DATE + g.setFont("5x9Numeric7Seg",1); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); + g.setColor(0,0,0); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); + //BATTERY + g.setColor(0,0,1); + g.drawString(E.getBattery(), 137, 53, 0); + g.setColor(0,0,0); + g.drawString(E.getBattery(), 136, 52, 0); + //STEPS + g.setColor(0,0,1); + g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); + g.setColor(0,0,0); + g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); + //WEEK DAY + g.setFont("8x12"); + g.setColor(0,0,1); + if (d.getDay()==0) { + g.drawString("Su", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Su", 136, 42, 0); + } else if (d.getDay()==1) { + g.drawString("M", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("M", 136, 42, 0); + } else if (d.getDay()==2) { + g.drawString("Tu", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Tu", 136, 42, 0); + } else if (d.getDay()==3) { + g.drawString("W", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("W", 136, 42, 0); + } else if (d.getDay()==4) { + g.setFont("Dylex7x13"); + g.drawString("Th", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Th", 136, 42, 0); + } else if (d.getDay()==5) { + g.drawString("F", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("F", 136, 42, 0); + } else { + g.drawString("Sa", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Sa", 136, 42, 0); + } +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first +draw(); +var secondInterval = setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +//Bangle.loadWidgets(); +//Bangle.drawWidgets(); From 3fc8f407ff34cf5ea8ad601c2d96c52dc21e3087 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:03:07 -0700 Subject: [PATCH 11/80] Create app-icon.js --- apps/bradbury/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/bradbury/app-icon.js diff --git a/apps/bradbury/app-icon.js b/apps/bradbury/app-icon.js new file mode 100644 index 000000000..d5bcdbd6d --- /dev/null +++ b/apps/bradbury/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwcCkGSpEgwQCChICFkgCBgkQoMEyFJAoICByVBkgLBkkSpIaDEwWShEkFgcIBAIdCEYQCBAoQdBAoYsBC4Q7BpICBEYQCDF4Q7CEYYCCEYUSKYYUDyRlCJQQIBNYYvBMoQCBkgjBFgxxCL4REDFgaPEHYgmCIgosCNYZEEDoZ0CNwY7CIIYgDEYtB9+e/dg/4AB2EJkYEB/mC/fn33Ivvz598v4MB/0BgoRCyVHvmW7Mg2EA8uD/EAh/IkGP/8AgVLtkA5El+FJvoRBgmf4Mkh0HkEQo9kyEfkeQofsgf4kmPCIP+h/gwULkkCncEu/ZsmRI4cEv0H8ESpdgEwMjwXI9kTCIOANYkSEYOCncF+UAjuR/ED+FBg/3/f8RgNgiVPkYdBtkT/Egv0Il+AoMfI4PgyX7vkW799F4Nl//4//woH/+0Ztvx7Fs335sk//5EB/IRBhACB77CBpEkgEIgGQoDRBgEggVBgDdBgGAgPv317ku+5cj334t+OSoI+B8gCBtlx7dkuFfgvx4N8yPbvgOB8ACBR4MA9mf4Egz3IgeChEDwDOBx/AjuCoN8y/JgkX4ME2FBjuQn65BgMtwELkGOEYOO4Mh2EJh+Sh/jOIMd+3fskRcwMTEwOWo98gCSBwFJkm2pfgx3II4PBk++/aABhEfwEInpZBvkX7MkJQMl2FHfANBjgCBlmQhHsgwjB33IkeyBAOChMcEwM9+/ZsBHBboMJtv2hd9+FHZANBVoM7kGC/fv2FJ9+GEYOAh//+UIaIMBkkQpEAHwIIBoMgiFJBANJEAMIkGShEkwQIChIIBhIIBhIaCkmQpIFCgmSEwYpDEYwCCpAICBwUEiQdFEwIICyAIDHwQ7CEYYpCEYWSpA7FDocSEwojBCgIaDIgYCBNwR0BNYYjFEwZTDLgQjGOgYvBEYQ7ENYlJFgQCCDohuGTYpBFkhoCSoQICEYIA=")+strPostfix From e3ca5d217aa94e85972b403b72bc120832af6f14 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:11:02 -0700 Subject: [PATCH 12/80] Update app.js --- apps/bradbury/app.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index dfaa3485c..f5cf0f411 100644 --- a/apps/bradbury/app.js +++ b/apps/bradbury/app.js @@ -4,13 +4,18 @@ require("Font8x12").add(Graphics); require("FontDylex7x13").add(Graphics); const X = 98, Y = 46; +function getImg() { + return require("heatshrink").decompress(atob("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")); +} + function draw() { var d = new Date(); var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); g.reset(); // Reset the state of the graphics library g.clear(); - g.drawImage(require("Storage").read("Tigger4.gif")); + g.drawImage(getImg()); + //g.drawImage(require("Storage").read("Tigger4.gif")); //TIME g.setFont("7x11Numeric7Seg",2); g.setFontAlign(1,1); From 5347b4c5e5a5cea29886af3e7a4041627f5ec2bb Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:17:23 -0700 Subject: [PATCH 13/80] Create metadata.json --- apps/bradbury/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json new file mode 100644 index 000000000..35b306219 --- /dev/null +++ b/apps/bradbury/metadata.json @@ -0,0 +1,12 @@ +{ "id": "bradbury", + "name": "Bradbury Digital Watch", + "shortName":"Bradbury Watch", + "icon": "app.png", + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "Seiko", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + ] +} From 801ffed177c2938b8f09ed3042b6ecf189f94436 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:39:23 -0700 Subject: [PATCH 14/80] Delete metadata.json --- apps/bradbury/metadata.json | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json deleted file mode 100644 index 35b306219..000000000 --- a/apps/bradbury/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "id": "bradbury", - "name": "Bradbury Digital Watch", - "shortName":"Bradbury Watch", - "icon": "app.png", - "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", - "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} - ] -} From f90e2b878719a9975d5e84e3f471f2e4b1d9e9c9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:42:41 -0700 Subject: [PATCH 15/80] Create metadata.json --- apps/bradbury/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json new file mode 100644 index 000000000..f6d2a7a0c --- /dev/null +++ b/apps/bradbury/metadata.json @@ -0,0 +1,12 @@ +{ "id": "bradbury", + "name": "Bradbury Digital Watch", + "shortName":"Bradbury Watch", + "icon": "app.png", + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "", + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + ] +} From 103b800dc096cfe3a692aaeb2d7682aa8732f052 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:45:20 -0700 Subject: [PATCH 16/80] Update metadata.json --- apps/bradbury/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f6d2a7a0c..f064df9df 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,7 @@ "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "", "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + {"name":"app.js","url":"app.js"}, + {"name":"app-icon.js","url":"app-icon.js","evaluate":true} ] } From 79136c502756d499f0c572107d2ba9c77a6e797d Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:47:19 -0700 Subject: [PATCH 17/80] Update metadata.json --- apps/bradbury/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f064df9df..f7e634341 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,7 @@ "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "", "storage": [ - {"name":"app.js","url":"app.js"}, - {"name":"app-icon.js","url":"app-icon.js","evaluate":true} + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} ] } From 88f263aec548e9779e354cf81b117de430611b7a Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:55:46 -0700 Subject: [PATCH 18/80] Update metadata.json --- apps/bradbury/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f7e634341..cf7e26e83 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,8 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", + "tags": "Seiko," "Voice," "Note," "M516," "4009," "Ray," "Sci-Fi," "Digital" "Watch, "Clock," "Vintage," "80s," "Ghostbusters," + "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 001cbe87fece95cc020e8918237808eba95cb373 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:01:08 -0700 Subject: [PATCH 19/80] Add files via upload --- apps/bradbury/bradbury_icon.png | Bin 0 -> 4121 bytes apps/bradbury/screenshot.png | Bin 0 -> 7588 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/bradbury_icon.png create mode 100644 apps/bradbury/screenshot.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 zcmeH}_d6B-`^R4*du4{mUfHW~taI!c4(AxjK1MQ9wvKV^2xWFe*(;k9vPWh}vNKLX zcxOZz=c~Wt`*~j1^M3wx|8PI9>%OjM{9R)m8cKFb0051iuBO>#O8qlA@#VB%plG}d z3LjmoM*vVU{xcECd37BCN)vY&?CxDRZ-4JcZr(oJdN3HbkDs@z`vVsM0_U*iD7g71 zi^}oRA=Dra{ldW8jG3I<44Q~$N);64p`h1~<0+VBHto8mrA5Lqm>)-+oQzIlHWi~z zp!`a<&hsWY>TO)Y(CJFZThA|T$KOXU8fR2DDi5&r<7A!W)ET<6rt)a&GAP%zZ&3ri z{VVGd>JgOuK7gLQ-kImoIUf-?35P&#@ph7Z07QXPROF!3D7RDUMl6AD3z}_9gpMZa z^iREGK#pbt>cPp-VxX=~gvMqGnuB~2U_b2SxCZWu1AC#T-=_c?dy*YO1Z-aLFcamc z0&Yf^I8ETD3@XPh6SM$Q3NX1E^eTd{;y_9d;i?O2nnC9nJyjhbrv_4{aTpOm5(4Z8 z`S=1sbT(kp-bX-w-KwVF5WOUoT?fJOD{4j9kc<10ArKN=!ee@@x0n`SRL>^T09M>aj6}}X|DwAaNOfn5?eJF5K0$BC|Wbn1;De{&9T;Pa1-R>5=J>@0qL{i}X2)W%^55q5#< zzTb&BfAA+9a&~<5?ZYa6gv`AN9g>r8-6MyFMK{LND54z~zNhG%HB%AJIH!1f^&D|X zQKmIh2H#}OoTLMpBHnmtnn<6(B*A%gS?rWpby*(Nc&HMEq>7i`b0Yq2AViP!?_50w zV87M7>$5O9G1@I^Wjuher*^KBF96W4dTG7@*lF@hz=!J92FL->%#RSQ(cn1jx-Qm9 zdZX*=LKoGUy+SmUzqcDo52bWQ-|({+sf>gQ$Bfo+irPzlR_B!KGOwrHVM z@uBd{x+N$U~nEPmhFk~J z`H}g9_%MK)CWbj`APyzWmV2G-I*Kje`nxQ{Vz#M7wgI@*ZRzc-jcmGXZwsVolV~V& z>Ja5i{g;9-IYcGlW#z@?OXXA+2NuKdlrlT>uxf1!S@X3riq9Dp7UkHx+vXhRs50f! z*m6{jcurXuEXgnX}H?dWXi6VcYJ zbI#U8mGZIzMVPF+sQ zMrH=GLbt-SLT9^Op?aqTTimYIYIPbxt1+N2WGkeDN*TL~-7uduUo4?4VKGusI;xf^ z_blQlXw?kpcv!NVmG{98ooDD>vJ}+5@%KiUu<@C4mFaro|>O@o_g#$q)*=0 z8^S3$F#pRGcCSYrR^;%~A#)`<6*mESJFWdpn=Z+{-*%0E&8y$5|E(aYAdjGd(U#F} zj+qgzSfp6lP}y)`bY%3+=$CByTovgVnT_0y+?m|vW_#;EYq6%%rWO~yx^?SftKFuy zhZt)`t0JU@^}TxSDr}X&m)5G*l4~V6<82%jJ?`b3+p?~*px&e$LYtv z%C0pr4vX}8!eb$$OM-+L>;lSkOx`rPiF z()oA03cK#Ru?w$97)H4YCW{RIsqk8>P%5%9g+yrJ4foj~~lXQ|yMO4ky zG#3SwA3N-^s{U5>d%dQ*2D!Z?vt)ID=V+N@&OYIut&?9e>F2SmvT|kCW`OG_2orX z%OyM@bGP5iy;tj(aJ3qlMq-hA4-9T7N{Ch~JbdtB`E2JPb``rywHCsfB{_J{C#Ybo z`w&yYQYOJ5rj(&>7-xLv#eW*~qNOZJ0{e^s0?Cv?-JIPhUdaiCiMX#YTTw3KeO*zb z;IyBqZSq0PjcwDql+4D9-8pFk0r976LC){2#DoX9rQE92qeWB$%M(ItcE!20{ zC&QI4n7WI;hl$OSTrbH!de%R$ylN#**#s^A0k;;O5hbfbxgcCSM&pMRGb-|KjqZ%p z56wTn{c7(uVTYlcVI{4pD8>LG&WZfqUg@D&2k{M>r(9#cdMn0~v=Y*i&?M?LZBns= z$gB=;7YsJ?jIiq(itK76^4zAfpu}Uswijl0?wKGZt(F@d{>ETARGH%ws+s0lGnt=$ z6UlPx=q0K1I{GLhskY;wSfo9pVVdv<#*1Tlq zsPKGiR1*yMwgb}A=2G%;Y*bkdUI;&g|Ai~;PA)b&%$z)&*yRXm`z`l#dfuk(_+0hl zhj|Mk3!`b*X_r&I)B0nz>iF`_lZ;cZdsW6>zB>cNlf>s_e6&q7xX;s^lPYktlrOio zb!Z1}ez?Hy1&Grq&{#Zs)xXN;qZzcmc}%f<%tfO#_arH#a)oT_<`Yg7r=$loXFo?f z*F5Lc#?j`z$%yL2m#wAXGoAUHbg$$fRzdm)@Q?0un~_uLsQvLI>`QD|xWu0Y`}sFb zAsbF(%N}&zd++J}S0=Rxi5tpo%44?sE&ls;^LR!?3nJ&8(tWQj|1HQx`jp8)>#NqB zYMiYnZa28SF~s$FlOyl;*y3S(&@UFkm+3r3mBsdhVDIC;r1k-p%)S z_j7&t7$_@kcW8OK(-p7~z`6H!na*TAl>4bL!R=4&k@=^R({#4qO z{}K5AMj#pEUwWHovW&bgLCj>EkI^X8dUT^zof8`)qx_M+-I(#71Z+%}&mELFNab~uT z-Aus3kCS+O9?i`>#Cc%NStGAsqb+j^-QS#uLr8U!e_Kv|a1fi_1v!q*f0e4(4xKSL zsGbQ~GInv15#hF1w?`V47P?E9(@#;-(ddfFy60D26||-=U3WGY2mHS?TG{p5%P&ytbqzgICBOT>hw?-iJ!RJI9~ zbGJ0dkRL(-S;>@~f5pU;qLw}%oti*yokm9Stii+jPh6N~s>c)juj=a$iKn#@wfr#; zNG-VsxgY%wB^QoH@;`~gK9Brqy7(zjroe-E|6BPHgM{OopI(Lcf@qxo<0bZZV)aC& zVca4j65@`?=^Ay=^vp`S+HE9dSDQdqE1dtB^83sf=i6V-uZyCQ@&0$V`+h&h+~N62 zjlpDpyJpv7acxWWRsHd>WiLE(H?;JdA|4L&geaY_9b!Wtm+;@@6e%&sD@nJEyxCLy z{aNLY@5MrZu7qq_tnkD4fn4>fMh(itvO^ssEz44Vr;BG&nSrlnai(XqPFxpU;kjOr h@~5oBunYPN8t_3vbhkT`&EenQ=xG^iRzvM0{|{AGLRKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000utNkldJ+NI(v zC@qBYRg)UX(66%PWFEupug$M2Z5H1+QrZaQK%qg0mc-79Z$vmUzPHz5P;f~%A#)O5#Nvk2*xE$`d3;Dvl_`z4k_THeMJhGkO6kc zFk&KGl1m0L6Tbf!d08WY00ICIu=9?CiHOZc@mEyyTb}6ptNkk&+Nu2&T`fdc%i$a= zJwJ{o>@)!)N=d=kPj9cr-(Y~waN1Y+(Hl<-p@F6>L)c}j9J+x0|I7d~Y}#I`b#vB$ zFJ_1HBR%U2btTt|qp z6>!XCk_~|>v85QeiZ^*?2+S+4i;~6w#Y;L?M*63tZ3U&~%P8(b_$rhJ$h}6nh`sz` z1kZHNWx$C)v$kEKWqj97B>hC|GA2nbisf8p!T}6h#$2W@*C7!TZ@-WV$lF^)tCu5a z;A{|)bPZ86gS<|mU)YKXb?r#A=U_=R*EC^j>Dv{-l%;hqX~Impz#Rypu5&l_eoz>g z?`+{aRwZE}7IwnOMgz1DJTu3ta8y^WtncMWBAwUS?3u1Uk{>#ba zv(SJjCqfoFCXA961_VpQ7YnwAH zZn$c8p_a9=KINZto8+)9b$g7h^k}kBb&$+bS>II?sG+i% z`55#J>SgjH)mPsN6#^gd?!r;IRj|@?2qK%ue6E{&8Kpr!*lpGTKN%!ssqs&;tx|PI zZlyQr8nPM2?v3~ox#6+P8?~pFN9G!;gy8a_T?BDgYDg#mEipnADTK{jYWZd@f_Ml* zkP#t-H{M;4?!F*(OI%OOvkM_=XaT{2t%VSnju2~hub_$2*w8COz;h;IVZ)DTq7xx1 zGK4@Aq8*}Qx8^P*1Tv=;&0?t2lh5*KEXP}8oL};zJWIOb*vs^AKq{YFo|+vZfBsde zfkZom*CeI3%{m;jhIKS&bX4TKBz9}}@p53Yo5NeDh65G0&l@AII-peiA!?S&4yI8- zi1^S|MYuK&uBDt-PHrxD=G?`6Wc3$#lX)5X5u*HULx_*TW0QyVi=2+NbvXrb?d51W z<281THfh>UYa&F2ceD}W`}<>yk}+Y1CXVj~Z2NNi0)o45jgz(Lph6!xPRQ{|{#yKk z#`iJ?Wr%Ae3?m^P3E|XecsWcH)itvpPixB%$%r?77?K^0zg7$$z9B;VW+SMOAHxZh zRMH%@L$*1b1tCIy4Iwfa5ivrLa&CmC>~@}t5ZBT~I8~Mzi;p)a_VHNp8t)*IG>!^F z2xq_k6g&`l%v}%yz!YoxBk3`m+0{`YrkEN+Ktu>?MV`AOLWnE%{X1J64i8cp7$wP5 z*OXL*sCZ1NmdfdN2r7?w_gX6L<3 zM-DbS1lL%^u<2SpEb6S0Su}IGZD>7eb~3xjLmOBu6M-PqLvL)cUO5m#maGOXmE46B zwQ{D{c(#Jmuua7>pKmWCpZAZBA!69Zwy;Or8T|xEhb)yHc0*%1KeSYakT$Mf87-Bu zj4A7htjU;vw#YP&UUIQQ&#+WZu?5}1q~X}yGEzXMdA98kiH!MIjS}tGGNdpcud!5~ zVbT!0pqQI=-Lh`8YHJzD>=4apRt}DV!aL&~mde}MA!41gVySHIWsuh&f?Sr$c(ZPg z1cjGbD(4v#!VX9&L#R?kA{j(`U88mg$`GO+W5$XQ*#>UBjk_$Bl`e3Ip%#y%LFz`K zSx~WmVL}MX5W*72%8d|wGD5t-QrRm*D0>!}$J9214TPXlqx_g7nVpCbN0>`-AR1l* zX2Vom&fFR=l_BQ)Ly#qcOvSosMTny{Z?aULVTW*-u4e#K(^83+t=ej-jOieC1%pwB z81$*^C}&oUBMP%&SVXTlNz0%tKx4coB;rpu99v?MiAI6nh3ZJ%@VYO6}XsIOKhV8IJ9RJ~H{8I zQ&->1a#9dxWdh`q>t9tZw)uyaH=;Dw&@xKj$uWXypwe@z*pkI`EAdRdN3 z@+c2nkkjj8To`KmLl6l&;6$pYjJlVROA>$8yMEkS#!kyihB!@zAj)^TEBoLL8G_24 zZTlT84m-sD8&QA}pB+MDv|bgzPlm8;Hw^Am^z3Ey*`sPQgs^MT8Oe5vrBdhFzBiU_ zg7d!W-lyo_%h06A88XC4dl?CBuDy&a?A8JWh-Y)_10fLmGnspPL}M5u*;)|-7KHHK9l77U(lMF{_s!$DogGIqVjaFVA^8%|qo}ml zz0L8rkoywdEmMZ0g}_ydxwqhd#aq9Yr*cOQH6z)cgAnm}c_<^9As|^pUaC@S-^xWc zml0(gZP=e-ZKBprff{NjGKAljn-JPk1*AC0Dnh^#>v{r06oGp?@iyuo2;EdgQVWw> zGWv_@qwED@szMVXB<`SKiMsl`@5`_v1iZ1XI}w6B2ocj0MeCTX{30KZ7%gIifP@et zHK*Jmp*eBvHTl3KLr_g})Z*aR5JJ8$1IoX%5aNbUy0Vr|iPAjlJqUrOmf@BmR=R~X zf;wafIU0V=zFpY1S9&TnHRt+IvRhM!Kg3FpA_+AnDNFj#NwMfwx(Pf~e5zr;@4HNk zES^RR0q)fZw@sf)4LMeN8c8te2odJ@uXR%fbwra{$+~DSdvYc>KtHR~(n{C!El;bx z(zusFv+h$_>8H5VT>s>?`NHW_)Atpb?~j~?ZT3|GgI9rZr_eQqH1L&UWL%?TZy$!g zvW%U#=hydZgf6`^I;B1C`e@SVpYc^+n=uJX&XdOaO78i}5?!jpGaI_5YK&y%`l@no zj5pRlJT2_g)%(h^kG#En`IH`}^4cNpH5E(n*sn%L!z;tpWC#r74~CJSPLmc##`kQ* z#w00zgtwB*>v}!^J6pvXi}hS-rIl8yr{3euE4`2wjvcT?4J++5@gdO{D%$ZLCl;3W zSjr5rWfseXp;B$PXQU&Q?lh}lTf^pdgsE|vT7Dm)aBt&6kXP}9+T=1v7uX*0WRQ~* zA2h>V#M_bTRg5%1a}9Ns`8YrHI9L!0ZU9gSk zTMT!++Pw%EWt0Xw%qJZy+pg&t<%Xu!wPt#d^D(bgwNgwE9~bSrHXbeemh4$ogNWoZ zGtBC;r3?0jK1H#r=U)i1Qh^XZmj%u+d|j|5+kts5i3B!@!CM_Sk!B&pN(LE%9~c`% z(K6H}GPRH4ZYGoRcS^52ga!e7N`zp3YNQy~eToyoadS{@7B{!j>3U+t4)NH~L4Zk^ zh;1~}yhdC8hI1>W)I+k06Ktl44-Hsq???|m4VI_(*1GG+*L9pcF1XQN#yiBK0T#pI z$~YEtigylX`F|Cuk9*aMEPd!*2m9cs8*OUqyf(UwnmZcsD`+$!#0xmZsVG9xMb?~L zH7FAh-=kA?11MJzLMXz#R-UM0WOlIfD&Lb9EB^=~$n0hjWC)nGTk@FOM!d8K8G!>Q zTXc}!USXjd_BUf3A^Kub!ze>w9-W@;l{CGy5;H7!j{jDYz@$8a>I^eAQP-)2aX59! z(p5XexonHCwC*@5m0flSI^TVHdO7f9;9sm-{xw2aWr&Uzdl$Wty^Z)X*hM+ZjR%KqMzQSFGD@5F1e-PgUV4}-Lwx!K@0%JJ(vw?gt!17K50#b5 z7b3(6|N79ol4mc2uWSIGC_`K+aM7<<%pI8ePY{B=EaM&b=HS=lf;;usm{Yb?^7DZK zzv~PCh%77`gvDem*dg#De~9b16&|W(2xmLrk+?YjTFKdIN) zu+M*@Vq7dF{YrKj7o|T<>EnGW#sxwWE~kAGwIv`BYxESUtyiF_9QBsgb%20l4II{AjHC1~!1%)N3Y$ zG_Yu$^kF+l?mL$;Yt#J&djI&cW}bQT1PtTTbd6)xAHp*YCplH~GpFCvY(A;p5w!k{ zFT0bRsvo-aZ)K^3pQ=p$5b(eTpWI2l_r!QdufEs7=0)$S7cPX@``}h7I-sWa>2tLX9EVHWpbc-A$S%-tRx|Xh1nFh%HR6VEsMZmU*+95Z(+tF zZaS(pgHqTd{s;)cBwWIFwy1nVk^7w(P@P=izKrrFKc?hf$43sqR0gl9MdL%%al?fx zvX*6X6NJd`Z%yy|TnO=S`5?cX_mEJJF-z~IM(QBLhFNAX?hX@tGKF1v zN_d+6BZh~P8unYjw^IQh7p)^=)i)F)E)XEDTo1F{*;$es5^9K8)u*b%=TZr`l>Wh< zk8I?N29>@$Bc`xOjm>*c!ddhk(>|0!4Tve`&@$LIJWGOqxa~p4hQLz}I|TF-qe1hu zEf#R$?e~lfYG)Qcd z%Us<0C>pb9lBE)3T%3A$4X%&caZkObGP#FUDyc4U|7z`Jtn_?&BAMK9caWyGO>suD zhcy{l{XAox*=>IqJ{{H3>*?60`OorCwE2~8BUt1F@NWQWZo4c6<+JGk0000 Date: Mon, 25 Apr 2022 19:02:22 -0700 Subject: [PATCH 20/80] Delete bradbury_icon.png --- apps/bradbury/bradbury_icon.png | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 19:02:47 -0700 Subject: [PATCH 21/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index cf7e26e83..fa9d477c4 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,6 +8,6 @@ "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury.img","url":"app-icon.js","evaluate":true} + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} ] } From 62f9b9cb81727b16688bc90d425ac9b766a23894 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:02:58 -0700 Subject: [PATCH 22/80] Add files via upload --- apps/bradbury/bradbury_icon.png | Bin 0 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 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 Date: Mon, 25 Apr 2022 19:05:26 -0700 Subject: [PATCH 23/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index fa9d477c4..67d91d687 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko," "Voice," "Note," "M516," "4009," "Ray," "Sci-Fi," "Digital" "Watch, "Clock," "Vintage," "80s," "Ghostbusters," + "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From ad93ac191bfb999819fa3b805ee5053311444331 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:06:29 -0700 Subject: [PATCH 24/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 67d91d687..3dbf56f02 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,6 +8,6 @@ "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} ] } From 8fbd6fb23313c7c4d6d96e4b0090f6ca17cb12af Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:07:02 -0700 Subject: [PATCH 25/80] Delete bradbury_icon.png --- apps/bradbury/bradbury_icon.png | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 19:24:54 -0700 Subject: [PATCH 27/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 3dbf56f02..c736cbac1 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", + "tags": "", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 730d9a0e8b3a7f331db1431d04e45aee4a92fe61 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:28:04 -0700 Subject: [PATCH 28/80] Add files via upload --- apps/bradbury/app.png | Bin 0 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/app.png diff --git a/apps/bradbury/app.png b/apps/bradbury/app.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 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 Date: Mon, 25 Apr 2022 19:28:23 -0700 Subject: [PATCH 29/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index c736cbac1..862c5c575 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -1,5 +1,5 @@ { "id": "bradbury", - "name": "Bradbury Digital Watch", + "name": "Bradbury Watch App", "shortName":"Bradbury Watch", "icon": "app.png", "version":"0.01", From 0a73ca53dae1cd86a80d34275c1da22d9d97bc37 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:47:07 -0700 Subject: [PATCH 31/80] Update metadata.json --- apps/bradbury/metadata.json | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 862c5c575..375fe95f8 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -1,13 +1,16 @@ { "id": "bradbury", - "name": "Bradbury Watch App", - "shortName":"Bradbury Watch", - "icon": "app.png", - "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury.img","url":"app-icon.js","evaluate":true} - ] + "name": "Bradbury Watch", + "shortName":"Bradbury", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", + "type": "clock", + "supports": ["BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} + ] } From 0530caa755dd37a148bb7c5819dd0966ee418c46 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:52:21 -0700 Subject: [PATCH 32/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 375fe95f8..09418166c 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -5,7 +5,7 @@ "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", + "tags": "Seiko", "type": "clock", "supports": ["BANGLEJS2"], "allow_emulator": true, From 471b2db4d2f1c95a1bd4b5f77fe7c0115c09d31d Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:53:45 -0700 Subject: [PATCH 33/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 09418166c..8611bb3cf 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,7 +8,6 @@ "tags": "Seiko", "type": "clock", "supports": ["BANGLEJS2"], - "allow_emulator": true, "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 11165dd2e780949d58e6602d9793b02a21e164b1 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:55:06 -0700 Subject: [PATCH 34/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 8611bb3cf..bce143037 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,6 @@ "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", - "type": "clock", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 7ec8ff4fdb9eadb3fe40848cac40390e4cdaaed6 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:56:04 -0700 Subject: [PATCH 35/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index bce143037..6a4211914 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -5,7 +5,7 @@ "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", + "tags": "", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From ce773d6f158aa47d2eedeeb140c146f46750b971 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:56:22 -0700 Subject: [PATCH 36/80] Update metadata.json --- apps/bradbury/metadata.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 6a4211914..1110f0948 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,10 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", + "tags": "Seiko", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From e9bf15f66a02e4e211e3bb0ac62e5b45246b93b9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:58:13 -0700 Subject: [PATCH 37/80] Update metadata.json --- apps/bradbury/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 1110f0948..6e98beb02 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,8 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", "supports": ["BANGLEJS2"], "storage": [ From 210c55e214c709cbf38131b5ac1253b0cd808415 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:59:36 -0700 Subject: [PATCH 38/80] Update metadata.json --- apps/bradbury/metadata.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 6e98beb02..a4e8c451d 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,11 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", - "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 1718a5a985ffdd15ab23bfbef780baa270754949 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:01:06 -0700 Subject: [PATCH 39/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index a4e8c451d..e3fdd1beb 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 0bd4950018939b562dd80c8f2860c37dd71bdb96 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:01:53 -0700 Subject: [PATCH 40/80] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e3fdd1beb..e07e2f0ec 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From b0dcbb0b0b0728420b2c438a3b795f33385c8814 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:03:29 -0700 Subject: [PATCH 41/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e07e2f0ec..e3fdd1beb 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From f6c9e782770ef8c1b139e55f2c1fd2b13088d06e Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:04:21 -0700 Subject: [PATCH 42/80] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e3fdd1beb..e07e2f0ec 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 5e59d3c225ab0e9aac8989666ae7f7bac321b772 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:04:51 -0700 Subject: [PATCH 43/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e07e2f0ec..2680c192a 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -3,7 +3,7 @@ "shortName":"Bradbury", "icon": "app.png", "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 6624b61b872acebfabc81ee0a70ae5602345d546 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:05:48 -0700 Subject: [PATCH 44/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 2680c192a..cb2e29876 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From f80bfaaf05216854cc9dcb7e12779de9dbc54bb1 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:06:06 -0700 Subject: [PATCH 45/80] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index cb2e29876..2680c192a 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 045f97faa9603e821ffbfa0031c29b5f984eaa96 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:14:48 -0700 Subject: [PATCH 46/80] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 2680c192a..f836f7429 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,6 +2,7 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], From 1214ac4c6cf4597df83d148b6878280fa61de655 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:15:16 -0700 Subject: [PATCH 47/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f836f7429..ec1f7ae15 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "version":"0.01", - "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 2461218ad112205628eb6763fa357b3bda1cd1d2 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Tue, 26 Apr 2022 11:55:27 -0700 Subject: [PATCH 48/80] Update app-icon.js --- apps/bradbury/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/app-icon.js b/apps/bradbury/app-icon.js index d5bcdbd6d..07c4f5582 100644 --- a/apps/bradbury/app-icon.js +++ b/apps/bradbury/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwcCkGSpEgwQCChICFkgCBgkQoMEyFJAoICByVBkgLBkkSpIaDEwWShEkFgcIBAIdCEYQCBAoQdBAoYsBC4Q7BpICBEYQCDF4Q7CEYYCCEYUSKYYUDyRlCJQQIBNYYvBMoQCBkgjBFgxxCL4REDFgaPEHYgmCIgosCNYZEEDoZ0CNwY7CIIYgDEYtB9+e/dg/4AB2EJkYEB/mC/fn33Ivvz598v4MB/0BgoRCyVHvmW7Mg2EA8uD/EAh/IkGP/8AgVLtkA5El+FJvoRBgmf4Mkh0HkEQo9kyEfkeQofsgf4kmPCIP+h/gwULkkCncEu/ZsmRI4cEv0H8ESpdgEwMjwXI9kTCIOANYkSEYOCncF+UAjuR/ED+FBg/3/f8RgNgiVPkYdBtkT/Egv0Il+AoMfI4PgyX7vkW799F4Nl//4//woH/+0Ztvx7Fs335sk//5EB/IRBhACB77CBpEkgEIgGQoDRBgEggVBgDdBgGAgPv317ku+5cj334t+OSoI+B8gCBtlx7dkuFfgvx4N8yPbvgOB8ACBR4MA9mf4Egz3IgeChEDwDOBx/AjuCoN8y/JgkX4ME2FBjuQn65BgMtwELkGOEYOO4Mh2EJh+Sh/jOIMd+3fskRcwMTEwOWo98gCSBwFJkm2pfgx3II4PBk++/aABhEfwEInpZBvkX7MkJQMl2FHfANBjgCBlmQhHsgwjB33IkeyBAOChMcEwM9+/ZsBHBboMJtv2hd9+FHZANBVoM7kGC/fv2FJ9+GEYOAh//+UIaIMBkkQpEAHwIIBoMgiFJBANJEAMIkGShEkwQIChIIBhIIBhIaCkmQpIFCgmSEwYpDEYwCCpAICBwUEiQdFEwIICyAIDHwQ7CEYYpCEYWSpA7FDocSEwojBCgIaDIgYCBNwR0BNYYjFEwZTDLgQjGOgYvBEYQ7ENYlJFgQCCDohuGTYpBFkhoCSoQICEYIA=")+strPostfix +require("heatshrink").decompress(atob("mEwwcCkGSpEgwQCChICFkgCBgkQoMEyFJAoICByVBkgLBkkSpIaDEwWShEkFgcIBAIdCEYQCBAoQdBAoYsBC4Q7BpICBEYQCDF4Q7CEYYCCEYUSKYYUDyRlCJQQIBNYYvBMoQCBkgjBFgxxCL4REDFgaPEHYgmCIgosCNYZEEDoZ0CNwY7CIIYgDEYtB9+e/dg/4AB2EJkYEB/mC/fn33Ivvz598v4MB/0BgoRCyVHvmW7Mg2EA8uD/EAh/IkGP/8AgVLtkA5El+FJvoRBgmf4Mkh0HkEQo9kyEfkeQofsgf4kmPCIP+h/gwULkkCncEu/ZsmRI4cEv0H8ESpdgEwMjwXI9kTCIOANYkSEYOCncF+UAjuR/ED+FBg/3/f8RgNgiVPkYdBtkT/Egv0Il+AoMfI4PgyX7vkW799F4Nl//4//woH/+0Ztvx7Fs335sk//5EB/IRBhACB77CBpEkgEIgGQoDRBgEggVBgDdBgGAgPv317ku+5cj334t+OSoI+B8gCBtlx7dkuFfgvx4N8yPbvgOB8ACBR4MA9mf4Egz3IgeChEDwDOBx/AjuCoN8y/JgkX4ME2FBjuQn65BgMtwELkGOEYOO4Mh2EJh+Sh/jOIMd+3fskRcwMTEwOWo98gCSBwFJkm2pfgx3II4PBk++/aABhEfwEInpZBvkX7MkJQMl2FHfANBjgCBlmQhHsgwjB33IkeyBAOChMcEwM9+/ZsBHBboMJtv2hd9+FHZANBVoM7kGC/fv2FJ9+GEYOAh//+UIaIMBkkQpEAHwIIBoMgiFJBANJEAMIkGShEkwQIChIIBhIIBhIaCkmQpIFCgmSEwYpDEYwCCpAICBwUEiQdFEwIICyAIDHwQ7CEYYpCEYWSpA7FDocSEwojBCgIaDIgYCBNwR0BNYYjFEwZTDLgQjGOgYvBEYQ7ENYlJFgQCCDohuGTYpBFkhoCSoQICEYIA=")) From fcb8db009535a01ae8837b1b81799f2d0b0f7059 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:21:40 -0700 Subject: [PATCH 49/80] Update metadata.json --- apps/bradbury/metadata.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index ec1f7ae15..6fa03e7ce 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -5,6 +5,8 @@ "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "type": "clock", + "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 2215e487a002d85bc33ec7716550107e35a8063e Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:27:50 -0700 Subject: [PATCH 50/80] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 6fa03e7ce..64be5d524 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,6 @@ "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "type": "clock", - "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 4b1dd4f71fda6bcf79ac388a4a86fab0c3a2fe9a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 27 Apr 2022 21:22:33 +0200 Subject: [PATCH 51/80] sleepphasealarm use Layout library and display ETA --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 58 +++++++++++++++------------------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 94ad5852e..53c993376 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -4,3 +4,4 @@ 0.04: Read alarms from new scheduling library, account for higher acceleration sensor noise on Bangle.js 2 0.05: Refactor decodeTime() to scheduling library 0.06: Add logging + use Layout library and display ETA diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 0a8e83a08..a2c8504f0 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -1,4 +1,6 @@ const BANGLEJS2 = process.env.HWVERSION == 2; //# check for bangle 2 +const Layout = require("Layout"); +const locale = require('locale'); const alarms = require("Storage").readJSON("sched.json",1) || []; const config = require("Storage").readJSON("sleepphasealarm.json",1) || {logs: []}; const active = alarms.filter(a=>a.on); @@ -54,53 +56,45 @@ active.forEach(alarm => { } }); -function drawString(s, y) { //# replaced x: always centered - g.reset(); //# moved up to prevent blue background - g.clearRect(0, y - 12, 239, y + 8); //# minimized upper+lower clearing - g.setFont("Vector", 20); - g.setFontAlign(0, 0); // align centered - g.drawString(s, g.getWidth() / 2, y); //# set x to center -} +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}, + {type:"txt", font:"16%", label: ' '.repeat(20), id:"date", height:Bangle.appRect.h/6}, + {type:"txt", font:"12%", label: "", id:"alarm_date", height:Bangle.appRect.h/6}, + {type:"txt", font:"10%", label: ' '.repeat(20), id:"eta", height:Bangle.appRect.h/6}, + {type:"txt", font:"12%", label: ' '.repeat(20), id:"state", height:Bangle.appRect.h/6}, + ] +}, {lazy:true}); function drawApp() { - g.clearRect(0,24,239,215); //# no problem var alarmHour = nextAlarm.getHours(); var alarmMinute = nextAlarm.getMinutes(); if (alarmHour < 10) alarmHour = "0" + alarmHour; if (alarmMinute < 10) alarmMinute = "0" + alarmMinute; - const s = "Alarm at " + alarmHour + ":" + alarmMinute + "\n\n"; //# make distinct to time - E.showMessage(s, "Sleep Phase Alarm"); + layout.alarm_date.label = "Alarm at " + alarmHour + ":" + alarmMinute; + layout.render(); function drawTime() { if (Bangle.isLCDOn()) { const now = new Date(); - var nowHour = now.getHours(); - var nowMinute = now.getMinutes(); - var nowSecond = now.getSeconds(); - if (nowHour < 10) nowHour = "0" + nowHour; - if (nowMinute < 10) nowMinute = "0" + nowMinute; - if (nowSecond < 10) nowSecond = "0" + nowSecond; - const time = nowHour + ":" + nowMinute + (BANGLEJS2 ? "" : ":" + nowSecond); //# hide seconds on bangle 2 - drawString(time, BANGLEJS2 ? 85 : 105); //# remove x, adjust height for bangle 2 an newer firmware + layout.date.label = locale.time(now, BANGLEJS2 && Bangle.isLocked() ? 1 : 0); // hide seconds on bangle 2 + const diff = nextAlarm - now; + const diffHour = Math.floor((diff % 86400000) / 3600000).toString(); + const diffMinutes = Math.round(((diff % 86400000) % 3600000) / 60000).toString(); + layout.eta.label = "ETA: -"+ diffHour + ":" + diffMinutes.padStart(2, '0'); + layout.render(); } } - if (BANGLEJS2) { - drawTime(); - setTimeout(_ => { - drawTime(); - setInterval(drawTime, 60000); - }, 60000 - Date.now() % 60000); //# every new minute on bangle 2 - } else { - setInterval(drawTime, 500); // 2Hz - } + drawTime(); + setInterval(drawTime, 500); // 2Hz } var buzzCount = 19; function buzz() { if ((require('Storage').readJSON('setting.json',1)||{}).quiet>1) return; // total silence - Bangle.setLCDPower(1); - Bangle.buzz().then(()=>{ + Bangle.setLCDPower(1); + Bangle.buzz().then(()=>{ if (buzzCount--) { setTimeout(buzz, 500); } else { @@ -121,6 +115,7 @@ var measure = true; if (nextAlarm !== undefined) { config.logs[nextAlarm.getDate()] = []; // overwrite log on each day of month logs = config.logs[nextAlarm.getDate()]; + g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); let swest_last; @@ -134,7 +129,8 @@ if (nextAlarm !== undefined) { if (swest !== undefined) { if (Bangle.isLCDOn()) { - drawString(swest ? "Sleep" : "Awake", BANGLEJS2 ? 150 : 180); + layout.state.label = swest ? "Sleep" : "Awake"; + layout.render(); } // log if (swest_last != swest) { @@ -161,6 +157,4 @@ if (nextAlarm !== undefined) { E.showMessage('No Alarm'); setTimeout(load, 1000); } -// BTN2 to menu, BTN3 to main # on bangle 2 only BTN to main -if (!BANGLEJS2) setWatch(Bangle.showLauncher, BTN2, { repeat: false, edge: "falling" }); setWatch(() => load(), BANGLEJS2 ? BTN : BTN3, { repeat: false, edge: "falling" }); From 89b4a6b02cbd88574b387cd27f80fcca8dca9c46 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 28 Apr 2022 02:11:08 +0200 Subject: [PATCH 52/80] [alarm] Fix redrawing entry inside edit submenu - Fix redrawing selected Alarm/Timer entry inside edit submenu through opening the menu after a short timeout. - Removing the obsolete check-mark images. - Removing format on boolean values to use new check-marks --- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 10 ++-------- apps/alarm/metadata.json | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 41dd93081..9daf7bcbf 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -24,3 +24,4 @@ 0.23: Fix regression with Days of Week (#1735) 0.24: Automatically save the alarm/timer when the user returns to the main menu using the back arrow Add "Enable All", "Disable All" and "Remove All" actions +0.25: Fix redrawing selected Alarm/Timer entry inside edit submenu diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 3b3421115..d454e85dd 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -45,10 +45,9 @@ function showMainMenu() { } else txt = type+txt; // add to menu menu[txt] = { - value : "\0"+atob(alarm.on?"EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g":"EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"), + value : alarm.on, onchange : function() { - if (alarm.timer) editTimer(idx, alarm); - else editAlarm(idx, alarm); + setTimeout(alarm.timer ? editTimer : editAlarm, 10, idx, alarm); } }; }); @@ -76,7 +75,6 @@ function editDOW(dow, onchange) { let dayOfWeek = require("locale").dow({ getDay: () => i }); menu[dayOfWeek] = { value: !!(dow&(1< v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => v ? dow |= 1< v ? /*LANG*/"On" : /*LANG*/"Off", onchange: v=>a.on=v }, /*LANG*/'Repeat': { value: a.rp, - format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => a.rp = v }, /*LANG*/'Days': { @@ -125,7 +121,6 @@ function editAlarm(alarmIndex, alarm) { /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), /*LANG*/'Auto Snooze': { value: a.as, - format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => a.as = v } }; @@ -179,7 +174,6 @@ function editTimer(alarmIndex, alarm) { }, /*LANG*/'Enabled': { value: a.on, - format: v => v ? /*LANG*/"On" : /*LANG*/"Off", onchange: v => a.on = v }, /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index 2084c2a30..33312beb6 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.24", + "version": "0.25", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", From dade89429436201f07f9513b5a242379ad95b0b5 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 28 Apr 2022 02:17:46 +0200 Subject: [PATCH 53/80] [alarm] Fix redrawing entry inside dow submenu Apply redrawing fix to dow submenu, too. --- .gitignore | 1 + apps/alarm/app.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fce2efb1a..2b87569da 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ tests/Layout/bin/tmp.* tests/Layout/testresult.bmp apps.local.json _site +._sync_*.db* diff --git a/apps/alarm/app.js b/apps/alarm/app.js index d454e85dd..b555eb250 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -112,7 +112,7 @@ function editAlarm(alarmIndex, alarm) { }, /*LANG*/'Days': { value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< editDOW(a.dow, d => { + onchange: () => setTimeout(editDOW, 10, a.dow, d => { a.dow = d; a.t = require("sched").encodeTime(t); editAlarm(alarmIndex, a); From 31df8ffeff22c297bab497cc9f51351b0153a014 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 28 Apr 2022 02:24:17 +0200 Subject: [PATCH 54/80] [alarm] Increase dow submenu delay --- 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 b555eb250..b38c0de41 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -112,7 +112,7 @@ function editAlarm(alarmIndex, alarm) { }, /*LANG*/'Days': { value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< setTimeout(editDOW, 10, a.dow, d => { + onchange: () => setTimeout(editDOW, 100, a.dow, d => { a.dow = d; a.t = require("sched").encodeTime(t); editAlarm(alarmIndex, a); From d320b91a301f617399eb9f45f9ddda90be08ef53 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:09:48 -0700 Subject: [PATCH 55/80] Delete app-icon.js --- apps/quicklaunch/app-icon.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/quicklaunch/app-icon.js diff --git a/apps/quicklaunch/app-icon.js b/apps/quicklaunch/app-icon.js deleted file mode 100644 index 14ae94823..000000000 --- a/apps/quicklaunch/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("kMigILIgPAAYMD/ADBwcGhkAwM5wcA/+2//Av/Rn/giFoyFggkUrFggEKlAkCiApCx+AAYNGoADBkU4AYMQj4DBvEICANkAoIPBgE2B4MAiMAH4MAwECAYNALYUgBIISCHYMYAoQWBAIMEgAYBAIMBwEDDQNgDwUf/4eBg4DCAA4")) From 9bf2ea6b39d684c487f9269131dd363985dc6ad8 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:09:54 -0700 Subject: [PATCH 56/80] Delete app.js --- apps/quicklaunch/app.js | 120 ---------------------------------------- 1 file changed, 120 deletions(-) delete mode 100644 apps/quicklaunch/app.js diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js deleted file mode 100644 index f2b749e3e..000000000 --- a/apps/quicklaunch/app.js +++ /dev/null @@ -1,120 +0,0 @@ -var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {}); - -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};}).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.nameb.name) return 1; - return 0; -}); - -function save(key, value) { - settings[key] = value; - require("Storage").write("quicklaunch.json",settings); -} - -// Quick Launch menu -function showMainMenu() { - var mainmenu = { - "" : { "title" : "Quick Launch" }, - "< Back" : ()=>{load();} - }; - - //List all selected apps - mainmenu["Left: "+settings.leftapp.name] = function() { E.showMenu(leftmenu); }; - mainmenu["Right: "+settings.rightapp.name] = function() { E.showMenu(rightmenu); }; - mainmenu["Up: "+settings.upapp.name] = function() { E.showMenu(upmenu); }; - mainmenu["Down: "+settings.downapp.name] = function() { E.showMenu(downmenu); }; - mainmenu["Tap: "+settings.tapapp.name] = function() { E.showMenu(tapmenu); }; - - return E.showMenu(mainmenu); -} - -//Left swipe menu -var leftmenu = { - "" : { "title" : "Left Swipe" }, - "< Back" : showMainMenu -}; - -leftmenu["(none)"] = function() { - save("leftapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - leftmenu[a.name] = function() { - save("leftapp", a); - showMainMenu(); - }; -}); - -//Right swipe menu -var rightmenu = { - "" : { "title" : "Right Swipe" }, - "< Back" : showMainMenu -}; - -rightmenu["(none)"] = function() { - save("rightapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - rightmenu[a.name] = function() { - save("rightapp", a); - showMainMenu(); - }; -}); - -//Up swipe menu -var upmenu = { - "" : { "title" : "Up Swipe" }, - "< Back" : showMainMenu -}; - -upmenu["(none)"] = function() { - save("upapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - upmenu[a.name] = function() { - save("upapp", a); - showMainMenu(); - }; -}); - -//Down swipe menu -var downmenu = { - "" : { "title" : "Down Swipe" }, - "< Back" : showMainMenu -}; - -downmenu["(none)"] = function() { - save("downapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - downmenu[a.name] = function() { - save("downapp", a); - showMainMenu(); - }; -}); - -//Tap menu -var tapmenu = { - "" : { "title" : "Tap" }, - "< Back" : showMainMenu -}; - -tapmenu["(none)"] = function() { - save("tapapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - tapmenu[a.name] = function() { - save("tapapp", a); - showMainMenu(); - }; -}); - -showMainMenu(); From 4c100e77e48bb72af037527e59691e3c106f06ba Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:10:50 -0700 Subject: [PATCH 57/80] Add files via upload --- apps/quicklaunch/settings.js | 122 +++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 apps/quicklaunch/settings.js diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js new file mode 100644 index 000000000..ac4cc5805 --- /dev/null +++ b/apps/quicklaunch/settings.js @@ -0,0 +1,122 @@ +(function(back) { +var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {}); + +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};}).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.nameb.name) return 1; + return 0; +}); + +function save(key, value) { + settings[key] = value; + require("Storage").write("quicklaunch.json",settings); +} + +// Quick Launch menu +function showMainMenu() { + var mainmenu = { + "" : { "title" : "Quick Launch" }, + "< Back" : ()=>{load();} + }; + + //List all selected apps + mainmenu["Left: "+settings.leftapp.name] = function() { E.showMenu(leftmenu); }; + mainmenu["Right: "+settings.rightapp.name] = function() { E.showMenu(rightmenu); }; + mainmenu["Up: "+settings.upapp.name] = function() { E.showMenu(upmenu); }; + mainmenu["Down: "+settings.downapp.name] = function() { E.showMenu(downmenu); }; + mainmenu["Tap: "+settings.tapapp.name] = function() { E.showMenu(tapmenu); }; + + return E.showMenu(mainmenu); +} + +//Left swipe menu +var leftmenu = { + "" : { "title" : "Left Swipe" }, + "< Back" : showMainMenu +}; + +leftmenu["(none)"] = function() { + save("leftapp", {"name":"(none)"}); + showMainMenu(); +}; +apps.forEach((a)=>{ + leftmenu[a.name] = function() { + save("leftapp", a); + showMainMenu(); + }; +}); + +//Right swipe menu +var rightmenu = { + "" : { "title" : "Right Swipe" }, + "< Back" : showMainMenu +}; + +rightmenu["(none)"] = function() { + save("rightapp", {"name":"(none)"}); + showMainMenu(); +}; +apps.forEach((a)=>{ + rightmenu[a.name] = function() { + save("rightapp", a); + showMainMenu(); + }; +}); + +//Up swipe menu +var upmenu = { + "" : { "title" : "Up Swipe" }, + "< Back" : showMainMenu +}; + +upmenu["(none)"] = function() { + save("upapp", {"name":"(none)"}); + showMainMenu(); +}; +apps.forEach((a)=>{ + upmenu[a.name] = function() { + save("upapp", a); + showMainMenu(); + }; +}); + +//Down swipe menu +var downmenu = { + "" : { "title" : "Down Swipe" }, + "< Back" : showMainMenu +}; + +downmenu["(none)"] = function() { + save("downapp", {"name":"(none)"}); + showMainMenu(); +}; +apps.forEach((a)=>{ + downmenu[a.name] = function() { + save("downapp", a); + showMainMenu(); + }; +}); + +//Tap menu +var tapmenu = { + "" : { "title" : "Tap" }, + "< Back" : showMainMenu +}; + +tapmenu["(none)"] = function() { + save("tapapp", {"name":"(none)"}); + showMainMenu(); +}; +apps.forEach((a)=>{ + tapmenu[a.name] = function() { + save("tapapp", a); + showMainMenu(); + }; +}); + +showMainMenu(); +}); \ No newline at end of file From 5b5ded5c56fca6ab5095cd9737ee802e483c90b5 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:11:39 -0700 Subject: [PATCH 58/80] Update ChangeLog --- apps/quicklaunch/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/quicklaunch/ChangeLog b/apps/quicklaunch/ChangeLog index ec66c5568..ae1d4a848 100644 --- a/apps/quicklaunch/ChangeLog +++ b/apps/quicklaunch/ChangeLog @@ -1 +1,2 @@ 0.01: Initial version +0.02: Moved settings from launcher to settings->apps menu From 80f32ea7f38a8b8afc432e94af631e0ac6f5b045 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:12:29 -0700 Subject: [PATCH 60/80] Update metadata.json --- apps/quicklaunch/metadata.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/quicklaunch/metadata.json b/apps/quicklaunch/metadata.json index 6411d1a5f..b14a950c6 100644 --- a/apps/quicklaunch/metadata.json +++ b/apps/quicklaunch/metadata.json @@ -1,14 +1,15 @@ -{ "id": "quicklaunch", +{ + "id": "quicklaunch", "name": "Quick Launch", "icon": "app.png", - "version":"0.01", - "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice.", + "version":"0.02", + "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.", + "type": "launch", "tags": "tools, system", "supports": ["BANGLEJS2"], "storage": [ - {"name":"quicklaunch.app.js","url":"app.js"}, - {"name":"quicklaunch.boot.js","url":"boot.js"}, - {"name":"quicklaunch.img","url":"app-icon.js","evaluate":true} + {"name":"quicklaunch.settings.js","url":"settings.js"}, + {"name":"quicklaunch.boot.js","url":"boot.js"} ], "data": [{"name":"quicklaunch.json"}] } From e79decdb3e7cd47a250f81761624dd2129514136 Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 28 Apr 2022 09:28:57 +0200 Subject: [PATCH 61/80] [alarm] Revert check-mark changes see espruino/BangleApps#1750 --- .gitignore | 1 - apps/alarm/app.js | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2b87569da..fce2efb1a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,3 @@ tests/Layout/bin/tmp.* tests/Layout/testresult.bmp apps.local.json _site -._sync_*.db* diff --git a/apps/alarm/app.js b/apps/alarm/app.js index b38c0de41..90a62afc5 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -45,7 +45,7 @@ function showMainMenu() { } else txt = type+txt; // add to menu menu[txt] = { - value : alarm.on, + value : "\0"+atob(alarm.on?"EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g":"EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"), onchange : function() { setTimeout(alarm.timer ? editTimer : editAlarm, 10, idx, alarm); } @@ -75,6 +75,7 @@ function editDOW(dow, onchange) { let dayOfWeek = require("locale").dow({ getDay: () => i }); menu[dayOfWeek] = { value: !!(dow&(1< v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => v ? dow |= 1< v ? /*LANG*/"On" : /*LANG*/"Off", onchange: v=>a.on=v }, /*LANG*/'Repeat': { value: a.rp, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => a.rp = v }, /*LANG*/'Days': { @@ -121,6 +124,7 @@ function editAlarm(alarmIndex, alarm) { /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), /*LANG*/'Auto Snooze': { value: a.as, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => a.as = v } }; @@ -174,6 +178,7 @@ function editTimer(alarmIndex, alarm) { }, /*LANG*/'Enabled': { value: a.on, + format: v => v ? /*LANG*/"On" : /*LANG*/"Off", onchange: v => a.on = v }, /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), From edaa4da5b3bc2bb5e7235e67d81c02f01352acfa Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 28 Apr 2022 10:21:54 +0200 Subject: [PATCH 62/80] sleepphasealarm add README.md --- apps/sleepphasealarm/README.md | 15 +++++++++++++++ apps/sleepphasealarm/app.js | 9 +++++---- apps/sleepphasealarm/interface.html | 9 +++++++-- apps/sleepphasealarm/metadata.json | 1 + apps/sleepphasealarm/screenshot.jpg | Bin 0 -> 46423 bytes core | 2 +- css/main.css | 2 +- 7 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 apps/sleepphasealarm/README.md create mode 100644 apps/sleepphasealarm/screenshot.jpg diff --git a/apps/sleepphasealarm/README.md b/apps/sleepphasealarm/README.md new file mode 100644 index 000000000..04388194f --- /dev/null +++ b/apps/sleepphasealarm/README.md @@ -0,0 +1,15 @@ +# Sleep Phase Alarm + +The display shows: + +- the current time +- time of the next alarm or timer +- time difference between current time and alarm time (ETA) +- current state of the ESS algorithm, "Sleep" or "Awake", useful for debugging + +## Logging + +For each day of month (1..31) the ESS states are logged. An entry will be overwritten in the next month, e.g. an entry on the 4th May will overwrite an entry on the 4th April. +The logs can be viewed with the download button: + +![](screenshot.jpg) diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index a2c8504f0..9bde85452 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -1,4 +1,4 @@ -const BANGLEJS2 = process.env.HWVERSION == 2; //# check for bangle 2 +const BANGLEJS2 = process.env.HWVERSION == 2; // check for bangle 2 const Layout = require("Layout"); const locale = require('locale'); const alarms = require("Storage").readJSON("sched.json",1) || []; @@ -135,9 +135,9 @@ if (nextAlarm !== undefined) { // log if (swest_last != swest) { if (swest) { - addLog(new Date(Date.now() - sleepthresh*13/12.5*1000), "sleep"); // calculate begin of no motion phase, 13 values/second at 12.5Hz + addLog(new Date(now - sleepthresh*13/12.5*1000), "sleep"); // calculate begin of no motion phase, 13 values/second at 12.5Hz } else { - addLog(new Date(), "awake"); + addLog(now, "awake"); } swest_last = swest; } @@ -145,9 +145,10 @@ if (nextAlarm !== undefined) { if (now >= nextAlarm) { // The alarm widget should handle this one + addLog(now, "alarm"); setTimeout(load, 1000); } else if (measure && now >= minAlarm && swest === false) { - addLog(new Date(), "alarm"); + addLog(now, "alarm"); buzz(); measure = false; } diff --git a/apps/sleepphasealarm/interface.html b/apps/sleepphasealarm/interface.html index d9e5a2504..02fd60626 100644 --- a/apps/sleepphasealarm/interface.html +++ b/apps/sleepphasealarm/interface.html @@ -27,12 +27,12 @@ function getData() { Util.showModal("Loading..."); // get the data Util.readStorageFile('sleepphasealarm.json',data=>{ - data = '{"logs":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[{"time":"2022-04-21T19:03:02.130Z","type":"awake"},{"time":"2022-04-21T19:03:35.219Z","type":"sleep"},{"time":"2022-04-21T19:16:08.958Z","type":"awake"},{"time":"2022-04-21T19:16:08.994Z","type":"alarm"}]]}'; let logs = JSON.parse(data || "{}")?.logs || []; // remove window Util.hideModal(); logs = logs.filter(log => log != null); + logs.sort(function(a, b) {return new Date(b?.filter(entry => entry.type === "alarm")[0]?.time) - new Date(a?.filter(entry => entry.type === "alarm")[0]?.time)}); // sort by alarm date desc logs.forEach((log, i) => { const timeStr = log.filter(entry => entry.type === "alarm")[0]?.time; if (timeStr) { @@ -64,6 +64,7 @@ function getData() { x: { type: 'time', time: { + tooltipFormat: 'HH:mm', displayFormats: { millisecond: 'HH:mm:ss.SSS', second: 'HH:mm:ss', @@ -77,7 +78,11 @@ function getData() { }, plugins: { tooltip: { - enabled: false + callbacks: { + label: function(context) { + return yTicks[context.raw]; + } + } }, } } diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index aba240e37..f55854f35 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -7,6 +7,7 @@ "icon": "app.png", "tags": "alarm", "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", "dependencies": {"scheduler":"type"}, "storage": [ {"name":"sleepphasealarm.app.js","url":"app.js"}, diff --git a/apps/sleepphasealarm/screenshot.jpg b/apps/sleepphasealarm/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1fd05decdecf25d43386e5e89412c2db3e79ff6 GIT binary patch literal 46423 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

*N>`MeThR*{tjZzDIpwBXAx(v7hG^RhTq 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 Zu=faLL0&HbvH*c-DyrJ6m0efr|JjPXZ?gaZ literal 0 HcmV?d00001 diff --git a/core b/core index 44d49cdbd..89049a5c7 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 44d49cdbd59dc6a7e09cc0facee89d338ccc7d04 +Subproject commit 89049a5c7c80d2b56dc235d135fc63b80789db96 diff --git a/css/main.css b/css/main.css index f4850babe..c4e5286cc 100644 --- a/css/main.css +++ b/css/main.css @@ -81,7 +81,7 @@ a.btn.btn-link.dropdown-toggle { min-height: 8em; } -.tile-content { position: relative; } +.tile-content { position: relative; word-break: break-word; } .link-github { position:absolute; top: 36px; From 53956667b8fb76387189b98fe5ab6c5b5d7ad4b4 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:27:10 -0700 Subject: [PATCH 63/80] Update app.js --- apps/bradbury/app.js | 49 +++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index f5cf0f411..d7283bd50 100644 --- a/apps/bradbury/app.js +++ b/apps/bradbury/app.js @@ -3,6 +3,7 @@ require("Font5x9Numeric7Seg").add(Graphics); require("Font8x12").add(Graphics); require("FontDylex7x13").add(Graphics); const X = 98, Y = 46; +var wizible = 0; function getImg() { return require("heatshrink").decompress(atob("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")); @@ -14,7 +15,12 @@ function draw() { var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); g.reset(); // Reset the state of the graphics library g.clear(); + + + g.drawImage(getImg()); + g.setColor(1,1,1); + g.drawString(wizible, 10, 10, 0); //g.drawImage(require("Storage").read("Tigger4.gif")); //TIME g.setFont("7x11Numeric7Seg",2); @@ -52,34 +58,34 @@ function draw() { g.setFont("8x12"); g.setColor(0,0,1); if (d.getDay()==0) { - g.drawString("Su", 137, 43, 0); + g.drawString("SU", 137, 43, 0); g.setColor(0,0,0); - g.drawString("Su", 136, 42, 0); + g.drawString("SU", 136, 42, 0); } else if (d.getDay()==1) { - g.drawString("M", 137, 43, 0); + g.drawString("MO", 137, 43, 0); g.setColor(0,0,0); - g.drawString("M", 136, 42, 0); + g.drawString("MO", 136, 42, 0); } else if (d.getDay()==2) { - g.drawString("Tu", 137, 43, 0); + g.drawString("TU", 137, 43, 0); g.setColor(0,0,0); - g.drawString("Tu", 136, 42, 0); + g.drawString("TU", 136, 42, 0); } else if (d.getDay()==3) { - g.drawString("W", 137, 43, 0); + g.drawString("WE", 137, 43, 0); g.setColor(0,0,0); - g.drawString("W", 136, 42, 0); + g.drawString("WE", 136, 42, 0); } else if (d.getDay()==4) { g.setFont("Dylex7x13"); - g.drawString("Th", 137, 43, 0); + g.drawString("TH", 137, 43, 0); g.setColor(0,0,0); - g.drawString("Th", 136, 42, 0); + g.drawString("TH", 136, 42, 0); } else if (d.getDay()==5) { - g.drawString("F", 137, 43, 0); + g.drawString("FR", 137, 43, 0); g.setColor(0,0,0); - g.drawString("F", 136, 42, 0); + g.drawString("FR", 136, 42, 0); } else { - g.drawString("Sa", 137, 43, 0); + g.drawString("SA", 137, 43, 0); g.setColor(0,0,0); - g.drawString("Sa", 136, 42, 0); + g.drawString("SA", 136, 42, 0); } } @@ -99,6 +105,17 @@ Bangle.on('lcdPower',on=>{ }); // Show launcher when middle button pressed Bangle.setUI("clock"); -// Load widgets -//Bangle.loadWidgets(); + +//Toggle Widgets +Bangle.loadWidgets(); +Bangle.on('touch', function(button) { + if(wizible==0){ + wizible=1; + Bangle.drawWidgets(); + } + else if(wizible==1){ + wizible=0; + } +}); + //Bangle.drawWidgets(); From 222a9ccdb45ceb5950e6af034a47222f69ae7290 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:40:37 -0700 Subject: [PATCH 64/80] Update app.js --- apps/bradbury/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index d7283bd50..870410d14 100644 --- a/apps/bradbury/app.js +++ b/apps/bradbury/app.js @@ -87,6 +87,9 @@ function draw() { g.setColor(0,0,0); g.drawString("SA", 136, 42, 0); } + if(wizible==1){ + Bangle.drawWidgets(); + } } // Clear the screen once, at startup @@ -111,7 +114,6 @@ Bangle.loadWidgets(); Bangle.on('touch', function(button) { if(wizible==0){ wizible=1; - Bangle.drawWidgets(); } else if(wizible==1){ wizible=0; From c7f85277194a950181c2f8e2129b714e220655c1 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:53:14 -0700 Subject: [PATCH 65/80] Update app.js added ability to toggle widgets by touchscreen --- apps/bradbury/app.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index 870410d14..147242689 100644 --- a/apps/bradbury/app.js +++ b/apps/bradbury/app.js @@ -15,13 +15,7 @@ function draw() { var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); g.reset(); // Reset the state of the graphics library g.clear(); - - - - g.drawImage(getImg()); - g.setColor(1,1,1); - g.drawString(wizible, 10, 10, 0); - //g.drawImage(require("Storage").read("Tigger4.gif")); + g.drawImage(getImg()); //load bg image //TIME g.setFont("7x11Numeric7Seg",2); g.setFontAlign(1,1); @@ -119,5 +113,3 @@ Bangle.on('touch', function(button) { wizible=0; } }); - -//Bangle.drawWidgets(); From 88762c8fbfaf242195e8d5e91cf6e49591325a45 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:54:08 -0700 Subject: [PATCH 66/80] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 64be5d524..456daa381 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. Tapping the screen toggles visibility of widgets.", "type": "clock", "supports":["BANGLEJS2"], "storage": [ From 4a9bc7e12810730c41257c6c0dcd3906e3ec791b Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 28 Apr 2022 11:04:16 +0200 Subject: [PATCH 67/80] revert main.css --- css/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/main.css b/css/main.css index c4e5286cc..f4850babe 100644 --- a/css/main.css +++ b/css/main.css @@ -81,7 +81,7 @@ a.btn.btn-link.dropdown-toggle { min-height: 8em; } -.tile-content { position: relative; word-break: break-word; } +.tile-content { position: relative; } .link-github { position:absolute; top: 36px; From 8636dc9ce8b30d5da4d10142db13e4ca317230a6 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 28 Apr 2022 11:45:13 +0200 Subject: [PATCH 68/80] sleepphasealarm use readStorage instead of readStorageFile --- apps/sleepphasealarm/interface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleepphasealarm/interface.html b/apps/sleepphasealarm/interface.html index 02fd60626..9a7cb0f93 100644 --- a/apps/sleepphasealarm/interface.html +++ b/apps/sleepphasealarm/interface.html @@ -26,7 +26,7 @@ function getData() { // show loading window Util.showModal("Loading..."); // get the data - Util.readStorageFile('sleepphasealarm.json',data=>{ + Util.readStorage('sleepphasealarm.json',data=>{ let logs = JSON.parse(data || "{}")?.logs || []; // remove window Util.hideModal(); From ae691eda8b7d75e17ef31dccc8d53b19d92bafa1 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:11:11 +0200 Subject: [PATCH 69/80] Update app.js --- apps/contourclock/app.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index cdfadd217..d5c97edfa 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -7,6 +7,13 @@ if (settings.fontIndex==undefined) { require('Storage').writeJSON("myapp.json", settings); } +function queueDraw() { + setTimeout(function() { + draw(); + queueDraw(); + }, 60000 - (Date.now() % 60000)); +} + function draw() { var date = new Date(); // Draw day of the week @@ -24,7 +31,5 @@ Bangle.setUI("clock"); g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); +queueDraw(); draw(); -setTimeout(function() { - setInterval(draw,60000); -}, 60000 - Date.now() % 60000); From 7369b7f943334c9469e87736e413eb3a0a8e1525 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:11:41 +0200 Subject: [PATCH 70/80] Update metadata.json --- apps/contourclock/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/metadata.json b/apps/contourclock/metadata.json index ec29c390b..eb0dd39fb 100644 --- a/apps/contourclock/metadata.json +++ b/apps/contourclock/metadata.json @@ -1,7 +1,7 @@ { "id": "contourclock", "name": "Contour Clock", "shortName" : "Contour Clock", - "version":"0.26", + "version":"0.27", "icon": "app.png", "description": "A Minimalist clockface with large Digits. Now with more fonts!", "screenshots" : [{"url":"cc-screenshot-1.png"},{"url":"cc-screenshot-2.png"}], From 7ff18188d77ba6621c7e7545dc2bf95557c858fc Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:12:54 +0200 Subject: [PATCH 71/80] Update ChangeLog --- apps/contourclock/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/contourclock/ChangeLog b/apps/contourclock/ChangeLog index 032edc9b5..d415a604d 100644 --- a/apps/contourclock/ChangeLog +++ b/apps/contourclock/ChangeLog @@ -6,3 +6,4 @@ 0.24: Added previews to the customizer. 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 From 6e093ac003ff55f401956c0221e69796cf8763ee Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 28 Apr 2022 16:22:55 +0200 Subject: [PATCH 72/80] revert core --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 89049a5c7..6fc78fc39 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 89049a5c7c80d2b56dc235d135fc63b80789db96 +Subproject commit 6fc78fc39531a43148ae8d515efaeff9404d1daf From 1dbcbd47f82652348f7df3cbd94cf86a7b72676d Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 17:57:39 -0400 Subject: [PATCH 73/80] Fix true wind computation bug, add swipe gesture to pause GPS --- apps/openwind/ChangeLog | 1 + apps/openwind/README.md | 4 ++- apps/openwind/app.js | 72 ++++++++++++++++++++++++------------- apps/openwind/metadata.json | 2 +- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/apps/openwind/ChangeLog b/apps/openwind/ChangeLog index 5560f00bc..1e5f791b2 100644 --- a/apps/openwind/ChangeLog +++ b/apps/openwind/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Fix true wind computation, add swipe gesture to pause GPS diff --git a/apps/openwind/README.md b/apps/openwind/README.md index 1df7ea158..c03ec1401 100644 --- a/apps/openwind/README.md +++ b/apps/openwind/README.md @@ -14,7 +14,9 @@ additionally displayed in red. In this mode, the speed over ground in knots is ## Controls -There are no controls in the main app, but there are two settings in the settings app that can be changed: +In the main app, when true wind mode is enabled (see below), swiping left on the screen will temporarily disable GPS (to preserve battery); a small +red satellite symbol will appear on the bottom right. Swiping right will turn GPS back on. +The settings app provides the following two settings: * True wind: enables or disables true wind calculations; enabling this will turn on GPS inside the app * Mounting angle: mounting relative to the boat of the wind instrument (in degrees) diff --git a/apps/openwind/app.js b/apps/openwind/app.js index b1c8fea4b..ca837defa 100644 --- a/apps/openwind/app.js +++ b/apps/openwind/app.js @@ -1,16 +1,20 @@ OW_CHAR_UUID = '0000cc91-0000-1000-8000-00805f9b34fb'; require("Font7x11Numeric7Seg").add(Graphics); -gatt = {}; -cx = g.getWidth()/2; -cy = 24+(g.getHeight()-24)/2; -w = (g.getWidth()-24)/2; - -gps_course = { spd: 0 }; +var gatt = {}; +var cx = g.getWidth()/2; +var cy = 24+(g.getHeight()-24)/2; +var w = (g.getWidth()-24)/2; +var y1 = 24; +var y2 = g.getHeight()-1; +var gps_course = { spd: 0 }; +var course_marker_len = g.getWidth()/4; var settings = require("Storage").readJSON('openwindsettings.json', 1) || {}; -i = 0; -hullpoly = []; +var pause_gps = false; + +var i = 0; +var hullpoly = []; for (y=-1; y<=1; y+=0.1) { hullpoly[i++] = cx - (y<0 ? 1+y*0.15 : (Math.sqrt(1-0.7*y*y)-Math.sqrt(0.3))/(1-Math.sqrt(0.3)))*w*0.3; hullpoly[i++] = cy - y*w*0.7; @@ -22,21 +26,22 @@ for (y=1; y>=-1; y-=0.1) { function wind_updated(ev) { if (ev.target.uuid == "0xcc91") { - awa = settings.mount_angle-ev.target.value.getInt16(1, true)*0.1; + awa = settings.mount_angle+ev.target.value.getInt16(1, true)*0.1; + if (awa<0) awa += 360; aws = ev.target.value.getInt16(3, true)*0.01; -// console.log(awa, aws); + //console.log(awa, aws); if (gps_course.spd > 0) { - wv = { // wind vector (in fixed reference frame) - lon: Math.sin(Math.PI*(gps_course.course+awa)/180)*aws, - lat: Math.cos(Math.PI*(gps_course.course+awa)/180)*aws + wv = { // wind vector (in "earth" reference frame) + vlon: Math.sin(Math.PI*(gps_course.course+(awa+180))/180)*aws, + vlat: Math.cos(Math.PI*(gps_course.course+(awa+180))/180)*aws }; - twv = { lon: wv.lon+gps_course.lon, lat: wv.lat+gps_course.lat }; - tws = Math.sqrt(Math.pow(twv.lon,2)+Math.pow(twv.lat, 2)); - twa = Math.atan2(twv.lat, twv.lon)*180/Math.PI-gps_course.course; + twv = { vlon: wv.vlon+gps_course.vlon, vlat: wv.vlat+gps_course.vlat }; + tws = Math.sqrt(Math.pow(twv.vlon,2)+Math.pow(twv.vlat, 2)); + twa = 180+Math.atan2(twv.vlon, twv.vlat)*180/Math.PI-gps_course.course; if (twa<0) twa += 360; if (twa>360) twa -=360; } - else { + else { tws = -1; twa = 0; } @@ -57,15 +62,18 @@ function draw_compass(awa, aws, twa, tws) { a = i*Math.PI/2+Math.PI/4; g.drawLineAA(cx+Math.cos(a)*w*0.85, cy+Math.sin(a)*w*0.85, cx+Math.cos(a)*w*0.99, cy+Math.sin(a)*w*0.99); } - g.setColor(0, 1, 0).fillCircle(cx+Math.sin(Math.PI*awa/180)*w*0.9, cy+Math.cos(Math.PI*awa/180)*w*0.9, w*0.1); + g.setColor(0, 1, 0).fillCircle(cx+Math.sin(Math.PI*awa/180)*w*0.9, cy-Math.cos(Math.PI*awa/180)*w*0.9, w*0.1); if (tws>0) g.setColor(1, 0, 0).fillCircle(cx+Math.sin(Math.PI*twa/180)*w*0.9, cy+Math.cos(Math.PI*twa/180)*w*0.9, w*0.1); g.setColor(0, 1, 0).setFont("7x11Numeric7Seg",w*0.06); g.setFontAlign(0, 0, 0).drawString(aws.toFixed(1), cx, cy-0.32*w); - if (tws>0) g.setColor(1, 0, 0).drawString(tws.toFixed(1), cx, cy+0.32*w); - if (settings.truewind && typeof gps_course.spd!=='undefined') { - spd = gps_course.spd/1.852; - g.setColor(g.theme.fg).setFont("7x11Numeric7Seg", w*0.03).setFontAlign(-1, 1, 0).drawString(spd.toFixed(1), 1, g.getHeight()-1); + if (!pause_gps) { + if (tws>0) g.setColor(1, 0, 0).drawString(tws.toFixed(1), cx, cy+0.32*w); + if (settings.truewind && gps_course.spd!=-1) { + spd = gps_course.spd/1.852; + g.setColor(g.theme.fg).setFont("7x11Numeric7Seg", w*0.03).setFontAlign(-1, 1, 0).drawString(spd.toFixed(1), 1, g.getHeight()-1); + } } + if (pause_gps) g.setColor("#f00").drawImage(atob("DAwBEAKARAKQE4DwHkPqPRGKAEAA"),g.getWidth()-15, g.getHeight()-15); } function parseDevice(d) { @@ -96,8 +104,10 @@ if (settings.truewind) { Bangle.on('GPS',function(fix) { if (fix.fix && fix.satellites>3 && fix.speed>2) { // only uses fixes w/ more than 3 sats and speed > 2kph gps_course = - { lon: Math.sin(Math.PI*fix.course/180)*fix.speed/1.852, - lat: Math.cos(Math.PI*fix.course/180)*fix.speed/1.852, + { vlon: Math.sin(Math.PI*fix.course/180)*fix.speed/1.852, + vlat: Math.cos(Math.PI*fix.course/180)*fix.speed/1.852, + lat: fix.lat, + lon: fix.lon, spd: fix.speed, course: fix.course }; @@ -107,6 +117,20 @@ if (settings.truewind) { Bangle.setGPSPower(1, "app"); } +if (settings.truewind) { + Bangle.on("swipe", (d)=>{ + if (d==-1 && !pause_gps) { + pause_gps = true; + Bangle.setGPSPower(0); + draw_compass(0, 0, 0, 0); + } + else if (d==1 && pause_gps) { + pause_gps = false; + Bangle.setGPSPower(1, "app"); + draw_compass(0, 0, 0, 0); + } + }); +} Bangle.loadWidgets(); Bangle.drawWidgets(); draw_compass(0, 0, 0, 0); diff --git a/apps/openwind/metadata.json b/apps/openwind/metadata.json index 9229f7f25..43961cc44 100644 --- a/apps/openwind/metadata.json +++ b/apps/openwind/metadata.json @@ -1,7 +1,7 @@ { "id": "openwind", "name": "OpenWind", "shortName":"OpenWind", - "version":"0.01", + "version":"0.02", "description": "OpenWind", "icon": "openwind.png", "readme": "README.md", From 4d6c037f2e331056a051646412499489fb0bb8b8 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Thu, 28 Apr 2022 16:09:23 -0700 Subject: [PATCH 74/80] Update metadata.json --- apps/quicklaunch/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/quicklaunch/metadata.json b/apps/quicklaunch/metadata.json index b14a950c6..49eafdd35 100644 --- a/apps/quicklaunch/metadata.json +++ b/apps/quicklaunch/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.02", "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.", - "type": "launch", + "type": "bootloader", "tags": "tools, system", "supports": ["BANGLEJS2"], "storage": [ From 3032376af713854801a621c4bb333a685f1ae014 Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:38:34 -0400 Subject: [PATCH 75/80] Fix spaces/tabs issue --- apps/scicalc/app.js | 113 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 apps/scicalc/app.js diff --git a/apps/scicalc/app.js b/apps/scicalc/app.js new file mode 100644 index 000000000..5d914d0c5 --- /dev/null +++ b/apps/scicalc/app.js @@ -0,0 +1,113 @@ +const W = g.getWidth(); +const H = g.getHeight(); + +const dispH = H/5; +const butH = H-dispH; + +const buttons = [[['7', '8', '9'], + ['4', '5', '6'], + ['1', '2', '3'], + ['E', '0', '.']], + [['<', 'M', 'C'], + ['+', '-', '*'], + ['/', '(', ')'], + ['^', ',', '=']], + [['Sin', 'Cos', 'Tan'], + ['Asi', 'Aco', 'Ata'], + ['Pi', '1/x', '+/-'], + ['Log', 'Exp', 'Pow'] + ]]; + +var curPage = 0; +var inputStr = ''; +var memory = ''; +var qResult = false; + +function drawPage (p) { + g.clearRect(0, dispH, W-1, H-1); + g.setFont('Vector', butH/5).setFontAlign(0, 0, 0).setColor(g.theme.fg); + for (x=0; x<3; ++x) + for (y=0; y<4; ++y) + g.drawString(buttons[p][y][x], (x+0.5)*W/3, dispH+(y+0.7)*butH/4); + g.setColor(0.5, 0.5, 0.5); + for (x=1; x<3; ++x) g.drawLine(x*W/3, dispH+0.2*butH/4-2, x*W/3, H-1); + for (y=1; y<4; ++y) g.drawLine(0, dispH+(y+0.2)*butH/4, W-1, dispH+(y+0.2)*butH/4); + g.setColor(g.theme.fg).drawLine(0, dispH+0.2*butH/4-2, W-1, dispH+0.2*butH/4-2); +} + +function updateDisp(s, len) { + var fh = butH/5; + if (s.toString().length>len) s = s.toString().substr(0,len); + g.setFont("Vector", butH/5).setColor(g.theme.fg).setFontAlign(1, 0, 0); + while (g.stringWidth(s) > W-1) { + fh /= 1.05; + g.setFont("Vector", fh); + } + g.clearRect(0, 0, W-1, dispH-1).drawString(s, W-2, dispH/2); + g.setColor(g.theme.fg).drawLine(0, dispH+0.2*butH/4-2, W-1, dispH+0.2*butH/4-2); +} + +function processInp (s) { + var idx = s.indexOf("^"); + if (idx > 0) s = "Math.pow(" + s.slice(0,idx) + "," + s.slice(idx+1, s.length) + ")"; + ['Sin', 'Cos', 'Tan', 'Asin', 'Acos', 'Atan', 'Log', 'Exp', 'Pow'].forEach((x) => { + var i = s.indexOf(x); + while (i>-1) { + s = s.slice(0,i)+"Math."+s.slice(i,i+1).toLowerCase()+s.slice(i+1, s.length); + i = s.indexOf(x, i+6); + } + }); + idx = s.indexOf('Pi'); + if (idx>-1) s = s.slice(0,idx) + "Math.PI" + s.slice(idx+2, s.length); + idx = 0; + s.split('').forEach((x)=>{ if (x=='(') idx++; if (x==')') idx-- }); + s += ')'.repeat(idx); + return s; +} + +function compute() { + var res; + console.log(processInp(inputStr)); + try { res = eval(processInp(inputStr)); } + catch(e) { res = "error"; } + inputStr = res; + qResult = true; + updateDisp(inputStr, 19); +} + +function touchHandler(e, d) { + var x = Math.floor(d.x/(W/3)); + var y = Math.floor((d.y-dispH-0.2*butH/4)/(butH/4)); + var c = buttons[curPage][y][x]; + if (c=="=") { // do the computation + compute(); + return; + } + else if (c=="<" && inputStr.length>0) inputStr = inputStr.slice(0, -1); // delete last character + else if (c=='M' && qResult) memory = inputStr; + else if (c=='M') inputStr += memory; + else if (c=="C") inputStr = ''; // clear + else { + if ("Sin Cos Tan Log Exp Pow".indexOf(c)>-1 && c!='E') c += "("; + if ("Asi Aco Ata".indexOf(c)>-1) c += "n("; + if (c=='1/x') { inputStr = "1/("+inputStr+")"; compute(); return; } + if (c=='+/-') { inputStr = "-("+inputStr+")"; compute(); return; } + if (qResult && "+-*/^".indexOf(c)==-1) inputStr = c + inputStr + ")"; + else inputStr += c; + } + qResult = false; + updateDisp(inputStr, 32); +} + +function swipeHandler(e,d) { + curPage -= e; + if (curPage>buttons.length-1) curPage = 0; + if (curPage<0) curPage = buttons.length-1; + drawPage(curPage); + if (d==1) compute(); +} + +Bangle.on("touch", touchHandler); +Bangle.on("swipe", swipeHandler); +g.clear(); +drawPage(curPage); From 2675dd6c2dd777a1d8bdc416a35a5051579be29e Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:40:33 -0400 Subject: [PATCH 76/80] New app scicalc --- apps/scicalc/ChangeLog | 1 + apps/scicalc/README.md | 18 ++++++++++++++++++ apps/scicalc/app-icon.js | 1 + apps/scicalc/metadata.json | 14 ++++++++++++++ apps/scicalc/scicalc.png | Bin 0 -> 562 bytes 5 files changed, 34 insertions(+) create mode 100644 apps/scicalc/ChangeLog create mode 100644 apps/scicalc/README.md create mode 100644 apps/scicalc/app-icon.js create mode 100644 apps/scicalc/metadata.json create mode 100644 apps/scicalc/scicalc.png diff --git a/apps/scicalc/ChangeLog b/apps/scicalc/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/scicalc/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/scicalc/README.md b/apps/scicalc/README.md new file mode 100644 index 000000000..bbe4b93c4 --- /dev/null +++ b/apps/scicalc/README.md @@ -0,0 +1,18 @@ +# SciCalc + +Simple scientific calculator. I needed one, so I wrote a basic one, no design frills. Input expressions are slightly post processed and then evaluated +by the JS interpreter. + +## Usage + +Buttons are arranged on 3 separate screens, swiping left or right switches between them. Swiping down has the same effect as hitting the "=" button. + +## Features + +The calculator supports the following operations: + + * basic arithmetic: +, -, *, /, ^ (raise to a power), +/- (invert sign), 1/x (inverse), use of parentheses + * trigonometric fucntions: sin, cos, tan, asin, acos, atan + * exponential exp, natural logarithm log, pow function (this one takes 2 comma separated arguments) + * Pi is provided as a constant + * a memory button "M" stores or recalls the last result (after hitting the "=" button or swiping down) diff --git a/apps/scicalc/app-icon.js b/apps/scicalc/app-icon.js new file mode 100644 index 000000000..b8363e6ee --- /dev/null +++ b/apps/scicalc/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AJioAaF1wwSFzowRCQUZo4AWjIvVFy4ABF/4vXyGQAYov/R+sZFy8ZF6oAcF/4vvi4AeF/4SCjseAAMdAx8MAAYvVEAQABAx4v/R/TvvF96PUg8cAAMHd9QuCAAIv/R+rvvF96Pvd94vvR97vvF96Pvd94vvR97vsGDwuQGDouSAH4A/AGwA==")) diff --git a/apps/scicalc/metadata.json b/apps/scicalc/metadata.json new file mode 100644 index 000000000..54fdc5a26 --- /dev/null +++ b/apps/scicalc/metadata.json @@ -0,0 +1,14 @@ +{ "id": "scicalc", + "name": "Scientific Calculator", + "shortName":"SciCalc", + "version":"0.01", + "description": "Scientific calculator", + "icon": "scicalc.png", + "readme": "README.md", + "tags": "app,tool", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"scicalc.app.js","url":"app.js"}, + {"name":"scicalc.img","url":"app-icon.js","evaluate":true}, + ] +} diff --git a/apps/scicalc/scicalc.png b/apps/scicalc/scicalc.png new file mode 100644 index 0000000000000000000000000000000000000000..b5aa6ff7e90ddf52c08c77ea9f943ff62c19574c GIT binary patch literal 562 zcmV-20?qx2P)f z2@6dVMx#5}gm-ZDZ`78BmPBO0q0t4JLbUhZmbO;!Z|ceUa_@I~PES%mAo$-bu!xGq zVxACk3ZMjFIb2J42cSukbf{_C9ZgIvU~K*dKxQ89IOqe|=yW=Umx$0#8Nd0c&0~D$ z2~Ct@IH)vv*gnW3lV1#Cii-I%!u7fH(o0@ifT06$&3xGA0YF||a)&E4Jxc+`25#lPK+wD%px~>P#J*B3n_(76*EYbhSDwWD7*NJmRRaH-qi65cZw@|rUMmC#u za;9mb)oL+&ihT>Y%>#fe%RH8nKSHr@AIkXnmLv&bOm6CrVEKnRaJMr1k?`Lwp{~Y(R3luCxp~!B5DE6 zX7kpz?M(m|aE()l3;Lhx AZ2$lO literal 0 HcmV?d00001 From 06581584a63d241f6f69007f9aaa7323ecdc2ffe Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:42:43 -0400 Subject: [PATCH 77/80] Typo in metadata.json --- apps/scicalc/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/scicalc/metadata.json b/apps/scicalc/metadata.json index 54fdc5a26..6732e097d 100644 --- a/apps/scicalc/metadata.json +++ b/apps/scicalc/metadata.json @@ -9,6 +9,6 @@ "supports" : ["BANGLEJS2"], "storage": [ {"name":"scicalc.app.js","url":"app.js"}, - {"name":"scicalc.img","url":"app-icon.js","evaluate":true}, + {"name":"scicalc.img","url":"app-icon.js","evaluate":true} ] } From 7ec3b149b18ea4806bb1502938e59639bc6e3491 Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:45:37 -0400 Subject: [PATCH 78/80] Fix more spaces/tabs --- apps/openwind/app.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/openwind/app.js b/apps/openwind/app.js index ca837defa..4abe84fca 100644 --- a/apps/openwind/app.js +++ b/apps/openwind/app.js @@ -79,20 +79,20 @@ function draw_compass(awa, aws, twa, tws) { function parseDevice(d) { device = d; console.log("Found device"); - device.gatt.connect().then(function(ga) { - console.log("Connected"); - gatt = ga; - return ga.getPrimaryService("cc90"); -}).then(function(s) { - return s.getCharacteristic("cc91"); -}).then(function(c) { - c.on('characteristicvaluechanged', (event)=>wind_updated(event)); - return c.startNotifications(); -}).then(function() { - console.log("Done!"); -}).catch(function(e) { - console.log("ERROR"+e); -});} + device.gatt.connect().then(function(ga) { + console.log("Connected"); + gatt = ga; + return ga.getPrimaryService("cc90"); + }).then(function(s) { + return s.getCharacteristic("cc91"); + }).then(function(c) { + c.on('characteristicvaluechanged', (event)=>wind_updated(event)); + return c.startNotifications(); + }).then(function() { + console.log("Done!"); + }).catch(function(e) { + console.log("ERROR"+e); + });} function connection_setup() { NRF.setScan(); @@ -106,8 +106,8 @@ if (settings.truewind) { gps_course = { vlon: Math.sin(Math.PI*fix.course/180)*fix.speed/1.852, vlat: Math.cos(Math.PI*fix.course/180)*fix.speed/1.852, - lat: fix.lat, - lon: fix.lon, + lat: fix.lat, + lon: fix.lon, spd: fix.speed, course: fix.course }; From 31ef7c3d97367abf71dcf81a3604b457bffb1616 Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:48:24 -0400 Subject: [PATCH 79/80] Fix tabs, again, sigh... --- apps/openwind/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openwind/app.js b/apps/openwind/app.js index 4abe84fca..db67804f3 100644 --- a/apps/openwind/app.js +++ b/apps/openwind/app.js @@ -106,8 +106,8 @@ if (settings.truewind) { gps_course = { vlon: Math.sin(Math.PI*fix.course/180)*fix.speed/1.852, vlat: Math.cos(Math.PI*fix.course/180)*fix.speed/1.852, - lat: fix.lat, - lon: fix.lon, + lat: fix.lat, + lon: fix.lon, spd: fix.speed, course: fix.course }; From 51aa4ac12ab2eb74829b85e331870932a165fccc Mon Sep 17 00:00:00 2001 From: marko Date: Thu, 28 Apr 2022 19:56:09 -0400 Subject: [PATCH 80/80] Enable emulator --- apps/scicalc/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/scicalc/metadata.json b/apps/scicalc/metadata.json index 6732e097d..d2d855dc2 100644 --- a/apps/scicalc/metadata.json +++ b/apps/scicalc/metadata.json @@ -6,6 +6,7 @@ "icon": "scicalc.png", "readme": "README.md", "tags": "app,tool", + "allow_emulator": true, "supports" : ["BANGLEJS2"], "storage": [ {"name":"scicalc.app.js","url":"app.js"},