forked from FOSS/BangleApps
87 lines
1.7 KiB
JavaScript
87 lines
1.7 KiB
JavaScript
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();
|
|
}
|
|
|
|
function queueMinuteTick() {
|
|
if (tickTimeout) clearTimeout(tickTimeout);
|
|
tickTimeout = setTimeout(function() {
|
|
tickTimeout = undefined;
|
|
face.tick();
|
|
queueMinuteTick();
|
|
}, 60000 - (Date.now() % 60000));
|
|
}
|
|
|
|
function startdraw() {
|
|
g.reset();
|
|
face.init();
|
|
if (face.tickpersec)
|
|
intervalRefSec = setInterval(face.tick,1000);
|
|
else
|
|
queueMinuteTick();
|
|
Bangle.drawWidgets();
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
Bangle.setUI("clockupdown", newFace);
|
|
}
|
|
|
|
E.on('kill',()=>{
|
|
if (iface!=lastface.pinned){
|
|
lastface.pinned=iface;
|
|
STOR.write("clock.json",lastface);
|
|
}
|
|
});
|
|
|
|
Bangle.loadWidgets();
|
|
g.clear();
|
|
startdraw();
|
|
setButtons();
|
|
|
|
|
|
|