From e16cbf73b550d846921f04df8a6bd79415c48a41 Mon Sep 17 00:00:00 2001 From: smekras Date: Tue, 22 Feb 2022 15:37:37 +0100 Subject: [PATCH] Create app.js --- apps/smclock/app.js | 108 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 apps/smclock/app.js diff --git a/apps/smclock/app.js b/apps/smclock/app.js new file mode 100644 index 000000000..6aff72a46 --- /dev/null +++ b/apps/smclock/app.js @@ -0,0 +1,108 @@ +const background = { + width : 176, height : 176, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("/4A/AH4ACUb8H9MkyVJAThB/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/INP/AH4A/AAX8Yz4Afn5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/IP5B/INI=")) +}; + +const weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; +var level = -1; + +function ISO8601_week_no(date) { //copied from: https://gist.github.com/IamSilviu/5899269#gistcomment-3035480 + var tdt = new Date(date.valueOf()); + var dayn = (date.getDay() + 6) % 7; + tdt.setDate(tdt.getDate() - dayn + 3); + var firstThursday = tdt.valueOf(); + tdt.setMonth(0, 1); + if (tdt.getDay() !== 4) { + tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7); + } + return 1 + Math.ceil((firstThursday - tdt) / 604800000); +} + +function d02(value) { + return ('0' + value).substr(-2); +} + +function pollBattery() { + level = E.getBattery(); + return level; +} + +function getBatteryColor(level) { + var color; + if (level < 0) { + level = pollBattery(); + } + if(level>80) { + color = [0,0,1]; + } else if(level>60) { + color = [0,1,1]; + } else if(level>40) { + color = [0,1,0]; + } else if(level>20) { + color = [1,1,0]; + } else { + color = [1,0,0]; + } + return color; +} + +function draw() { + g.drawImage(background); + + const color = getBatteryColor(); + const bat = d02(E.getBattery()) + "%"; + const d = new Date(); + const day = d.getDate(); + const month = (d.getMonth() + 1); + const week = d02(ISO8601_week_no(d)); + const date1 = d02(day) + "/" + d02(month); + const date2 = weekday[d.getDay()] + " " + d02(week); + const h = d.getHours(); + const m = d.getMinutes(); + const time = d02(h) + ":" + d02(m); + + g.reset(); + + g.setColor(0, 0, 0); + g.setFont("Vector", 20); + g.drawString(date1, 105, 20, false); + g.setFont("Vector", 16); + g.drawString(date2, 105, 55, false); + + g.setColor(1, 1, 1); + g.setFont("Vector", 60); + g.drawString(time, 10, 108, false); + + g.setColor(1, 1, 1); + g.setFont("Vector", 16); + g.drawString("Bat:", 12, 22, false); + g.setColor(color[0], color[1], color[2]); + g.drawString(bat, 52, 22, false); +} + +g.clear(); + +pollBattery(); +draw(); + +var batInterval = setInterval(pollBattery, 60000); +var drawInterval = setInterval(draw, 10000); + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (batInterval) clearInterval(batInterval); + batInterval = undefined; + if (drawInterval) clearInterval(drawInterval); + drawInterval = undefined; + if (on) { + batInterval = setInterval(pollBattery, 60000); + drawInterval = setInterval(draw, 10000); + + pollBattery(); + draw(); // draw immediately + } +}); + +// Show launcher when middle button pressed +Bangle.setUI("clock");