From 99003551402e3b00a78e7e14e594027aab6dafc0 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:32:17 +0200 Subject: [PATCH 01/28] dyno clock --- apps/dynoclock/app.js | 189 +++++++++++++++++++++++++++++++++++ apps/dynoclock/metadata.json | 11 ++ 2 files changed, 200 insertions(+) create mode 100644 apps/dynoclock/app.js create mode 100644 apps/dynoclock/metadata.json diff --git a/apps/dynoclock/app.js b/apps/dynoclock/app.js new file mode 100644 index 000000000..f0a31c633 --- /dev/null +++ b/apps/dynoclock/app.js @@ -0,0 +1,189 @@ +const storage = require('Storage'); +const locale = require("locale"); + + + + +// add modifiied 4x5 numeric font +(function(graphics) { + graphics.prototype.setFont4x5NumPretty = function() { + this.setFontCustom(atob("IQAQDJgH4/An4QXr0Fa/BwnwdrcH63BCHwfr8Ha/"), 45, atob("AwIEBAQEBAQEBAQEBA=="), 5); + } +})(Graphics); + +// add font for days of the week +(function(graphics) { + graphics.prototype.setFontDoW = function() { + this.setFontCustom(atob("///////ADgB//////+AHAD//////gAAAH//////4D8B+A///////4AcAOAH//////4AcAOAAAAAB//////wA4AcAP//////wAAAAAAAA//////4AcAP//////wA4Af//////gAAAH//////5z85+c/OfnOAA4AcAOAH//////4AcAOAAAAAB//////wcAOAHB//////wAAAAAAAA///////ODnBzg5wc4AAAAD//////84OcH//8/+fAAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////84OcH//////AAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////gBwA///////AAAAAAAAAAAAA"), 48, 24, 13); + } +})(Graphics); + + + +var bgImg = require("heatshrink").decompress(atob("2E7wINKn///+AEaIVUgIUB//wCs/5CtRXrCvMD8AVTg4LFCv4VZ/iSLCrwWMCrMOAQMPCp7cBCojjFCo/xFgIVQgeHCopABCpcH44Vuh/AQQX/wAV7+F/Cq/nCsw/CCqyvRCvgODCqfAgEDCp4QCSIIVQgIOBDQgGDABX/NgIECCp8HCrM/CgP4CqKaCCqSfCCqq1BCqBuB54VqgYVG/gCECp0BwgCDCp8HgYCDCo/wCo0MgHAjACBj7rDABS1Bv4lBv4rPAAsPCo3+gbbPJAIVFiAXMFZ2AUQsAuAQHiOAgJeEA")); + + +// weather icons from https://icons8.com/icon/set/weather/small +var sunIcon = require("heatshrink").decompress(atob("kEgwIMJgYDJgUDgMAg8DgeAgeDg8AgPHxwQB//8AYN4vADBsEYAYvAhkAn/Ah/wAYYLDC5AjDFYQzDHYZDDJYZbLAB4=")); + +var partSunIcon = require("heatshrink").decompress(atob("kEgwIEBmAICAYUQmEggE4mFwgEcvHggEP//AgEHw+MgEGg+OAYMPg/Ahkcg/w/kYDwP8nEAjEMEQMMg3wAYMHwADBkY2BhlxAYMOsADBgwxBgEDAZYTDFQIbBn////8J4P/GIIAW")); + +var cloudIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuADBh1gAYMGDQMADwQDJCYYbDn////8h4DB+CDXA")); + +var snowIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuACBh1gAYMG4Ewn4eBAYf8hgDEsEwgEGuADBh0/gHD/kPAYPwgEDAQIDEgBEBAYoAFA=")); + +var rainIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuEA4EOsADBgwaB4AeCAYUM5gDEsADBg1wAYMOn/M5n8h4DB+A1JAYwAG")); + +var stormIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuADBh1gAYMGDQM8DwV4AY3wgYTB8EGuEB8EOn/5/n8h/z/PwEQMwLgQtCKAIDCEIIAHA")); + +var errIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EB4HAnEDAYMYg0A4EMhgDGEIIDBuADBh1gAYMGEgMADwIDE4ADECYMAgwbBgEOn////8h4DB+CDXA")); + +/** +Choose weather icon to display based on condition. +Based on function from the Bangle weather app so it should handle all of the conditions +sent from gadget bridge. +*/ +function chooseIcon(condition) { + condition = condition.toLowerCase(); + if (condition.includes("thunderstorm")) return stormIcon; + if (condition.includes("freezing")||condition.includes("snow")|| + condition.includes("sleet")) { + return snowIcon; + } + if (condition.includes("drizzle")|| + condition.includes("shower")) { + return rainIcon; + } + if (condition.includes("rain")) return rainIcon; + if (condition.includes("clear")) return sunIcon; + if (condition.includes("few clouds")) return partSunIcon; + if (condition.includes("scattered clouds")) return cloudIcon; + if (condition.includes("clouds")) return cloudIcon; + if (condition.includes("mist") || + condition.includes("smoke") || + condition.includes("haze") || + condition.includes("sand") || + condition.includes("dust") || + condition.includes("fog") || + condition.includes("ash") || + condition.includes("squalls") || + condition.includes("tornado")) { + return cloudIcon; + } + return cloudIcon; +} + +/* +* Choose weather icon to display based on weather conditition code +* https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2 +*/ +function chooseIconByCode(code) { + const codeGroup = Math.round(code / 100); + switch (codeGroup) { + case 2: return stormIcon; + case 3: return rainIcon; + case 5: return rainIcon; + case 6: return snowIcon; + case 7: return cloudIcon; + case 8: + switch (code) { + case 800: return sunIcon; + case 801: return partSunIcon; + default: return cloudIcon; + } + default: return cloudIcon; + } +} + +/** +Get weather stored in json file by weather app. +*/ +function getWeather() { + let jsonWeather = storage.readJSON('weather.json'); + return jsonWeather; +} + +// timeout used to update every minute +var drawTimeout; + +// schedule a draw for the next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +// only draw the first time +function drawBg() { + g.reset(); + g.drawImage(bgImg, 0, 101); +} + +function draw() { + var d = new Date(); + var h = d.getHours(), m = d.getMinutes(); + h = ("0"+h).substr(-2); + m = ("0"+m).substr(-2); + + var day = d.getDate(), mon = d.getMonth(), dow = d.getDay(); + day = ("0"+day).substr(-2); + mon = ("0"+mon).substr(-2); + dow = ((dow+6) % 7).toString(); + date = day + "." + mon + + var weatherJson = getWeather(); + var weatherIcon; + var temp; + if(weatherJson && weatherJson.weather){ + var currentWeather = weatherJson.weather; + temp = locale.temp(currentWeather.temp-273.15).match(/^(\D*\d*)(.*)$/); + const code = currentWeather.code || -1; + if (code > 0) { + weatherIcon = chooseIconByCode(code); + } else { + weatherIcon = chooseIcon(currentWeather.txt); + } + } + else{ + temp = ""; + weatherIcon = errIcon; + } + weatherIcon = chooseIconByCode(700); + g.reset(); + g.setFont("4x5NumPretty",8); + g.clearRect(22,35,153,75); + g.fillRect(84, 42, 92, 49); + g.fillRect(84, 60, 92, 67); + g.drawString(h, 22, 35); + g.drawString(m, 98, 35); + + g.setFont("4x5NumPretty",2); + g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); + g.drawString(date, 22, 95); + g.setFont("DoW"); + g.clearRect(22, 79, 22+24, 79+13); + g.drawString(dow, 22, 79); + + g.clearRect(119, 81, 126+32, 81+32); + g.drawImage(weatherIcon, 126, 81); + if (temp != "") { + g.clearRect(126, 114, 126+5*4*4, 114+4*5); + g.setFont("4x5NumPretty",4); + g.drawString(temp[1], 126, 114); + g.setFont("4x6", 2); + g.drawString("o", 126+temp[1].length*4*4+5, 112); + } + + // queue draw in one minute + queueDraw(); +} + +g.clear(); +Bangle.setUI("clock"); // Show launcher when middle button pressed +Bangle.loadWidgets(); +Bangle.drawWidgets(); +drawBg(); +draw(); + diff --git a/apps/dynoclock/metadata.json b/apps/dynoclock/metadata.json new file mode 100644 index 000000000..0db7de9ab --- /dev/null +++ b/apps/dynoclock/metadata.json @@ -0,0 +1,11 @@ +{ + "id": "dynoClock", + "name": "Dyno Clock", + "version": "0.01", + "type": "clock", + "tags": "clock, weather", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"dynoClock.app.js","url":"app.js"} + ] +} From 09ffe0740b1a403791b2ab976421f83e49deb966 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:38:54 +0200 Subject: [PATCH 02/28] rename dynoclock dir --- apps/{dynoclock => dynoClock}/app.js | 0 apps/{dynoclock => dynoClock}/metadata.json | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename apps/{dynoclock => dynoClock}/app.js (100%) rename apps/{dynoclock => dynoClock}/metadata.json (100%) diff --git a/apps/dynoclock/app.js b/apps/dynoClock/app.js similarity index 100% rename from apps/dynoclock/app.js rename to apps/dynoClock/app.js diff --git a/apps/dynoclock/metadata.json b/apps/dynoClock/metadata.json similarity index 100% rename from apps/dynoclock/metadata.json rename to apps/dynoClock/metadata.json From 9f21d96d135d53efc946a989ff8aa275faf3e489 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:40:59 +0200 Subject: [PATCH 03/28] description --- apps/dynoClock/metadata.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/dynoClock/metadata.json b/apps/dynoClock/metadata.json index 0db7de9ab..62ca5ce0d 100644 --- a/apps/dynoClock/metadata.json +++ b/apps/dynoClock/metadata.json @@ -1,11 +1,12 @@ { - "id": "dynoClock", - "name": "Dyno Clock", + "id": "dinoClock", + "name": "Dino Clock", + "description": "Clock with dino from Chrome", "version": "0.01", "type": "clock", "tags": "clock, weather", "supports": ["BANGLEJS2"], "storage": [ - {"name":"dynoClock.app.js","url":"app.js"} + {"name":"dinoClock.app.js","url":"app.js"} ] } From 409dadacb70328826b97ac7ed7ceb471d5600488 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:41:30 +0200 Subject: [PATCH 04/28] rename dyno to dino --- apps/{dynoClock => dinoClock}/app.js | 0 apps/{dynoClock => dinoClock}/metadata.json | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename apps/{dynoClock => dinoClock}/app.js (100%) rename apps/{dynoClock => dinoClock}/metadata.json (100%) diff --git a/apps/dynoClock/app.js b/apps/dinoClock/app.js similarity index 100% rename from apps/dynoClock/app.js rename to apps/dinoClock/app.js diff --git a/apps/dynoClock/metadata.json b/apps/dinoClock/metadata.json similarity index 100% rename from apps/dynoClock/metadata.json rename to apps/dinoClock/metadata.json From 8d1d688bf038b52c868a1fe2eec94957af445da6 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:44:30 +0200 Subject: [PATCH 05/28] add (wrong) icon --- apps/dinoClock/app.png | Bin 0 -> 3259 bytes apps/dinoClock/metadata.json | 1 + 2 files changed, 1 insertion(+) create mode 100644 apps/dinoClock/app.png diff --git a/apps/dinoClock/app.png b/apps/dinoClock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..434811541f217787965236c1f05c875089be3099 GIT binary patch literal 3259 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 literal 0 HcmV?d00001 diff --git a/apps/dinoClock/metadata.json b/apps/dinoClock/metadata.json index 62ca5ce0d..2b8717ea7 100644 --- a/apps/dinoClock/metadata.json +++ b/apps/dinoClock/metadata.json @@ -2,6 +2,7 @@ "id": "dinoClock", "name": "Dino Clock", "description": "Clock with dino from Chrome", + "icon": "app.png", "version": "0.01", "type": "clock", "tags": "clock, weather", From d417696c43df5ff2bdd25d8148e69d01f6c90d02 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 09:58:17 +0200 Subject: [PATCH 06/28] dino: clear screen --- apps/dinoClock/app.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index f0a31c633..7832c4641 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -117,11 +117,13 @@ function queueDraw() { // only draw the first time function drawBg() { + g.clearRect(0, 24, 176, 176); g.reset(); g.drawImage(bgImg, 0, 101); } function draw() { + drawBg(); var d = new Date(); var h = d.getHours(), m = d.getMinutes(); h = ("0"+h).substr(-2); @@ -153,23 +155,23 @@ function draw() { weatherIcon = chooseIconByCode(700); g.reset(); g.setFont("4x5NumPretty",8); - g.clearRect(22,35,153,75); + //g.clearRect(22,35,153,75); g.fillRect(84, 42, 92, 49); g.fillRect(84, 60, 92, 67); g.drawString(h, 22, 35); g.drawString(m, 98, 35); g.setFont("4x5NumPretty",2); - g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); + //g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); g.drawString(date, 22, 95); g.setFont("DoW"); - g.clearRect(22, 79, 22+24, 79+13); + //g.clearRect(22, 79, 22+24, 79+13); g.drawString(dow, 22, 79); - g.clearRect(119, 81, 126+32, 81+32); + //g.clearRect(119, 81, 126+32, 81+32); g.drawImage(weatherIcon, 126, 81); if (temp != "") { - g.clearRect(126, 114, 126+5*4*4, 114+4*5); + //g.clearRect(126, 114, 126+5*4*4, 114+4*5); g.setFont("4x5NumPretty",4); g.drawString(temp[1], 126, 114); g.setFont("4x6", 2); @@ -184,6 +186,5 @@ g.clear(); Bangle.setUI("clock"); // Show launcher when middle button pressed Bangle.loadWidgets(); Bangle.drawWidgets(); -drawBg(); draw(); From 45c2f943e00a49e9f653861e5179e842a5dd85be Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 17:37:56 +0200 Subject: [PATCH 07/28] update dino app icon --- apps/dinoClock/app.png | Bin 3259 -> 8824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/dinoClock/app.png b/apps/dinoClock/app.png index 434811541f217787965236c1f05c875089be3099..53f5af659f3a8734d80cc815990f0d48ae876ffc 100644 GIT binary patch literal 8824 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 literal 3259 zcmZ`*c|2568@??@*|$>m>=hbIgHg7Iq^u=tlVvQ~vSnYR#+o%m6k|-r{z*d&O~N3g zsl*`5$esvAgYWd`_s93UzkAQU=bZPRbDsBkpZ85NH@(csCd39o5a$&mlqG24|L!9& z@U%X-jRnnNcRdq52&zwKXF9QfZwVJ8OA`nRmxZ9%1PIyzU9s~JbPpIVIzkXKAA$t^ zp1!uY00v;rS1+TW{eRbUG9erEum)W*F<_nLU^yUkv`+WfA_TFwUqR{J@R(S665;*n z^Q&&1UxiL$QFQ$h8ml?-IGwlixFX@f&m+{Nq&38*C`A~Tbpj`A*pVjdV3MeuPt|dj z^x&^4kx!@Va}yG|nX2P3xK_B#_)Yh! zB@h254Ua~w?9vhwf3iLdAaMT4ep7^)G&>kF8mn`3?9QRRm80{%k^ab{jg1XQ_=%?9 z6A{WMIQ$ZoQrRRU*&E!oq@aa~sewQWL^AH1Lz?X@Y&}D`%dXq&v(CV(uFf0=gGq}O6cm&ZiN+s4ethQ$ zPwc^DWo7YI)YRmf%L`a{FKzaYHhLM<4yW{B_;5oSc#lTAumyY`3dPu1pk);oE5YKO z?6k6bqnN?*K4bnVOS-1Uspg{-Wun3>6)K7Ge{f66bP!C-hPmC%$Uw!HcH z`3e1{9aFkiR+5?2dz7`AZW&EY+uq(@M&G&ioR-x#`~NgF;M?0{M)R1<4TC7$kWqAW zo0^&$^}~k@CiBMJ8TeXT{R7_m;j`n49w~nT1Wpv4+kS zg;0BYla~clgg**ZgyfN8_jsy+|v>5{))BFkq>?Sv@@- z@(n<3tpCItsBESJ$M^p2t!;C6Ps@P`zEX3IZXUX@m+74=-zIxIX4f`V*;b+Y($o zAB41R^n9#_K=gK|2+sbT>aa97mk1}Lw^rzaAuQ~$cuQN`)3K4vwQd@tJta1gYNoR* zEv)XF^YW$I0aWeqRW!O7vUG3|Veb;=O+uC7aFC$z~-PW~-(E4=Bxh~OK zJl?=fm{V! zK5Im?M?%L`)4J5q;$2=*k#sR)>%-`1?{sHMbL6%P zmP=HhK&!t)lLb+-wjCL{vq1Q|5?ma!7nYoyY-DEUzQ4CCq8*ukonV?-Ts$z+;I0|A zE`sUwsn8+uS(1wGrzc0-nr4vb-3mhUlOYP zPp||}29ZcS86Uz|Fg4}0y+yx!^nt$W&T7GVFKT~(+GkA>E+JuI|CVvETCUP9V}E~t zZ!$M5UgTo9Kwe)bP#~ArLmoNB#bQ8IE^CN%VN@(EEc8rG2VVL|X^U@eZvNSg{!(o( zINS-Tt=qQ@?*}rc1`oyXHPP}7->d}lbHL)fC>mji6T-qS7)(NDX6Dy&9C0y6q-$xj z>-ZrntNIadlqBy3F>XnHX+FwqKxdXVFU75amjecN^@1qWaBAXL+OC;?3kb&Q>~rn| zPn`gy*REYNx3Qs4kR!Ig7v8mb<$dyY)aEhq=s%}iTwH9bZ%Sq!X$e{V=dYF@ui4`% zZ*mpwLGZryMt~^0W^FAvH~7rG`;lmsZNtOBxd97nYb<@G%emffw)fcL($W_2nwsC>($97RWrAf6c4kO*Kw8Ry>B8c{NXIYArN$ zv4UV^Y+OntCU0y6JvEgB=xr_y2W~Cfw(aeBjrppB>3$m5fWQFafggdBmzXDh{AdZ7 zpp8T#d3b?CK)foTTl0Y-jZW`dpb;fG z06eYW<>#%fA}O8s(Y5Z8k&$e1r<={;Cm77_UkVOQ8MkA0AI}v>JkkvO{^9dy7F|6@b)6`6<_fJ%@j~;P}g)w+h2?Yg053$&hmXLEm@Y>q6 z!ODg}l4WFM<~PHEB+f4^lz>fki$$b@smB%V62^TAm6hz-JqfghvX+*@OIR)oG+IoH zVnU|^r3X?Am=%N+1qg7!l!ekl$!I=4K4(@5E32ch`1(WJ418?gEZ_ug$m4{#xSRl+ zvey>{H6c!r4aw;A?wM1ns{G*P+iLgB+H-j}kV5}Nw&ip3^YhCm-={cA@EifX6%`fr zxAt!b$=zJ>`!40@&_>(Zm96QHUBpskk3^KrUG?}Y^#0r1bwNr#6c!U_+e5mT0X9w| z<;h&l%>XICGDJfJAalbCkHf_S4Q}ulDy2(Iia+Q$7q_6IaG>~LYYcXVljkYt{E9?-c1$cZzhx3gv~4DPYgYE9*Q}Z zuWoxfXUhD(`zh$4lX~h_ zte(Wg`~HIt?Xh#ibV*P|y{M{^mXnkFF;xHjc`T85W@l#yc!spB{f6_men*;Q<4H;F zJ%9RoI-edRhTmY6yRZ7KTf>#8D6&Iyz^pp`^|)_y=-PA+(#i_o+-%#5t_=zfP9B^q zwAkNKDac?YC;e1^!-|T7KEO6kI!)ZS56)X$^sGUXdnxg(AoVBcp90lZ-H0~_2gl^^ zzo5AL>Wu&tXXO%c#9*YqV2Q+5Q0FawYk%g_{b+pS%a3rLC60{iY%|S2(>NpZP8D!w zvcTnzxyb~aH5YimU|_%r>gX$pN7|X|?BbC>4wEvdfbdXD?sT4F^khrR%1(U3*YF#?Pw3r0FciCVfw|KD9K$YNuP;>xYVdQ}c~nV#_=&RG z+I0NYy#Iu6{sSs`$Rl<46Z`~6l}-Kq(o#uKkQx~o<@;A@Ww9IJEWmMX>KrL1`P4)@U~UHTsbpSzelZejo5Kt!B-9~eMa3`|iq`i}Si3+A>u=Kufz From bdf2cf5b7629c9e6da9360326582b3420be52491 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 17:47:33 +0200 Subject: [PATCH 08/28] remove region cleanup, fix weather icon and degree symbol --- apps/dinoClock/app.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 7832c4641..ac07e55d1 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -152,30 +152,26 @@ function draw() { temp = ""; weatherIcon = errIcon; } - weatherIcon = chooseIconByCode(700); g.reset(); g.setFont("4x5NumPretty",8); - //g.clearRect(22,35,153,75); g.fillRect(84, 42, 92, 49); g.fillRect(84, 60, 92, 67); g.drawString(h, 22, 35); g.drawString(m, 98, 35); g.setFont("4x5NumPretty",2); - //g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); g.drawString(date, 22, 95); g.setFont("DoW"); - //g.clearRect(22, 79, 22+24, 79+13); g.drawString(dow, 22, 79); - //g.clearRect(119, 81, 126+32, 81+32); g.drawImage(weatherIcon, 126, 81); if (temp != "") { - //g.clearRect(126, 114, 126+5*4*4, 114+4*5); + var x = 126; g.setFont("4x5NumPretty",4); g.drawString(temp[1], 126, 114); - g.setFont("4x6", 2); - g.drawString("o", 126+temp[1].length*4*4+5, 112); + x += temp[1].length*4*4; + g.fillRect(x, 114, x+6, 114+6); + g.setColor("#fff").fillRect(x+2, 114+2, x+6-2, 114+6-2); } // queue draw in one minute From 08a98d403eba54ac5a6fabcc13acb148e15dede5 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 18:04:40 +0200 Subject: [PATCH 09/28] add icon --- apps/dinoClock/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dinoClock/metadata.json b/apps/dinoClock/metadata.json index 2b8717ea7..a1b1288bd 100644 --- a/apps/dinoClock/metadata.json +++ b/apps/dinoClock/metadata.json @@ -8,6 +8,7 @@ "tags": "clock, weather", "supports": ["BANGLEJS2"], "storage": [ - {"name":"dinoClock.app.js","url":"app.js"} + {"name":"dinoClock.app.js","url":"app.js"}, + {"name":"dinoClock.img","url":"icon.js","evaluate":true} ] } From c7aba47f5d4508714193ad1952840ffa62388c80 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 18:06:44 +0200 Subject: [PATCH 10/28] add icon.js --- apps/dinoClock/icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/dinoClock/icon.js diff --git a/apps/dinoClock/icon.js b/apps/dinoClock/icon.js new file mode 100644 index 000000000..d3f517db7 --- /dev/null +++ b/apps/dinoClock/icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgP/AC+eg/A4AFCg1AAoP+j/mvnMAoXn/gFB/+f84XDAowXDAov+g4RDAooAfgEf/F///8gEH++/AoNAg/v44LD5/zAoe//YFDn4FDg1//IFD//9AoMD/wFDgE+CIO//EPHoMD3/gAoIABAouPwDCDw0AAosJAoWAgAXDApfAAongOwIFC+EAPQIAB/AFE/0IRof+jgEC8YFEzsAAAd+/08DogFEA=")) From 4b91dd9fce7c2f6cb54c3ef4ef50f46a0511bc35 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 19:20:43 +0200 Subject: [PATCH 11/28] do not redraw all screen on draw --- apps/dinoClock/app.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index ac07e55d1..6f533a422 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -117,13 +117,11 @@ function queueDraw() { // only draw the first time function drawBg() { - g.clearRect(0, 24, 176, 176); g.reset(); g.drawImage(bgImg, 0, 101); } function draw() { - drawBg(); var d = new Date(); var h = d.getHours(), m = d.getMinutes(); h = ("0"+h).substr(-2); @@ -153,18 +151,26 @@ function draw() { weatherIcon = errIcon; } g.reset(); + g.clearRect(22,35,153,75); g.setFont("4x5NumPretty",8); g.fillRect(84, 42, 92, 49); g.fillRect(84, 60, 92, 67); g.drawString(h, 22, 35); g.drawString(m, 98, 35); + g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); g.setFont("4x5NumPretty",2); g.drawString(date, 22, 95); + + g.clearRect(22, 79, 22+24, 79+13); g.setFont("DoW"); g.drawString(dow, 22, 79); + // not needed in case icon is w/o transparency + g.clearRect(126, 81, 126+32, 81+32); g.drawImage(weatherIcon, 126, 81); + + g.clearRect(126, 114, 126+5*4*4, 114+4*5); if (temp != "") { var x = 126; g.setFont("4x5NumPretty",4); @@ -179,6 +185,7 @@ function draw() { } g.clear(); +drawBg(); Bangle.setUI("clock"); // Show launcher when middle button pressed Bangle.loadWidgets(); Bangle.drawWidgets(); From 2cbdd6dcdcf106853aca3a6d7de6b8ed55f6b6ff Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 19:22:03 +0200 Subject: [PATCH 12/28] dino: getMonth returns 0-11, correct for that --- apps/dinoClock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 6f533a422..9368f3f6a 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -129,7 +129,7 @@ function draw() { var day = d.getDate(), mon = d.getMonth(), dow = d.getDay(); day = ("0"+day).substr(-2); - mon = ("0"+mon).substr(-2); + mon = ("0"+(mon+1)).substr(-2); dow = ((dow+6) % 7).toString(); date = day + "." + mon From 1c8ab449ea74bc9fbf6565485a0da48f5d2662d3 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 19:28:52 +0200 Subject: [PATCH 13/28] invert icon --- apps/dinoClock/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dinoClock/icon.js b/apps/dinoClock/icon.js index d3f517db7..36f1bc8a6 100644 --- a/apps/dinoClock/icon.js +++ b/apps/dinoClock/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgP/AC+eg/A4AFCg1AAoP+j/mvnMAoXn/gFB/+f84XDAowXDAov+g4RDAooAfgEf/F///8gEH++/AoNAg/v44LD5/zAoe//YFDn4FDg1//IFD//9AoMD/wFDgE+CIO//EPHoMD3/gAoIABAouPwDCDw0AAosJAoWAgAXDApfAAongOwIFC+EAPQIAB/AFE/0IRof+jgEC8YFEzsAAAd+/08DogFEA=")) +require("heatshrink").decompress(atob("mEwgP/ABXACYcDAuFh/E/hgFC/O/AoPB8EZwc8AoUYgYFB4FgjAXDAowXBAo/B/ARBn4FGIIvBmAFE2AEBhwFEiIXEkGD4PvC4ntgfwoARCgRmBAoUD/ARCwAFBu9jAoWAiND4Ohg+Au8D4uhh+AogFC3/ABYf/wAjB4/hAofDwH/IIeAvwFEmkAhEj77nC8ePI4M2aLQiCABAA=")) From 108cfc7d311afe84949ce657205884b77b44a32d Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 21:21:08 +0200 Subject: [PATCH 14/28] dinoClock: update icons to ios glyph --- apps/dinoClock/app.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 9368f3f6a..ad1f8a7b4 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -23,20 +23,21 @@ const locale = require("locale"); var bgImg = require("heatshrink").decompress(atob("2E7wINKn///+AEaIVUgIUB//wCs/5CtRXrCvMD8AVTg4LFCv4VZ/iSLCrwWMCrMOAQMPCp7cBCojjFCo/xFgIVQgeHCopABCpcH44Vuh/AQQX/wAV7+F/Cq/nCsw/CCqyvRCvgODCqfAgEDCp4QCSIIVQgIOBDQgGDABX/NgIECCp8HCrM/CgP4CqKaCCqSfCCqq1BCqBuB54VqgYVG/gCECp0BwgCDCp8HgYCDCo/wCo0MgHAjACBj7rDABS1Bv4lBv4rPAAsPCo3+gbbPJAIVFiAXMFZ2AUQsAuAQHiOAgJeEA")); -// weather icons from https://icons8.com/icon/set/weather/small -var sunIcon = require("heatshrink").decompress(atob("kEgwIMJgYDJgUDgMAg8DgeAgeDg8AgPHxwQB//8AYN4vADBsEYAYvAhkAn/Ah/wAYYLDC5AjDFYQzDHYZDDJYZbLAB4=")); +// weather icons from https://icons8.com/icon/set/weather/ios-glyphs +var sunIcon = atob("Hh4BAAAAAAAMAAAAMAAAAMAAAAMAABgMBgBwADgA4AHAAY/GAAB/gAAD/wAAH/4AAP/8AAP/8AfP/8+fP/8+AP/8AAP/8AAH/4AAD/wAAB/gAAY/GAA4AHABwADgBgMBgAAMAAAAMAAAAMAAAAMAAAAAAAA="); -var partSunIcon = require("heatshrink").decompress(atob("kEgwIEBmAICAYUQmEggE4mFwgEcvHggEP//AgEHw+MgEGg+OAYMPg/Ahkcg/w/kYDwP8nEAjEMEQMMg3wAYMHwADBkY2BhlxAYMOsADBgwxBgEDAZYTDFQIbBn////8J4P/GIIAW")); +var partSunIcon = atob("Hh4B///////////z////z///7z3//x/j//5/n///h////A///+Af//GAf//GAfB/+B8Af/H4AP/uAAP58AAHx8AAH74AAH/4AAH/gAAB/gAAB/AAAA/AAAA/AAAA/AAAA/gAAB/wAAD///////////////A="); -var cloudIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuADBh1gAYMGDQMADwQDJCYYbDn////8h4DB+CDXA")); +var cloudIcon = atob("Hh4B///////////////////////////4H///gB///AA//+AAf/gAAf+AAAP+AAAP8AAAP8AAAPwAAADgAAABgAAABAAAAAAAAAAAAAAAAAAAAgAAABgAAABwAAAD8AAAP/////////////////////////A="); -var snowIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuACBh1gAYMG4Ewn4eBAYf8hgDEsEwgEGuADBh0/gHD/kPAYPwgEDAQIDEgBEBAYoAFA=")); +var snowIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gDA//ADA/+Af4f4APwH4APwDwAf4DwADADwADADwAAAD4AAAH8AAAP//////z////z///+Af5//A/gf/A/gf+Afgf/z/gf/z/5///////////A="); -var rainIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuEA4EOsADBgwaB4AeCAYUM5gDEsADBg1wAYMOn/M5n8h4DB+A1JAYwAG")); +var rainIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gAA//AAA/+AAAf4AAAH4AAAHwAAADwAAADwAAADwAAAD4AAAH8AAAP//////////+f+f/+f+f/+eeef/+f+f/+f+f////////////////////A="); -var stormIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EBAoM4gYDBjEGCIMMhgDGEIUMuADBh1gAYMGDQM8DwV4AY3wgYTB8EGuEB8EOn/5/n8h/z/PwEQMwLgQtCKAIDCEIIAHA")); +var stormIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gAA//AAA/+AAAf4AAAH4AOADwAfADwAbADwA7ADwAzAD4BzwH8Bj4P//gf///Af/+fA//+f4//+f5+f//5+f//7+f//7/////////////////A="); -var errIcon = require("heatshrink").decompress(atob("kEgwIURg/gAYMf/ADBnk8AYNwhwDBsEH4EA8EH+EB4HAnEDAYMYg0A4EMhgDGEIIDBuADBh1gAYMGEgMADwIDE4ADECYMAgwbBgEOn////8h4DB+CDXA")); +// from https://icons8.com/icon/set/error-cloud/ios-glyphs +var errIcon = atob("Hh4B///////////////////////////4H///gB///AA//+AAf/gAAf+AAAP+AMAP8AMAP8AMAPwAMADgAMABgAMABAAMAAAAAAAAAAAAAAMAAgAMABgAAABwAAAD8AAAP/////////////////////////A="); /** Choose weather icon to display based on condition. From bb5d5068a4dbc8bd923bdbd5392e35d82a1ea477 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 21:44:08 +0200 Subject: [PATCH 15/28] dinoClock: move all icons into functions & invert (some) icons --- apps/dinoClock/app.js | 77 +++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index ad1f8a7b4..9bbb6b97b 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -20,24 +20,28 @@ const locale = require("locale"); -var bgImg = require("heatshrink").decompress(atob("2E7wINKn///+AEaIVUgIUB//wCs/5CtRXrCvMD8AVTg4LFCv4VZ/iSLCrwWMCrMOAQMPCp7cBCojjFCo/xFgIVQgeHCopABCpcH44Vuh/AQQX/wAV7+F/Cq/nCsw/CCqyvRCvgODCqfAgEDCp4QCSIIVQgIOBDQgGDABX/NgIECCp8HCrM/CgP4CqKaCCqSfCCqq1BCqBuB54VqgYVG/gCECp0BwgCDCp8HgYCDCo/wCo0MgHAjACBj7rDABS1Bv4lBv4rPAAsPCo3+gbbPJAIVFiAXMFZ2AUQsAuAQHiOAgJeEA")); - - // weather icons from https://icons8.com/icon/set/weather/ios-glyphs -var sunIcon = atob("Hh4BAAAAAAAMAAAAMAAAAMAAAAMAABgMBgBwADgA4AHAAY/GAAB/gAAD/wAAH/4AAP/8AAP/8AfP/8+fP/8+AP/8AAP/8AAH/4AAD/wAAB/gAAY/GAA4AHABwADgBgMBgAAMAAAAMAAAAMAAAAMAAAAAAAA="); +// error icon from https://icons8.com/icon/set/error-cloud/ios-glyphs +function weatherIcon(weather) { + switch (weather) { + case "sun": + return atob("Hh4BAAAAAAAMAAAAMAAAAMAAAAMAABgMBgBwADgA4AHAAY/GAAB/gAAD/wAAH/4AAP/8AAP/8AfP/8+fP/8+AP/8AAP/8AAH/4AAD/wAAB/gAAY/GAA4AHABwADgBgMBgAAMAAAAMAAAAMAAAAMAAAAAAAA="); + case "partSun": + return atob("Hh4BAAAAAAAAAAAMAAAAMAAAEMIAAOAcAAGAYAAAeAAAA/AAAB/gAA5/gAA5/g+AB+D/gA4H/wAR//wGD//4OD//4EH//4AH//4Af//+Af//+A////A////A////A///+Af//+AH//4AAAAAAAAAAAAAAAA="); + case "cloud": + return atob("Hh4BAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAf+AAA//AAB//gAf//gB///wB///wD///wD///wP///8f///+f///+////////////////////f///+f///+P///8D///wAAAAAAAAAAAAAAAAAAAAAAAAAA="); + case "snow": + return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf8/AA/8/AB/gHgH/wP4H/wP4P/gH8P/8/8P/8/8P///4H///4B///gAAAAAAMAAAAMAAAB/gGAA/AfgA/AfgB/gfgAMAfgAMAGAAAAAAAAAAAA="); + case "rain": + return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf//AA///AB///gH///4H///4P///8P///8P///8P///4H///4B///gAAAAAAAAAABgBgABgBgABhhhgABgBgABgBgAAAAAAAAAAAAAAAAAAAAA="); + case "storm": + return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf//AA///AB///gH///4H/x/4P/g/8P/k/8P/E/8P/M/4H+MP4B+cHgAAfgAAA/gABg/AABgHAABgGBgAAGBgAAEBgAAEAAAAAAAAAAAAAAAAAA="); + case "err": + default: + return atob("Hh4BAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAf+AAA//AAB//gAf//gB///wB/z/wD/z/wD/z/wP/z/8f/z/+f/z/+//z//////////////z//f/z/+f///+P///8D///wAAAAAAAAAAAAAAAAAAAAAAAAAA="); + } +} -var partSunIcon = atob("Hh4B///////////z////z///7z3//x/j//5/n///h////A///+Af//GAf//GAfB/+B8Af/H4AP/uAAP58AAHx8AAH74AAH/4AAH/gAAB/gAAB/AAAA/AAAA/AAAA/AAAA/gAAB/wAAD///////////////A="); - -var cloudIcon = atob("Hh4B///////////////////////////4H///gB///AA//+AAf/gAAf+AAAP+AAAP8AAAP8AAAPwAAADgAAABgAAABAAAAAAAAAAAAAAAAAAAAgAAABgAAABwAAAD8AAAP/////////////////////////A="); - -var snowIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gDA//ADA/+Af4f4APwH4APwDwAf4DwADADwADADwAAAD4AAAH8AAAP//////z////z///+Af5//A/gf/A/gf+Afgf/z/gf/z/5///////////A="); - -var rainIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gAA//AAA/+AAAf4AAAH4AAAHwAAADwAAADwAAADwAAAD4AAAH8AAAP//////////+f+f/+f+f/+eeef/+f+f/+f+f////////////////////A="); - -var stormIcon = atob("Hh4B/////////////////4P///gD///AB//4AB//gAA//gAA//AAA/+AAAf4AAAH4AOADwAfADwAbADwA7ADwAzAD4BzwH8Bj4P//gf///Af/+fA//+f4//+f5+f//5+f//7+f//7/////////////////A="); - -// from https://icons8.com/icon/set/error-cloud/ios-glyphs -var errIcon = atob("Hh4B///////////////////////////4H///gB///AA//+AAf/gAAf+AAAP+AMAP8AMAP8AMAPwAMADgAMABgAMABAAMAAAAAAAAAAAAAAMAAgAMABgAAABwAAAD8AAAP/////////////////////////A="); /** Choose weather icon to display based on condition. @@ -46,20 +50,20 @@ sent from gadget bridge. */ function chooseIcon(condition) { condition = condition.toLowerCase(); - if (condition.includes("thunderstorm")) return stormIcon; + if (condition.includes("thunderstorm")) return weatherIcon("storm"); if (condition.includes("freezing")||condition.includes("snow")|| condition.includes("sleet")) { - return snowIcon; + return weatherIcon("snow"); } if (condition.includes("drizzle")|| condition.includes("shower")) { - return rainIcon; + return weatherIcon("rain"); } - if (condition.includes("rain")) return rainIcon; - if (condition.includes("clear")) return sunIcon; - if (condition.includes("few clouds")) return partSunIcon; - if (condition.includes("scattered clouds")) return cloudIcon; - if (condition.includes("clouds")) return cloudIcon; + if (condition.includes("rain")) return weatherIcon("rain"); + if (condition.includes("clear")) return weatherIcon("sun"); + if (condition.includes("few clouds")) return weatherIcon("partSun"); + if (condition.includes("scattered clouds")) return weatherIcon("cloud"); + if (condition.includes("clouds")) return weatherIcon("cloud"); if (condition.includes("mist") || condition.includes("smoke") || condition.includes("haze") || @@ -69,9 +73,9 @@ function chooseIcon(condition) { condition.includes("ash") || condition.includes("squalls") || condition.includes("tornado")) { - return cloudIcon; + return weatherIcon("cloud"); } - return cloudIcon; + return weatherIcon("cloud"); } /* @@ -81,18 +85,18 @@ function chooseIcon(condition) { function chooseIconByCode(code) { const codeGroup = Math.round(code / 100); switch (codeGroup) { - case 2: return stormIcon; - case 3: return rainIcon; - case 5: return rainIcon; - case 6: return snowIcon; - case 7: return cloudIcon; + case 2: return weatherIcon("storm"); + case 3: return weatherIcon("rain"); + case 5: return weatherIcon("rain"); + case 6: return weatherIcon("snow"); + case 7: return weatherIcon("cloud"); case 8: switch (code) { - case 800: return sunIcon; - case 801: return partSunIcon; - default: return cloudIcon; + case 800: return weatherIcon("sun"); + case 801: return weatherIcon("partSun"); + default: return weatherIcon("cloud"); } - default: return cloudIcon; + default: return weatherIcon("cloud"); } } @@ -118,6 +122,7 @@ function queueDraw() { // only draw the first time function drawBg() { + var bgImg = require("heatshrink").decompress(atob("2E7wINKn///+AEaIVUgIUB//wCs/5CtRXrCvMD8AVTg4LFCv4VZ/iSLCrwWMCrMOAQMPCp7cBCojjFCo/xFgIVQgeHCopABCpcH44Vuh/AQQX/wAV7+F/Cq/nCsw/CCqyvRCvgODCqfAgEDCp4QCSIIVQgIOBDQgGDABX/NgIECCp8HCrM/CgP4CqKaCCqSfCCqq1BCqBuB54VqgYVG/gCECp0BwgCDCp8HgYCDCo/wCo0MgHAjACBj7rDABS1Bv4lBv4rPAAsPCo3+gbbPJAIVFiAXMFZ2AUQsAuAQHiOAgJeEA")); g.reset(); g.drawImage(bgImg, 0, 101); } @@ -149,7 +154,7 @@ function draw() { } else{ temp = ""; - weatherIcon = errIcon; + weatherIcon = weatherIcon("err"); } g.reset(); g.clearRect(22,35,153,75); From aac7aad6a71b230d71030978eba07245e3e5c127 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Tue, 10 May 2022 21:46:10 +0200 Subject: [PATCH 16/28] dinoClock: rename weatherIcon to wIcon (name clash) & remove clear icon --- apps/dinoClock/app.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 9bbb6b97b..a208527f1 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -140,21 +140,21 @@ function draw() { date = day + "." + mon var weatherJson = getWeather(); - var weatherIcon; + var wIcon; var temp; if(weatherJson && weatherJson.weather){ var currentWeather = weatherJson.weather; temp = locale.temp(currentWeather.temp-273.15).match(/^(\D*\d*)(.*)$/); const code = currentWeather.code || -1; if (code > 0) { - weatherIcon = chooseIconByCode(code); + wIcon = chooseIconByCode(code); } else { - weatherIcon = chooseIcon(currentWeather.txt); + wIcon = chooseIcon(currentWeather.txt); } } else{ temp = ""; - weatherIcon = weatherIcon("err"); + wIcon = weatherIcon("err"); } g.reset(); g.clearRect(22,35,153,75); @@ -172,9 +172,7 @@ function draw() { g.setFont("DoW"); g.drawString(dow, 22, 79); - // not needed in case icon is w/o transparency - g.clearRect(126, 81, 126+32, 81+32); - g.drawImage(weatherIcon, 126, 81); + g.drawImage(wIcon, 126, 81); g.clearRect(126, 114, 126+5*4*4, 114+4*5); if (temp != "") { From 81b5dbcc92bebf7779881167b498c7cc4b8316ff Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:13:51 +0200 Subject: [PATCH 17/28] dinoClock: fix formatting and semicolons --- apps/dinoClock/app.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index a208527f1..0567d1f0b 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -8,14 +8,14 @@ const locale = require("locale"); (function(graphics) { graphics.prototype.setFont4x5NumPretty = function() { this.setFontCustom(atob("IQAQDJgH4/An4QXr0Fa/BwnwdrcH63BCHwfr8Ha/"), 45, atob("AwIEBAQEBAQEBAQEBA=="), 5); - } + }; })(Graphics); // add font for days of the week (function(graphics) { graphics.prototype.setFontDoW = function() { this.setFontCustom(atob("///////ADgB//////+AHAD//////gAAAH//////4D8B+A///////4AcAOAH//////4AcAOAAAAAB//////wA4AcAP//////wAAAAAAAA//////4AcAP//////wA4Af//////gAAAH//////5z85+c/OfnOAA4AcAOAH//////4AcAOAAAAAB//////wcAOAHB//////wAAAAAAAA///////ODnBzg5wc4AAAAD//////84OcH//8/+fAAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////84OcH//////AAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////gBwA///////AAAAAAAAAAAAA"), 48, 24, 13); - } + }; })(Graphics); @@ -137,7 +137,7 @@ function draw() { day = ("0"+day).substr(-2); mon = ("0"+(mon+1)).substr(-2); dow = ((dow+6) % 7).toString(); - date = day + "." + mon + date = day+"."+mon; var weatherJson = getWeather(); var wIcon; @@ -163,7 +163,7 @@ function draw() { g.fillRect(84, 60, 92, 67); g.drawString(h, 22, 35); g.drawString(m, 98, 35); - + g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); g.setFont("4x5NumPretty",2); g.drawString(date, 22, 95); From 3ef7a160e53a88b72ae2f8437e25b9c1c699f13b Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:14:04 +0200 Subject: [PATCH 18/28] dinoClock: update comments --- apps/dinoClock/app.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 0567d1f0b..681724e84 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -20,8 +20,11 @@ const locale = require("locale"); -// weather icons from https://icons8.com/icon/set/weather/ios-glyphs -// error icon from https://icons8.com/icon/set/error-cloud/ios-glyphs +/** +Choose weather icon based on weather const +Weather icons from https://icons8.com/icon/set/weather/ios-glyphs +Error icon from https://icons8.com/icon/set/error-cloud/ios-glyphs +**/ function weatherIcon(weather) { switch (weather) { case "sun": From d82024dd0c3acfd7c0e2f1d8aa1c751c0164af2d Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:18:58 +0200 Subject: [PATCH 19/28] dinoClock: replace weather strings with consts --- apps/dinoClock/app.js | 61 ++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 681724e84..6d74b48cd 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -19,6 +19,13 @@ const locale = require("locale"); })(Graphics); +const SUN = 1; +const PART_SUN = 2; +const CLOUD = 3; +const SNOW = 4; +const RAIN = 5; +const STORM = 6; +const ERR = 7; /** Choose weather icon based on weather const @@ -27,19 +34,19 @@ Error icon from https://icons8.com/icon/set/error-cloud/ios-glyphs **/ function weatherIcon(weather) { switch (weather) { - case "sun": + case SUN: return atob("Hh4BAAAAAAAMAAAAMAAAAMAAAAMAABgMBgBwADgA4AHAAY/GAAB/gAAD/wAAH/4AAP/8AAP/8AfP/8+fP/8+AP/8AAP/8AAH/4AAD/wAAB/gAAY/GAA4AHABwADgBgMBgAAMAAAAMAAAAMAAAAMAAAAAAAA="); - case "partSun": + case PART_SUN: return atob("Hh4BAAAAAAAAAAAMAAAAMAAAEMIAAOAcAAGAYAAAeAAAA/AAAB/gAA5/gAA5/g+AB+D/gA4H/wAR//wGD//4OD//4EH//4AH//4Af//+Af//+A////A////A////A///+Af//+AH//4AAAAAAAAAAAAAAAA="); - case "cloud": + case CLOUD: return atob("Hh4BAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAf+AAA//AAB//gAf//gB///wB///wD///wD///wP///8f///+f///+////////////////////f///+f///+P///8D///wAAAAAAAAAAAAAAAAAAAAAAAAAA="); - case "snow": + case SNOW: return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf8/AA/8/AB/gHgH/wP4H/wP4P/gH8P/8/8P/8/8P///4H///4B///gAAAAAAMAAAAMAAAB/gGAA/AfgA/AfgB/gfgAMAfgAMAGAAAAAAAAAAAA="); - case "rain": + case RAIN: return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf//AA///AB///gH///4H///4P///8P///8P///8P///4H///4B///gAAAAAAAAAABgBgABgBgABhhhgABgBgABgBgAAAAAAAAAAAAAAAAAAAAA="); - case "storm": + case STORM: return atob("Hh4BAAAAAAAAAAAAAAAAAHwAAAf8AAA/+AAH/+AAf//AAf//AA///AB///gH///4H/x/4P/g/8P/k/8P/E/8P/M/4H+MP4B+cHgAAfgAAA/gABg/AABgHAABgGBgAAGBgAAEBgAAEAAAAAAAAAAAAAAAAAA="); - case "err": + case ERR: default: return atob("Hh4BAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAf+AAA//AAB//gAf//gB///wB/z/wD/z/wD/z/wP/z/8f/z/+f/z/+//z//////////////z//f/z/+f///+P///8D///wAAAAAAAAAAAAAAAAAAAAAAAAAA="); } @@ -53,20 +60,20 @@ sent from gadget bridge. */ function chooseIcon(condition) { condition = condition.toLowerCase(); - if (condition.includes("thunderstorm")) return weatherIcon("storm"); + if (condition.includes("thunderstorm")) return weatherIcon(STORM); if (condition.includes("freezing")||condition.includes("snow")|| condition.includes("sleet")) { - return weatherIcon("snow"); + return weatherIcon(SNOW); } if (condition.includes("drizzle")|| condition.includes("shower")) { - return weatherIcon("rain"); + return weatherIcon(RAIN); } - if (condition.includes("rain")) return weatherIcon("rain"); - if (condition.includes("clear")) return weatherIcon("sun"); - if (condition.includes("few clouds")) return weatherIcon("partSun"); - if (condition.includes("scattered clouds")) return weatherIcon("cloud"); - if (condition.includes("clouds")) return weatherIcon("cloud"); + if (condition.includes("rain")) return weatherIcon(RAIN); + if (condition.includes("clear")) return weatherIcon(SUN); + if (condition.includes("few clouds")) return weatherIcon(PART_SUN); + if (condition.includes("scattered clouds")) return weatherIcon(CLOUD); + if (condition.includes("clouds")) return weatherIcon(CLOUD); if (condition.includes("mist") || condition.includes("smoke") || condition.includes("haze") || @@ -76,9 +83,9 @@ function chooseIcon(condition) { condition.includes("ash") || condition.includes("squalls") || condition.includes("tornado")) { - return weatherIcon("cloud"); + return weatherIcon(CLOUD); } - return weatherIcon("cloud"); + return weatherIcon(CLOUD); } /* @@ -88,18 +95,18 @@ function chooseIcon(condition) { function chooseIconByCode(code) { const codeGroup = Math.round(code / 100); switch (codeGroup) { - case 2: return weatherIcon("storm"); - case 3: return weatherIcon("rain"); - case 5: return weatherIcon("rain"); - case 6: return weatherIcon("snow"); - case 7: return weatherIcon("cloud"); + case 2: return weatherIcon(STORM); + case 3: return weatherIcon(RAIN); + case 5: return weatherIcon(RAIN); + case 6: return weatherIcon(SNOW); + case 7: return weatherIcon(CLOUD); case 8: switch (code) { - case 800: return weatherIcon("sun"); - case 801: return weatherIcon("partSun"); - default: return weatherIcon("cloud"); + case 800: return weatherIcon(SUN); + case 801: return weatherIcon(PART_SUN); + default: return weatherIcon(CLOUD); } - default: return weatherIcon("cloud"); + default: return weatherIcon(CLOUD); } } @@ -157,7 +164,7 @@ function draw() { } else{ temp = ""; - wIcon = weatherIcon("err"); + wIcon = weatherIcon(ERR); } g.reset(); g.clearRect(22,35,153,75); From f37009139907128aded985754b37a283dcc28a81 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:48:01 +0200 Subject: [PATCH 20/28] dinoClock: better temp alignment code --- apps/dinoClock/app.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 6d74b48cd..2a976b12b 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -137,6 +137,11 @@ function drawBg() { g.drawImage(bgImg, 0, 101); } +function square(x,y,w,e) { + g.setColor("#000").fillRect(x,y,x+w,y+w); + g.setColor("#fff").fillRect(x+e,y+e,x+w-e,y+w-e); +} + function draw() { var d = new Date(); var h = d.getHours(), m = d.getMinutes(); @@ -184,14 +189,22 @@ function draw() { g.drawImage(wIcon, 126, 81); - g.clearRect(126, 114, 126+5*4*4, 114+4*5); + g.clearRect(108, 114, 176, 114+4*5); if (temp != "") { - var x = 126; + var tempWidth; + const mid=126+15; + if (temp[1][0]=="-") { + // do not account for - when aligning + const minusWidth=3*4; + tempWidth = minusWidth+(temp[1].length-1)*4*4; + x = mid-Math.round((tempWidth-minusWidth)/2)-minusWidth; + } else { + tempWidth = temp[1].length*4*4; + x = mid-Math.round(tempWidth/2); + } g.setFont("4x5NumPretty",4); - g.drawString(temp[1], 126, 114); - x += temp[1].length*4*4; - g.fillRect(x, 114, x+6, 114+6); - g.setColor("#fff").fillRect(x+2, 114+2, x+6-2, 114+6-2); + g.drawString(temp[1], x, 114); + square(x+tempWidth,114,6,2); } // queue draw in one minute From 6a0cecaa6126a49b5c1a00e5eeaf1ff1a0d6ae50 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:48:20 +0200 Subject: [PATCH 21/28] dinoClock: improve formatting --- apps/dinoClock/app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 2a976b12b..24a82662f 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -166,8 +166,7 @@ function draw() { } else { wIcon = chooseIcon(currentWeather.txt); } - } - else{ + }else{ temp = ""; wIcon = weatherIcon(ERR); } From a0ba0c40d7ea7f307a47d741884d9ee4be98a9d2 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:50:36 +0200 Subject: [PATCH 22/28] dinoClock: formatting, match espruino style --- apps/dinoClock/app.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/dinoClock/app.js b/apps/dinoClock/app.js index 24a82662f..82192d234 100644 --- a/apps/dinoClock/app.js +++ b/apps/dinoClock/app.js @@ -7,14 +7,14 @@ const locale = require("locale"); // add modifiied 4x5 numeric font (function(graphics) { graphics.prototype.setFont4x5NumPretty = function() { - this.setFontCustom(atob("IQAQDJgH4/An4QXr0Fa/BwnwdrcH63BCHwfr8Ha/"), 45, atob("AwIEBAQEBAQEBAQEBA=="), 5); + this.setFontCustom(atob("IQAQDJgH4/An4QXr0Fa/BwnwdrcH63BCHwfr8Ha/"),45,atob("AwIEBAQEBAQEBAQEBA=="),5); }; })(Graphics); // add font for days of the week (function(graphics) { graphics.prototype.setFontDoW = function() { - this.setFontCustom(atob("///////ADgB//////+AHAD//////gAAAH//////4D8B+A///////4AcAOAH//////4AcAOAAAAAB//////wA4AcAP//////wAAAAAAAA//////4AcAP//////wA4Af//////gAAAH//////5z85+c/OfnOAA4AcAOAH//////4AcAOAAAAAB//////wcAOAHB//////wAAAAAAAA///////ODnBzg5wc4AAAAD//////84OcH//8/+fAAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////84OcH//////AAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////gBwA///////AAAAAAAAAAAAA"), 48, 24, 13); + this.setFontCustom(atob("///////ADgB//////+AHAD//////gAAAH//////4D8B+A///////4AcAOAH//////4AcAOAAAAAB//////wA4AcAP//////wAAAAAAAA//////4AcAP//////wA4Af//////gAAAH//////5z85+c/OfnOAA4AcAOAH//////4AcAOAAAAAB//////wcAOAHB//////wAAAAAAAA///////ODnBzg5wc4AAAAD//////84OcH//8/+fAAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////84OcH//////AAAAAAAAAAAAA/z/5/8/OfnPz/5/8/wAAAD//////gBwA///////AAAAAAAAAAAAA"),48,24,13); }; })(Graphics); @@ -127,14 +127,14 @@ function queueDraw() { drawTimeout = setTimeout(function() { drawTimeout = undefined; draw(); - }, 60000 - (Date.now() % 60000)); + },60000-(Date.now()%60000)); } // only draw the first time function drawBg() { var bgImg = require("heatshrink").decompress(atob("2E7wINKn///+AEaIVUgIUB//wCs/5CtRXrCvMD8AVTg4LFCv4VZ/iSLCrwWMCrMOAQMPCp7cBCojjFCo/xFgIVQgeHCopABCpcH44Vuh/AQQX/wAV7+F/Cq/nCsw/CCqyvRCvgODCqfAgEDCp4QCSIIVQgIOBDQgGDABX/NgIECCp8HCrM/CgP4CqKaCCqSfCCqq1BCqBuB54VqgYVG/gCECp0BwgCDCp8HgYCDCo/wCo0MgHAjACBj7rDABS1Bv4lBv4rPAAsPCo3+gbbPJAIVFiAXMFZ2AUQsAuAQHiOAgJeEA")); g.reset(); - g.drawImage(bgImg, 0, 101); + g.drawImage(bgImg,0,101); } function square(x,y,w,e) { @@ -151,7 +151,7 @@ function draw() { var day = d.getDate(), mon = d.getMonth(), dow = d.getDay(); day = ("0"+day).substr(-2); mon = ("0"+(mon+1)).substr(-2); - dow = ((dow+6) % 7).toString(); + dow = ((dow+6)%7).toString(); date = day+"."+mon; var weatherJson = getWeather(); @@ -160,7 +160,7 @@ function draw() { if(weatherJson && weatherJson.weather){ var currentWeather = weatherJson.weather; temp = locale.temp(currentWeather.temp-273.15).match(/^(\D*\d*)(.*)$/); - const code = currentWeather.code || -1; + const code = currentWeather.code||-1; if (code > 0) { wIcon = chooseIconByCode(code); } else { @@ -173,22 +173,22 @@ function draw() { g.reset(); g.clearRect(22,35,153,75); g.setFont("4x5NumPretty",8); - g.fillRect(84, 42, 92, 49); - g.fillRect(84, 60, 92, 67); - g.drawString(h, 22, 35); - g.drawString(m, 98, 35); + g.fillRect(84,42,92,49); + g.fillRect(84,60,92,67); + g.drawString(h,22,35); + g.drawString(m,98,35); - g.clearRect(22, 95, 22+4*2*4+2*4, 95+2*5); + g.clearRect(22,95,22+4*2*4+2*4,95+2*5); g.setFont("4x5NumPretty",2); - g.drawString(date, 22, 95); + g.drawString(date,22,95); - g.clearRect(22, 79, 22+24, 79+13); + g.clearRect(22,79,22+24,79+13); g.setFont("DoW"); - g.drawString(dow, 22, 79); + g.drawString(dow,22,79); - g.drawImage(wIcon, 126, 81); + g.drawImage(wIcon,126,81); - g.clearRect(108, 114, 176, 114+4*5); + g.clearRect(108,114,176,114+4*5); if (temp != "") { var tempWidth; const mid=126+15; @@ -202,7 +202,7 @@ function draw() { x = mid-Math.round(tempWidth/2); } g.setFont("4x5NumPretty",4); - g.drawString(temp[1], x, 114); + g.drawString(temp[1],x,114); square(x+tempWidth,114,6,2); } From ea06c58b6edbc45a169cf90556e35ff2af356f9a Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:51:39 +0200 Subject: [PATCH 23/28] dinoClock: add changelog --- apps/dinoClock/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/dinoClock/ChangeLog diff --git a/apps/dinoClock/ChangeLog b/apps/dinoClock/ChangeLog new file mode 100644 index 000000000..ec66c5568 --- /dev/null +++ b/apps/dinoClock/ChangeLog @@ -0,0 +1 @@ +0.01: Initial version From 5d48a738e5d31cf42dccb1e36a930b6d008e510a Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 21:57:05 +0200 Subject: [PATCH 24/28] dinoClock: update icons to match weather icons --- apps/dinoClock/app.png | Bin 8824 -> 8607 bytes apps/dinoClock/icon.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dinoClock/app.png b/apps/dinoClock/app.png index 53f5af659f3a8734d80cc815990f0d48ae876ffc..c05276ee30a324adbd5bdb7efe4c11174159d378 100644 GIT binary patch delta 4902 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 IM6N<$g2+2_$N&HU diff --git a/apps/dinoClock/icon.js b/apps/dinoClock/icon.js index 36f1bc8a6..9a9b74c82 100644 --- a/apps/dinoClock/icon.js +++ b/apps/dinoClock/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgP/ABXACYcDAuFh/E/hgFC/O/AoPB8EZwc8AoUYgYFB4FgjAXDAowXBAo/B/ARBn4FGIIvBmAFE2AEBhwFEiIXEkGD4PvC4ntgfwoARCgRmBAoUD/ARCwAFBu9jAoWAiND4Ohg+Au8D4uhh+AogFC3/ABYf/wAjB4/hAofDwH/IIeAvwFEmkAhEj77nC8ePI4M2aLQiCABAA=")) +require("heatshrink").decompress(atob("mEwgP/AH4ABz0H4HzAoUGoAFB/0f8184YFC8/8AoP/z/nC4YFGC4IFH/0HCIPAAowAF/3PAolPAYPxAongConAv/+iAFEiX8h+Av4JB/pmBCoX8g4pCv4FBxGfAoV/92//1e/F/xH//Ve+F/3YFCoE/BYcAFoX4jwFDEIMALId/wIFE5f/+/f8D2CjlzBoPJbkw=")) From 95cf3cd8e01799d5abf238a965d997e0991f2def Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 22:00:58 +0200 Subject: [PATCH 25/28] dinoClock: invert icon for launcher --- apps/dinoClock/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dinoClock/icon.js b/apps/dinoClock/icon.js index 9a9b74c82..2410dad14 100644 --- a/apps/dinoClock/icon.js +++ b/apps/dinoClock/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgP/AH4ABz0H4HzAoUGoAFB/0f8184YFC8/8AoP/z/nC4YFGC4IFH/0HCIPAAowAF/3PAolPAYPxAongConAv/+iAFEiX8h+Av4JB/pmBCoX8g4pCv4FBxGfAoV/92//1e/F/xH//Ve+F/3YFCoE/BYcAFoX4jwFDEIMALId/wIFE5f/+/f8D2CjlzBoPJbkw=")) +require("heatshrink").decompress(atob("mEwgJC/AAVh/E/hgFC/O/AoMB8EZwc8AoUYgYFBgFgjAXDAowXBAo8B/ARBn4FGAAsBmAFE2ADBhwFEj4VEn+AgPvAontgfwv+ABIMCMwIVCgf4FIWAAoN3sAFCwERoEB0MHwF3gEF0MPwFEAoW/4ALD/4tCg/hAoYhB/5ZDwF+Aok0gEIkEf/4AB8eMBoM2bkw=")) From b911c4e92c05b32e5131d95d0b2135bc964f0eef Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Fri, 20 May 2022 09:08:21 +0200 Subject: [PATCH 26/28] dinoClock: remove changelog --- apps/dinoClock/ChangeLog | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/dinoClock/ChangeLog diff --git a/apps/dinoClock/ChangeLog b/apps/dinoClock/ChangeLog deleted file mode 100644 index ec66c5568..000000000 --- a/apps/dinoClock/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -0.01: Initial version From 6ec0460bb7b76468fe29ec21c75abc0e434513e0 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Fri, 20 May 2022 09:17:50 +0200 Subject: [PATCH 27/28] dinoClock: readme add --- apps/dinoClock/README.md | 17 +++++++++++++++++ apps/dinoClock/screens/screen1.png | Bin 0 -> 2408 bytes 2 files changed, 17 insertions(+) create mode 100644 apps/dinoClock/README.md create mode 100644 apps/dinoClock/screens/screen1.png diff --git a/apps/dinoClock/README.md b/apps/dinoClock/README.md new file mode 100644 index 000000000..7568731d9 --- /dev/null +++ b/apps/dinoClock/README.md @@ -0,0 +1,17 @@ +# dinoClock + +Watchface with T-Rex Dinosaur from Chrome. +It displays current temperature and weather. + +**Warning**: Element position and styles can change in the future. + +Based on the [Weather Clock](https://github.com/espruino/BangleApps/tree/master/apps/weatherClock). + +# Requirements + +**This clock requires Gadgetbridge and the weather app in order to get weather data!** + +See the [Bangle.js Gadgetbridge documentation](https://www.espruino.com/Gadgetbridge) for instructions on setting up Gadgetbridge and weather. + +![Screenshot](screens/screen1.png) + diff --git a/apps/dinoClock/screens/screen1.png b/apps/dinoClock/screens/screen1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4386449c99338de3e523b73125e9776f4cb4d9 GIT binary patch literal 2408 zcmdT``#;nF7k|xSrEQ;la!a|TQuK+E%g6n`l!zEUm?=swnb6ke@}4B$B&AdeT_$9< zNp9aU-sRTS<-;}!DRSG|rXoI{@ZIy^L(6hemT!`&f{_Zb;JvYQPxrh z0AM^0xcbU{^?!A(lH76{CJ1teNc6=y19tb8835L8^>B6aqY%Cne>qcRigs&~uJ+Ev z?kK&{5h7|^+cwjRy}A1XZ8y5fgAgW{^u>z`*NtQfV;;o}al9hX+)#!GP~th3Tw`fnU!(9;Hs_(Zx#K=YY9cYHbTX4d7o{vh((pp1KjWwvP%ZjFdV( z{x_Q+Zf2e=6m(rJAOlx^G|Rt7H}r!AfrXoSFzd7A-^|rv|6C8n*#lX}cZIPC7ixEY$?4Ls)HCc`?5{SFS}h-61AKd)+?-Wu1r{E1bx|<*$%2L`Nn@Cu2d`G#_n(U z)rlrihl;r8UBAVTtBv(h{Z^)_59jM9QN(gH2Ktm%#}7LB5rPOL)a=Ap-#1%Cw;`+h z3w^SB>2X=0`Y`9Cwj%ToG65~O2_R*!%QS4^0tU-8v=@(2N7RYs-L2uXyyt3K<}N_ zlcOrF8qTcGmDI;velox-o3oAes!q}1hRKk;fO&k6G;}ktDLCpF*pEm0*|qv}J_w7$ z-g*6uV5^r>)0p~vc}+ZjJ;b}T+#V_YI~uB-`Z4rO<@w_+;C<$6K@K*yfAx4$y*^*N znwrMZP9m0{0kIqR1j}g|thaS%K;HCl?ZE)7&rae|0L4-F{&h@Qz60n7Tka~f0latJ z>jy35qPU>TX_pkhPu22xt`}%|{KPv*unXw&kRiJI3s=+_qq_DTW8&mJX`vk&p!@9N z2qIW^k6okF)R0VPxOTb20(>k|~4rFB?T z;PQ@dyCMIsZj1UK`ew&RjjV1CskIl(BS=c&QZE^Gd*ol9i57Y(g;Vg6`4S&qWK?m2 z@s$k*58}RL^_g;n5yi&8ibj^(Y^pUH1%<-9J;uF0!y}*@m>OK{V1|R>OShA&X8$q( z4QJhQ>g_mNpLPb$TE}i>thl@5=>gq|mJqF0f@n1K7HC?N9ABzv;|t7ckj#I#h6OL% zR^f$ne`jT4hmXHs(F6-Ix70jP*q!TO#9Y2J!b)#qBLe%ve48qStWh92HkbB>18E_x z;Cy=iSr>=Y7(T@k!yup$ixp-gFM%~lwUuHEQ2UG2h%qDY%gpwT4vhg#=#c_w&VRve zE9G85Ru%7L44{{*lJgX-#)ZCpbfjO9Q=oSN;$cHl%n0yAtq@ti5*1g}Nii&=H0gMh z6gQAW{5<(AImYm*XXJ&>{NP-F;685l!52||1_`YOT3#OlV0c}D|Dw)K+}ROk$u*X> z5kyOpXdfM=3v=p}>l$8&Q{Ml+6`ZW%2nQJn0`mxm_Q}hVvTYkJ~?tqATE<1SU++5sbvrpadv@w z6{ob|P39+)c8ZK2UgpvgBdR!LcKPKdH2iLopfVvgw^#g=k<0~YhHutHWIidJkEHKA zRvc9K_D&auq~6Z(Z#6 z5=6|ahxUN(i%$&=!0OM>9^2J{@r7vlL4rnp5Ho%E^zM*9$Q4yKUi%#Yl9Xt&oAhPb zGeimAv?M3S0T9S;$*8YTQK2qm34Umu5gNEMjq8VMBby_|3%t}s1J>#vsnU&0K~pA^ zkA3cwH`464)J)s+?Ra)1@Z6oRCj5V*)%~} zCWeos^Atdc6rr|86^ucYOo1_g=XH)aIU)cy8yEFIPtsfU=W=Pt{+HhJ*9myIdAYKk Hi5dR^^S5d9 literal 0 HcmV?d00001 From 746a72ef6f0f795d5a04240d4eac86c2da08e4a8 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Fri, 20 May 2022 09:24:28 +0200 Subject: [PATCH 28/28] dinoClock: metadata add screenshots & misc --- apps/dinoClock/metadata.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/dinoClock/metadata.json b/apps/dinoClock/metadata.json index a1b1288bd..a61ce122b 100644 --- a/apps/dinoClock/metadata.json +++ b/apps/dinoClock/metadata.json @@ -2,11 +2,14 @@ "id": "dinoClock", "name": "Dino Clock", "description": "Clock with dino from Chrome", + "screenshots": [{"url":"screens/screen1.png"}], "icon": "app.png", "version": "0.01", "type": "clock", - "tags": "clock, weather", + "tags": "clock, weather, dino, trex, chrome", "supports": ["BANGLEJS2"], + "allow_emulator": true, + "readme": "README.md", "storage": [ {"name":"dinoClock.app.js","url":"app.js"}, {"name":"dinoClock.img","url":"icon.js","evaluate":true}