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

93 lines
3.1 KiB
JavaScript
Raw Normal View History

2022-12-03 12:07:33 +00:00
{
let digits = [];
let drawTimeout;
2023-01-22 01:12:19 +00:00
let extrasTimeout;
2023-01-22 01:26:50 +00:00
let onLock;
let onTap;
let onTwist;
2022-12-03 12:07:33 +00:00
let fontName="";
let settings = require('Storage').readJSON("contourclock.json", true) || {};
if (settings.fontIndex==undefined) {
settings.fontIndex=0;
2022-12-03 13:19:04 +00:00
settings.widgets=true;
settings.weekday=true;
settings.hideWhenLocked=false;
2023-01-22 01:12:19 +00:00
settings.tapToShow=false;
settings.twistToShow=false;
2023-01-15 02:27:08 +00:00
settings.date=true;
require('Storage').writeJSON("contourclock.json", settings);
}
let installedFonts = require('Storage').readJSON("contourclock-install.json") || {};
if (installedFonts.n>0) { //New install - check for unused font files
2023-01-22 02:15:00 +00:00
settings.fontIndex=E.clip(settings.fontIndex,-installedFonts.n+1,installedFonts.n-1);
2023-01-22 02:42:31 +00:00
require('Storage').writeJSON("contourclock.json", settings);
2023-01-15 02:27:08 +00:00
for (let n=installedFonts.n; ;n++) {
if (require("Storage").read("contourclock-"+n+".json")==undefined) break;
require("Storage").erase("contourclock-"+n+".json");
}
require("Storage").erase("contourclock-install.json");
2022-12-03 12:07:33 +00:00
}
2023-01-22 01:12:19 +00:00
require("FontTeletext10x18Ascii").add(Graphics);
2023-01-22 01:26:50 +00:00
2023-01-22 01:12:19 +00:00
let drawExtras = function() { //draw date, day of the week and widgets
let date = new Date();
2023-01-22 02:42:31 +00:00
g.setFont("Teletext10x18Ascii").setFontAlign(0,1);
if (settings.weekday) g.drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18);
if (settings.date) g.drawString(require('locale').date(date,1),g.getWidth()/2,g.getHeight());
2023-01-22 01:12:19 +00:00
require("widget_utils").show();
};
let hideExtras = function() {
g.clearRect(0,138,g.getWidth()-1,176);
require("widget_utils").hide();
2022-12-03 12:07:33 +00:00
};
let draw = function() {
2023-01-22 01:12:19 +00:00
let date = new Date();
2022-12-03 12:07:33 +00:00
g.reset();
2023-01-22 01:12:19 +00:00
if ((!settings.hideWhenLocked) || (!Bangle.isLocked())) drawExtras();
else require("widget_utils").hide();
require('contourclock').drawClock(settings.fontIndex);
if (drawTimeout) clearTimeout(drawTimeout);
2023-01-22 02:42:31 +00:00
drawTimeout = setTimeout(draw, 60000 - (Date.now() % 60000));
2023-01-22 01:12:19 +00:00
};
2023-01-22 01:26:50 +00:00
if (settings.hideWhenLocked) {
2023-01-22 02:42:31 +00:00
onLock = locked => {
2023-01-22 01:26:50 +00:00
if (!locked) {
require("widget_utils").show();
drawExtras();
} else {
require("widget_utils").hide();
hideExtras();
}
};
2023-01-22 02:42:31 +00:00
onTap = d => {
2023-01-22 02:15:00 +00:00
drawExtras();
if (extrasTimeout) clearTimeout(extrasTimeout);
extrasTimeout = setTimeout(hideExtras, 5000);
2023-01-22 01:26:50 +00:00
};
2023-01-22 02:42:31 +00:00
onTwist = () => {
2023-01-22 01:12:19 +00:00
drawExtras();
if (extrasTimeout) clearTimeout(extrasTimeout);
extrasTimeout = setTimeout(hideExtras, 5000);
2023-01-22 01:26:50 +00:00
};
2023-01-22 01:12:19 +00:00
Bangle.on('lock', onLock);
if (settings.tapToShow) Bangle.on('tap', onTap);
if (settings.twistToShow) Bangle.on('twist', onTwist);
}
2022-12-03 12:07:33 +00:00
Bangle.setUI({mode:"clock", remove:function() {
2023-01-22 02:42:31 +00:00
Bangle.removeListener('lock',onLock);
Bangle.removeListener('tap', onTap);
Bangle.removeListener('twist',onTwist);
2022-12-03 12:07:33 +00:00
if (drawTimeout) clearTimeout(drawTimeout);
2023-01-22 01:12:19 +00:00
if (extrasTimeout) clearTimeout(extrasTimeout);
if (settings.hideWhenLocked) require("widget_utils").show();
2022-12-03 12:07:33 +00:00
g.reset();
g.clear();
}});
2023-01-22 01:12:19 +00:00
g.clear();
2023-01-22 01:26:50 +00:00
if (settings.widgets) {
Bangle.loadWidgets();
Bangle.drawWidgets();
}
2023-01-22 01:12:19 +00:00
draw();
2022-12-03 12:07:33 +00:00
}