BangleApps/apps/multiclock/multiclock.app.js

87 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-11-01 17:46:50 +00:00
var FACES = [];
var STOR = require("Storage");
STOR.list(/\.face\.js$/).forEach(face=>FACES.push(eval(require("Storage").read(face))));
var lastface = STOR.readJSON("clock.json") || {pinned:0}
var iface = lastface.pinned;
var face = FACES[iface]();
var intervalRefSec;
var intervalRefSec;
var tickTimeout;
function stopdraw() {
if(intervalRefSec) {intervalRefSec=clearInterval(intervalRefSec);}
if(tickTimeout) {tickTimeout=clearTimeout(tickTimeout);}
g.clear();
}
2021-11-02 12:52:22 +00:00
function queueMinuteTick() {
if (tickTimeout) clearTimeout(tickTimeout);
2021-11-01 17:46:50 +00:00
tickTimeout = setTimeout(function() {
tickTimeout = undefined;
2021-11-02 12:52:22 +00:00
face.tick();
queueMinuteTick();
2021-11-01 17:46:50 +00:00
}, 60000 - (Date.now() % 60000));
}
function startdraw() {
g.reset();
face.init();
if (face.tickpersec)
intervalRefSec = setInterval(face.tick,1000);
else
2021-11-02 12:52:22 +00:00
queueMinuteTick();
2021-11-01 19:19:16 +00:00
Bangle.drawWidgets();
2021-11-01 17:46:50 +00:00
}
var SCREENACCESS = {
withApp:true,
request:function(){
this.withApp=false;
stopdraw();
},
release:function(){
this.withapp=true;
startdraw();
setButtons();
}
};
Bangle.on('lcdPower',function(b) {
if (!SCREENACCESS.withApp) return;
if (b) {
startdraw();
} else {
stopdraw();
}
});
function setButtons(){
function newFace(inc){
if (!inc) Bangle.showLauncher();
else {
var n = FACES.length-1;
iface+=inc;
iface = iface>n?0:iface<0?n:iface;
stopdraw();
face = FACES[iface]();
startdraw();
}
}
2021-11-19 15:08:45 +00:00
Bangle.setUI("clockupdown", newFace);
2021-11-01 17:46:50 +00:00
}
E.on('kill',()=>{
if (iface!=lastface.pinned){
lastface.pinned=iface;
STOR.write("clock.json",lastface);
}
});
Bangle.loadWidgets();
g.clear();
startdraw();
setButtons();