From ebb020ca9f643bfe32f95593a7c825e4778b1fc7 Mon Sep 17 00:00:00 2001 From: Filipe Fradique Date: Fri, 15 Oct 2021 23:57:29 +0100 Subject: [PATCH] Created Nifty Clock A --- apps.json | 13 +++++ apps/ffcniftya/ChangeLog | 1 + apps/ffcniftya/app-icon.js | 1 + apps/ffcniftya/app.js | 95 +++++++++++++++++++++++++++++++++++++ apps/ffcniftya/app.png | Bin 0 -> 2188 bytes 5 files changed, 110 insertions(+) create mode 100644 apps/ffcniftya/ChangeLog create mode 100644 apps/ffcniftya/app-icon.js create mode 100644 apps/ffcniftya/app.js create mode 100644 apps/ffcniftya/app.png diff --git a/apps.json b/apps.json index 1e2612fce..0a4be55e2 100644 --- a/apps.json +++ b/apps.json @@ -3572,5 +3572,18 @@ "data": [ {"name":"score.json"} ] +}, +{ "id": "ffcniftya", + "name": "Nifty-A Clock", + "icon": "app.png", + "version":"0.01", + "description": "A nifty clock with time and date", + "tags":"clock,b2", + "type":"clock", + "allow_emulator":true, + "storage": [ + {"name":"ffcniftya.app.js","url":"app.js"}, + {"name":"ffcniftya.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/ffcniftya/ChangeLog b/apps/ffcniftya/ChangeLog new file mode 100644 index 000000000..18bc264a3 --- /dev/null +++ b/apps/ffcniftya/ChangeLog @@ -0,0 +1 @@ +0.01: New Clock Nifty A diff --git a/apps/ffcniftya/app-icon.js b/apps/ffcniftya/app-icon.js new file mode 100644 index 000000000..f0a2393b1 --- /dev/null +++ b/apps/ffcniftya/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkEIf4A5gX/+AGEn//mIWLgP/C4gGCAAMgC5UvC4sDC4YICkIhBgMQiEBE4Uxn4XDj//iEAn/yA4ICBgUikEikYXBBAIXEn/xJYURAYMygERkQHBiYLBKYIXF+AVDC4czgUSmIXBCQgED+ZeBR4YXBLYICDC5CPGC4IAIC40zmaPDC4MSLQQXK+ayCR4QXCiRoEC44ECh4bCC4MTiTDBC6ZHOC5B3NLYcvC4kBgL5BAAUikT+BfIIrB/8ykf/eYQXBkUTI4cBW4YQCgQGDmAXDkJfEC46GBAoJKCR4geCAAMRAAZRDAoIODO4UBPRIAJR5QXWgKNCTApNDC5Mv/6/DAwR3GAAyHCC4anJIo3/+bvEa4Uia4oXHkEvC4cvIgUf+YXKHYIvEAgcPC5QSGC5UBSwYXJLYQXFkUhgABBC5Ef/4mBl4XEmETmIXKgaXBmYCBC4cTkMxiQXJS4IACL4p3MgESCwJHFR5oxCiB3FkERC5cSToQXFmUyiAZFR48Bn7zCAQMjkfykQkBN4n/XgKPBAAQgCUQIfBUwYXHFgIGCdI4XDmYADmIIEkAWJAH4A4A==")) \ No newline at end of file diff --git a/apps/ffcniftya/app.js b/apps/ffcniftya/app.js new file mode 100644 index 000000000..0b8865bec --- /dev/null +++ b/apps/ffcniftya/app.js @@ -0,0 +1,95 @@ +const locale = require("locale"); +const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"]; + +/* Clock *********************************************/ +const scale = g.getWidth() / 176; + +const widget = 24; + +const viewport = { + width: g.getWidth(), + height: g.getHeight(), +} + +const center = { + x: viewport.width / 2, + y: Math.round(((viewport.height - widget) / 2) + widget), +} + +function d02(value) { + return ('0' + value).substr(-2); +} + +function draw() { + g.reset(); + g.clearRect(0, widget, viewport.width, viewport.height); + const now = new Date(); + + const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); + const minutes = d02(now.getMinutes()); + const day = d02(now.getDay()); + const month = d02(now.getMonth() + 1); + const year = now.getFullYear(); + + const month2 = locale.month(now, 3); + const day2 = locale.dow(now, 3); + + g.setFontAlign(1, 0).setFont("Vector", 90 * scale); + g.drawString(hour, center.x + 32 * scale, center.y - 31 * scale); + g.drawString(minutes, center.x + 32 * scale, center.y + 46 * scale); + + g.fillRect(center.x + 30 * scale, center.y - 72 * scale, center.x + 32 * scale, center.y + 74 * scale); + + g.setFontAlign(-1, 0).setFont("Vector", 16 * scale); + g.drawString(year, center.x + 40 * scale, center.y - 62 * scale); + g.drawString(month, center.x + 40 * scale, center.y - 44 * scale); + g.drawString(day, center.x + 40 * scale, center.y - 26 * scale); + g.drawString(month2, center.x + 40 * scale, center.y + 48 * scale); + g.drawString(day2, center.x + 40 * scale, center.y + 66 * scale); +} + + +/* Minute Ticker *************************************/ + +let tickTimer; + +function clearTickTimer() { + if (tickTimer) { + clearTimeout(tickTimer); + tickTimer = undefined; + } +} + +function queueNextTick() { + clearTickTimer(); + tickTimer = setTimeout(tick, 60000 - (Date.now() % 60000)); + // tickTimer = setTimeout(tick, 3000); +} + +function tick() { + draw(); + queueNextTick(); +} + +/* Init **********************************************/ + +// Clear the screen once, at startup +g.clear(); +// Start ticking +tick(); + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower', (on) => { + if (on) { + tick(); // Start ticking + } else { + clearTickTimer(); // stop ticking + } +}); + +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); \ No newline at end of file diff --git a/apps/ffcniftya/app.png b/apps/ffcniftya/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd8a49b7ba951670fb8c007055a64f6d29dfc98 GIT binary patch literal 2188 zcmV;72y^#|P)?hiUTNH2?4Z%C_80Yk+zhAr8q)Ct(B5m*P-K< z-4S(wt>O&pbbYMTu{_)o+B!O2s61R07z*;}3M7)4K*;;-#KXpzS5fKyvEwiQeD}M* z@7!O`ch5QBcfkw1z;l9R8_r-bNF)-3aDILsLg;*acXxLHfKIDhP%kWhF6az;eM7xW zE>kEJqZ6YH2E!2(!?1%N931{}cve0ul}o2)rkc(-@p!!DRFl3v{ipjs!T-Vl4d~z7 zV)dHUW8-7c9^Ni|dl{s7vOG`Jo-hyp;Nb%Zp+qKOGMRSy-`)JqOqR$b5}8D$RiR6z zN=d_MmgK6Bt2QQXM7EEQPf}7603bLdcvIpgGMSv3mda!@Jv=?uu3P&!W>exOG~B?@ zKzu@c)A=SRf?iqs3L?+SXXE1In2!)Z1YG&@3i6*hcgB*h(x?u6Z~)of-rh(5a8z_e zR9sSAeY~0z$SEi&`1JUv#U;hJ`fec(1pwgX?F9g+`BP2lzEZtj|9<)VPNuU;RE3PR zw6q)7Zy;N#RKB+5wOzTp$QW6nR9NzdhlgipXOSI11oYqO_hI{Jwc48FH8HDWW~4KN zLxU6J6LIlzj|E93(xN>@wI^zki%cdv5k#YzGNRRKZ(P5@<#L0Ag8={!A3p5t>^yts ztdl?hK*jzFI!@oYW9Qy|dp8Rx#ziP|x>+dTlEI>A$P7etQ!Rfe*iwlRt0RRLA2J!ejfn+kjAL7yUNPs&K!EzLp zx+V3{;X`h2Zg1tkRrPTdj^nnRXB0#wQ`^Pu(c#fTflw$Au6cP)T|*s&kV>YCj))vZ zjgOD(_4?QivD{#8Pj^pbROGS=A^}oXR+d_=Hhc2l%%4@5R#S9Tw3Dc?m0>Iv3#Z}X z5#jUm^R^tyQ%fN&9)EP4E(OxZ15qe?gB}22_b~_|AtB>qgsAsf63kw7Sp6vrBXQ(M5d5qV`FhT9vKz6Dtwh)j%kJhg93Nw?uGywj0ONe zWOSqf8fY|{=!i(8(U37R36Rbyv*(< z1R=cEe$8rd%YCT!bZu^4EX(ABjH7c|FI`^Z)=l|Jj+Dnd$52n=DL@ii~n~b+zS~mW;2TZ;CJl0%$ZE?MTKj z5+F6VG~fUCeXCm;+cP}eJs>ds#A5N-*qCj2Uw>ciiP}@Or_d#b!a z>xX65Szb|Yghum{aaa!kP+VL*H8W+k#7>?%$qD3GF`qVNiwF)0{`UH}mZLkVsSi~i za$h3!)~_>P`uqEv0}&o|9a5>?V7qW}aY2T= zhx^q1DYIXz)jDriOfO$~DU;5OPl$&Qj@=v6YPChhMYsEIpKm&E<~;SrC=xAJs4Xom zVXMNBO(Ky_*PmYDzQTE|Kp;5$;o%E^yKt`QT+N?r2!g;!80xFccCZW-2ykGP5P)~6>U_)I)Yg=pI?Y@e#iru-pU0q!}#2o^m;AbA`ybVIF zx4~er-Gp>d2O(^3ZMGy^t+LS2Q1lH0$8k5B8)|1Q`Ok8eiQC0IKJSyGpQsiVi$jf0 zQ}>s;iSdb_jU5~uR45dvuv9OYdW6Y|C%V;VJX}Y9965O4;L6aIn;(H6!q0yrpF}31 za>Y?pL16)o<4J;~#NQ-3;@C+!TK1-IEB0z?L9!r-6QtAY#2w<%k4=z`OVGE zA*V{ELNPdwpE_--w&oY+g~>v6bOeV4H=b+6-AsdsJH(bExLmHMrzf&I#2qoKWA60d ziHMA-I8gD~@z1DKDuqJf@p%Jx2Oh_4h})o0DC7z``ua4lnOE!83%UiVTq==Cb7j%g6wS>+dMrzgSbJ0WI_4<^6i=134-wQ z^78fbePSkUi+o#H7WsTWzxQ^pEk`bw=e?QdC|^s2DP=P=GXnzyMqos(rxhq<3I?$0 z>1nfjXlN)pGCDgudr$Em27>_s!~oXT)+Q2(WV5p86!Zcw@c#t>z<&U{^`%9!77N+{ O0000