1
0
Fork 0
BangleApps/apps/smclock/app.js

113 lines
3.2 KiB
JavaScript
Raw Normal View History

2022-02-25 20:54:38 +00:00
const SETTINGSFILE = "smclock.json";
2022-02-22 14:37:37 +00:00
const background = {
2022-02-25 20:54:38 +00:00
width : 176, height : 176, bpp : 3, transparent : 1,
2022-02-22 14:37:37 +00:00
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="))
};
2022-02-25 20:54:38 +00:00
const monthName = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
2022-02-22 14:37:37 +00:00
const weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
2022-02-25 20:54:38 +00:00
// dynamic variables
var batLevel = -1;
var batColor = [0,0,0];
// copied from: https://gist.github.com/IamSilviu/5899269#gistcomment-3035480
function ISO8601_week_no(date) {
2022-02-22 14:37:37 +00:00
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() {
2022-02-25 20:54:38 +00:00
batLevel = E.getBattery();
return batLevel;
2022-02-22 14:37:37 +00:00
}
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();
2022-02-25 20:54:38 +00:00
draw();
2022-02-22 14:37:37 +00:00
}
});
// Show launcher when middle button pressed
Bangle.setUI("clock");