From 3900d0a6ad3818d644fec5e2267e22788682dc5e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 21:37:31 +0200 Subject: [PATCH] Add new widget alarmeta This widget displays the time to the next Alarm or Timer in hours and minutes. --- apps/alarmeta/metadata.json | 15 ++++++++++++++ apps/alarmeta/screenshot.png | Bin 0 -> 3491 bytes apps/alarmeta/widget.js | 37 +++++++++++++++++++++++++++++++++++ apps/alarmeta/widget.png | Bin 0 -> 1011 bytes 4 files changed, 52 insertions(+) create mode 100644 apps/alarmeta/metadata.json create mode 100644 apps/alarmeta/screenshot.png create mode 100644 apps/alarmeta/widget.js create mode 100644 apps/alarmeta/widget.png diff --git a/apps/alarmeta/metadata.json b/apps/alarmeta/metadata.json new file mode 100644 index 000000000..0130a63ef --- /dev/null +++ b/apps/alarmeta/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "alarmeta", + "name": "Alarm & Timer ETA", + "shortName": "Alarm ETA", + "version": "0.01", + "description": "A widget that displays the time to the next Alarm or Timer in hours and minutes, maximum 24h", + "icon": "widget.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "screenshots" : [ { "url":"screenshot.png" } ], + "storage": [ + {"name":"alarmeta.wid.js","url":"widget.js"} + ] +} diff --git a/apps/alarmeta/screenshot.png b/apps/alarmeta/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..41a1095570813bd8d950a8a7d4da4d3eb7102fe9 GIT binary patch literal 3491 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 O09Qv(hqrd<)c*sBA&|ZR literal 0 HcmV?d00001 diff --git a/apps/alarmeta/widget.js b/apps/alarmeta/widget.js new file mode 100644 index 000000000..ff08dd6ef --- /dev/null +++ b/apps/alarmeta/widget.js @@ -0,0 +1,37 @@ +(() => { + const alarms = require("Storage").readJSON("sched.json",1) || []; + + function draw() { + const times = alarms.map(alarm => require("sched").getTimeToAlarm(alarm)).filter(a => a !== undefined); + const next = Math.min.apply(null, times); + if (next > 0 && next < 86400000) { + const hours = Math.floor((next % 86400000) / 3600000).toString(); + const minutes = Math.floor(((next % 86400000) % 3600000) / 60000).toString(); + + g.reset(); // reset the graphics context to defaults (color/font/etc) + g.setFontAlign(0,0); // center fonts + g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); + + // Use 'locale' module to get a shortened month name + // in the correct language + var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); + g.setFont("6x8:1x2"); + g.drawString(text, this.x+this.width/2, this.y+12); + if (this.width === 0) { + this.width = 6*5+2; + Bangle.drawWidgets(); // width changed, re-layout + } + } + } + + setInterval(function() { + WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + }, 30000); // update every half minute + + // add your widget + WIDGETS["alarmeta"]={ + area:"tl", + width: 0, // hide by default = assume no timer + draw:draw + }; +})(); diff --git a/apps/alarmeta/widget.png b/apps/alarmeta/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001