From 421302eac51d83f2c7c39394848f2e7c869b4da5 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 1 Nov 2023 01:59:56 -0400 Subject: [PATCH] added approxclock --- apps/approxclock/app-icon.js | 1 + apps/approxclock/app.js | 125 ++++++++++++++++++++++++++++++++ apps/approxclock/app.png | Bin 0 -> 2033 bytes apps/approxclock/metadata.json | 16 ++++ apps/approxclock/screenshot.png | Bin 0 -> 1968 bytes 5 files changed, 142 insertions(+) create mode 100644 apps/approxclock/app-icon.js create mode 100644 apps/approxclock/app.js create mode 100644 apps/approxclock/app.png create mode 100644 apps/approxclock/metadata.json create mode 100644 apps/approxclock/screenshot.png diff --git a/apps/approxclock/app-icon.js b/apps/approxclock/app-icon.js new file mode 100644 index 000000000..d63ad4b1f --- /dev/null +++ b/apps/approxclock/app-icon.js @@ -0,0 +1 @@ +atob("MDAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArgVYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABW19cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsrNcrAACBVoGsVgAAgVaBrFYAAKzXK4GsKwAAgayBAAAAgVYAVoEAAAAAAAAAAADXVqyBAACs14Gs1ysArNeBrNcrAIHX14HXgQCB14HXrAAAVtdW11YAAAAAAAAAAFbXK4GsAACs1wAr11YArNcAK9dWAADXrABWVgDXgQCB1wAAAKzXgQAAAAAAAAAAAKzXrNfXKwCs1wAA14EArKwAK9dWAADXVgAAAADXgQBW1ysAAIHXVgAAAAAAAAAAANfXgYHXVgCs11aB11YArNcrgddWACvXgSsAAACsrCus1wAAK9es1ysAAAAAAAAAK9dWAACsrACsrKzXrAAArKzX16wAVtfX16wAAAAr19fXKwAArKwArKwAAAAAAAAAAAAAAAAAAACsrAArAAAArIEAKwAAAAAAAAAAAAAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsrAAAAAAArIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWVgAAAAAAVlYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArVoErAAAAAAAAAAAAAAAAAAAAAAArVgAAAAAAAAAAAAAAAAAAAAAAAAArrNfXgQCBrNdWAAAAAAAAAAAAAAAAAAAAAABW1wAAAAAAAAAAAAAAAAAAAAAAACvXrCtWgQAAANdWAAAAAAArKwAAAAAAACsAAABW1wAAAAAAAAAAAAAAAAAAAAAAAFbXKwAAAAAAANdWAAAAAIHX16wAAACB19fXVgBW1wAA14EAAAAAAAAAAAAAAAAAAIGsAAAAAAAAANdWAAAAK9eBVteBACvXgSuBVgBW1wBW1ysAAAAAAAAAAAAAAAAAAIHXAAAAAAAAANdWAAAAVtcrAKyBAFbXKwAAAABW16zX1wAAAAAAAAAAAAAAAAAAAFbXVgAAAAAAANeBAAAAVtcrANeBAFbXKwAAAABW14HXrAAAAAAAAAAAAAAAAAAAAACs14GBrAAAAKzXrIEAK9esrNdWACvX14GBVgBW1wAr11YAAAAAAAAAAAAAAAAAAAAAVoGBgQAAACusrIEAACusrFYAAAArgaysVgBWgQAAgYEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") \ No newline at end of file diff --git a/apps/approxclock/app.js b/apps/approxclock/app.js new file mode 100644 index 000000000..c172891bf --- /dev/null +++ b/apps/approxclock/app.js @@ -0,0 +1,125 @@ +//load fonts +require("FontSinclair").add(Graphics); +require("FontTeletext5x9Ascii").add(Graphics); + +//const + +const numbers = { + "0": "Twelve", + "1": "One", + "2": "Two", + "3": "Three", + "4": "Four", + "5": "Five", + "6": "Six", + "7": "Seven", + "8": "Eight", + "9": "Nine", + "10": "Ten", + "11": "Eleven", + "12": "Twelve", + "13": "One", + "14": "Two", + "15": "Three", + "16": "Four", + "17": "Five", + "18": "Six", + "19": "Seven", + "20": "Eight", + "21": "Nine", + "22": "Ten", + "23": "Eleven", + "24": "Twelve", +}; + +const width = g.getWidth(); +const height = g.getHeight(); +let idTimeout = null; + +const getMinuteString = (minutes) => { + if (minutes >= 10 && minutes < 20){ + return "Fifteen"; + } + else if (minutes >= 20 && minutes < 40) { + return "Thirty"; + } + else if (minutes >= 40 && minutes < 50){ + return "Fourty-Five"; + } + else { + return "O'Clock"; + } +}; + +const getNearestHour = (hours, minutes) => { + if (minutes > 49){ + return hours + 1; + } + return hours; +}; + +const getApproximatePrefix = () => { + var date = Date(); + var minutes = date.getMinutes(); + + if(minutes === 0 || minutes === 15 || minutes === 30 || minutes === 45){ + return " exactly"; + } + else{ + return " about"; + } +}; + +const drawTime = () => { + //Grab time vars + var date = Date(); + var hour = date.getHours(); + var minutes = date.getMinutes(); + + //reset graphics + g.clear(); + g.reset(); + + g.setColor(0,0,0); + g.fillRect(0, 0, width, height); + g.setFont("Vector", 24); + g.setColor(1,1,1); + g.drawString("It's about", (width - g.stringWidth("It's" + getApproximatePrefix()))/2, height * 0.2, false); + g.setFont("Vector", 24); + g.drawString(numbers[getNearestHour(hour, minutes)], (width - g.stringWidth(numbers[getNearestHour(hour, minutes)]))/2, height * 0.4, false); + g.setFont("Vector", 24); + g.drawString(getMinuteString(minutes), (width - g.stringWidth(getMinuteString(minutes)))/2, height * 0.6, false); + let d = Date(); + let t = d.getSeconds()*1000 + d.getMilliseconds(); + idTimeout = setTimeout(drawTime, 60000 - t); +}; + +g.clear(); +drawTime(); + +Bangle.on('lcdPower', function(on){ + if (on) { + drawTime(); + } else { + if(idTimeout) { + clearTimeout(idTimeout); + } + } +}); + +//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); +// g.clear(); +// draw(); // draw immediately +// } +//}); + +// Show launcher when button pressed +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/approxclock/app.png b/apps/approxclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..a5fd8db831ba915b2b86e27c9a89f9dee144a12a GIT binary patch literal 2033 zcmVEzLt>Nxhg23=knh3@O#hiaPGNa4ds-)-ZKyRLP-k;1D@5`n#b{u z6AN}GnTRX8x)fQA(lve_rB>p>Z}#e5*D;*Ql&*lKS9n%YwUV$*Lujj{n!G1GsAS_w z;S*t>CIbrJntGzaZzg9N{AIEh4KIMz?CHt0aiWcttdZ#!i6cW+ygpIO(lsSHEqY3x92Il# z|M#h-Ga8ph`+IQF4dHH_a=!>FBs?FFt2Eq_t=H1{ofwWWEF!My{QH!Ur3 z09U&(^sL6UcwMr|v8L1TaRL1?7`TVN^~SE6_nbdLbX$JW9ULCPnAE#B{s1=tXd@SA z#3ld$010qNS#tmY4`BcR4`BhQKc{H`00t>ZL_t(&1?^W`NLE`A9?i0gMyBK~BfH^4 zq7PCp32ODwMeL%zln+KAh6UOM!5$8Q4+$Am4`o4wbfN4D+0DulQM){p4~3cdP?8m< z-OS47%r~61&;IxS|DKM&D8j#B?>(0_v)0V4*=r_%h*+L6I|9e-&i~oC-+9p${}J-hfj*1-BjB?OeN^C&fR7IJS=?g;=FXimC;tzse@M~&nC^k0M;vYSFl%70!LRD2&6crVv z^oWQEx^(Fhi8B@7wQCn$xNw1>&pBK?ESu&ZKYs9*EnB#)t&J-xDlGnu8#gpE7cX99 zSy166OO_~K3|3r@9=Ei#D4dj(#8anEWzaBsdwcoBi4*+u=TA%T`Sa)b`}gmB^5jYW z^yw4V*VkL?$) z6E7N$_ua1rmh2On?pFNc$B+7jPQbr^|E5Qe z9?|mU%jxms$GWagaJ($5V4)dDjvQe*bBb=;woT`l2&`SZmiO)3r@W0DH!9B@q1CHb z^PxkBl$V*A$?zs<7_xC*uwa3;p6r94J$uGtIImc-f}cKp%Hkl640tIiDSDi*UAv}{ zN={C8k;NR?ViC=;*tBVrMT64o*RLxM10;F*&6_v6AxTc2IB}x#V8H$R_xZzz56VO6 z$B!S+Yu2n$+`OQ}z9x>FL{r(w0T>JZv}x10y}h09-o2{^VXfBIR?R89yukk&5EK-| zNaAth##xKVF<=R);#j<{u8t>9p3KM*oKYhW11?{_tn#yG&$iAhbRvwr%2 ztUewEgeZR@dinCD3){ID`7;t8=Wt76=L9>B|FC$#PO{+Br%#hyd=@@ZK!7ZSkc`>k z@g^Qi*7yw=?Pz(i>}zFJ4UP>FHEn zUaq(BpGv#@S4GGLU%GUuULd$>(_b#m6VjY$T)TUDK2G<>T~|< z2a_K(2V!Dk=<3z0TC1QG-mqZ~z&9rFI zBHF%vy9%PRloDK37zwS#CJZE zjS5N>Ncss9kCUOn7z}h;l0$Uo&K zLHAto*w;1M@Q?|(+e#qMpsvt$NX{1cs*mN03~U)t&{$g zrJv=SH*dPk2VaUiMm2iw+&Se*a_jj;H+S#eJw59=IXTLc9|KDR!(s@d6NAq6>(?vK zo&%c;^X5r!iY2;H1g=sq)#TP{b|OG8H6ZG8E>uU1pLLE z(<38|51Payy_un`=Qm&|UK>sse*}ipn?up%kHAp8Hk>m42n?q;hob9m2i#}3?cdnh P00000NkvXXu0mjfZ+GlH literal 0 HcmV?d00001 diff --git a/apps/approxclock/metadata.json b/apps/approxclock/metadata.json new file mode 100644 index 000000000..e639a2215 --- /dev/null +++ b/apps/approxclock/metadata.json @@ -0,0 +1,16 @@ +{ "id": "approxclock", + "name": "Approximate Clock", + "shortName" : "Approx Clock", + "icon": "app.png", + "description": "A really basic spelled out time display for people looking for the vague time at a glance.", + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"approxclock.app.js","url":"app.js"}, + {"name":"approxclock.img","url":"app-icon.js","evaluate":true} + ], + "screenshots": [ + {"url": "screenshot.png"} + ] +} \ No newline at end of file diff --git a/apps/approxclock/screenshot.png b/apps/approxclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fe13bbe3303c491f9edaaebc9df1c28103da8e3f GIT binary patch literal 1968 zcmd6o`#02i7{@=~`5H5kOSOqK!>%q{k!dwa%@8re){=^Blk2vsQBjj=810OXA}zzI zr8;6agqTsAL1BDLn@OTchLrJD2~BfxnHiU2?VqrFPUq|o&-4E2{XXY8=Xsyk`JMiB zGn1tz001*TU+-OWdh4IT8_(^^ns;Gy014D+&%a?u|X2{3FViBe!GnVn)p>Pa3t8hfvk;-2q0p3!qNgE z*{cB9-kiz-=b*zl5VG0*AxxV8h}yH_+LE zix|zP#mb~}ygj+`EE*F+v%Lu{VR(=WASVA6_`qNpld-U6Xd*O~?0n*!KTdyxOKQV( zPy1+mzdxF>Fhv%gAtUcoGVamjS0F=*v?SCk%5=TSEnJ!lDvWQHTRkw953!NDw$i~4 zJbB%vg=jzk?Y`Kais@ft&6Pta;>6KeJ(xPNIBO>Mkj3(Vd>DaDM4)>Nd#K3P!{!n3 zD4^J&f!k^<1$y4VJkPB&m5cBi_dB?X^7ou-TA-lKnm0|XHBeZtO&w(6PbE@u{VIa+ zcs2{oSry(djele~HdirW)Am~D;{5;st?)UAg@+w%6E~b^aZdTkeVtja$)~Oy>!GVsr9=}-Ce37~&pe20fPq5z`kL=q4lR(S@MkyBc z+5gy|Z%#982_QV)@0KgHIK?jNGn@&zZP4 zjiR}#B3mlxt|{X*_ErigFw)8x1Yv_lDoNyHAD00Ng!XKFGc>>j6ipZu0rKe`W_vNH zAK*$jzfD$4(r%yC_RRxH-yya|vQv{75|}2`0yOxPIw6@ncz+g0!{y`S%w8xQNXovo zEb~^kIPrGIDx=_-*lV5oynb2@F{gU5M+sbcnR)#x*c8~kHpc{6d*f>9O5p#MKD`*D zO)pz{a~^-u*@mbxP#<;kJQIU@M^=Wc0sqyK198UBwe^5jt)uI>@1MYw z(T|s1Q3bia%V5;$@?NduZlDiJF-JUumIf+s1tWzqAzgxViwQi#RA2-3?Fy)x$gXnl z%NUjL`a8PiyB|$omfC*H#aw8G&@{%9Or6?Cczgk0STi(!a^j8?jNT!rYbDs96CM|i z2>FFERV}r)zt?qX(p)J%$4q7L-VM@xGP8}_)!Url@71Cb7*y`Enx<60dxy_#Kom%W zeS-c`c3wq%16S8hc3{;rmRAb0dn%WjB8y9$wDtWQ=w@hp&u;EqUwm7%$A~}+1HHsU zXnf$Lz(e_dT=DRr07h+ro*k{p&a3GV89NhdWyEN#3R^C2)?q$Uu~&k+UWSrSoE|p+ zbQ&kAS(wSYe*fBOll65l7tAbsJJLEjzPiBKBF^GhDvO!yUIyn*1t*7?qfU6|2*q)$ zB>J_Pq4|b2e5&#zc|6a}qxe;DK-flNzT-1EcQ3C