BangleApps/apps/contourclock/app.js

104 lines
3.5 KiB
JavaScript
Raw Normal View History

2022-12-03 12:07:33 +00:00
{
let drawTimeout;
2023-01-22 01:12:19 +00:00
let extrasTimeout;
2023-01-22 01:26:50 +00:00
let onLock;
2024-03-04 20:34:50 +00:00
//let onTap;
//let onTwist;
2022-12-03 12:07:33 +00:00
let settings = require('Storage').readJSON("contourclock.json", true) || {};
2023-01-23 17:51:23 +00:00
if (settings.fontIndex == undefined) {
settings.fontIndex = 0;
settings.widgets = true;
settings.weekday = true;
settings.hideWhenLocked = false;
settings.tapToShow = false;
settings.twistToShow = false;
settings.date = true;
2023-01-15 02:27:08 +00:00
require('Storage').writeJSON("contourclock.json", settings);
}
2023-01-23 17:51:23 +00:00
require("FontTeletext10x18Ascii").add(Graphics);
2023-01-26 17:18:11 +00:00
let extrasShown = (!settings.hidewhenlocked) || (!Bangle.isLocked());
2023-01-15 02:27:08 +00:00
let installedFonts = require('Storage').readJSON("contourclock-install.json") || {};
2023-01-23 17:51:23 +00:00
if (installedFonts.n > 0) { //New install - check for unused font files
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-23 17:51:23 +00:00
for (let n = installedFonts.n;; n++) {
if (require("Storage").read("contourclock-" + n + ".json") == undefined) break;
require("Storage").erase("contourclock-" + n + ".json");
2023-01-15 02:27:08 +00:00
}
require("Storage").erase("contourclock-install.json");
2022-12-03 12:07:33 +00:00
}
2023-01-23 17:51:23 +00:00
let showExtras = function() { //show extras for a limited time
drawExtras();
if (extrasTimeout) clearTimeout(extrasTimeout);
2023-01-24 08:40:46 +00:00
extrasTimeout = setTimeout(() => {
extrasTimeout = undefined;
2023-01-24 10:26:14 +00:00
hideExtras();
2023-01-24 08:40:46 +00:00
}, 5000);
2023-09-10 22:31:43 +00:00
extrasShown = false;
2023-01-23 17:51:23 +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-09-10 22:31:43 +00:00
g.reset();
g.clearRect(0, 138, g.getWidth() - 1, 176);
2023-01-23 17:51:23 +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();
2023-01-23 17:51:23 +00:00
extrasShown = true;
2023-01-22 01:12:19 +00:00
};
let hideExtras = function() {
2023-01-23 17:51:23 +00:00
if (extrasTimeout) clearTimeout(extrasTimeout);
2023-09-10 22:31:43 +00:00
extrasTimeout = undefined; //NEW
g.reset();
2023-01-23 17:51:23 +00:00
g.clearRect(0, 138, g.getWidth() - 1, 176);
2023-01-22 01:12:19 +00:00
require("widget_utils").hide();
2023-09-10 22:31:43 +00:00
extrasShown = false; ///NEW
2022-12-03 12:07:33 +00:00
};
let draw = function() {
2023-09-10 22:31:43 +00:00
if (drawTimeout) clearTimeout(drawTimeout); //NEW
2023-01-23 17:51:23 +00:00
drawTimeout = setTimeout(function() {
drawTimeout = undefined;
draw();
}, 60000 - (Date.now() % 60000));
2022-12-03 12:07:33 +00:00
g.reset();
2023-01-23 17:51:23 +00:00
if (extrasShown) drawExtras();
else hideExtras();
2023-01-22 01:12:19 +00:00
require('contourclock').drawClock(settings.fontIndex);
};
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 01:12:19 +00:00
Bangle.on('lock', onLock);
2023-01-23 17:51:23 +00:00
if (settings.tapToShow) Bangle.on('tap', showExtras);
if (settings.twistToShow) Bangle.on('twist', showExtras);
2023-01-22 01:12:19 +00:00
}
2023-01-23 17:51:23 +00:00
Bangle.setUI({
mode: "clock",
remove: function() {
Bangle.removeListener('lock', onLock);
Bangle.removeListener('tap', showExtras);
Bangle.removeListener('twist', showExtras);
if (drawTimeout) clearTimeout(drawTimeout);
if (extrasTimeout) clearTimeout(extrasTimeout);
2023-09-10 22:31:43 +00:00
drawTimeout = undefined;
extrasTimeout = undefined;
2023-01-23 17:51:23 +00:00
if (settings.hideWhenLocked) require("widget_utils").show();
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();
2023-09-10 22:31:43 +00:00
setTimeout(Bangle.drawWidgets,0); //NEW
2023-01-22 01:26:50 +00:00
}
2023-01-22 01:12:19 +00:00
draw();
2022-12-03 12:07:33 +00:00
}