mirror of https://github.com/espruino/BangleApps
80 lines
2.9 KiB
JavaScript
80 lines
2.9 KiB
JavaScript
(() => {
|
|
var settingsChronowid;
|
|
var interval = 0; //used for the 1 second interval timer
|
|
var diff;
|
|
|
|
//Convert ms to time
|
|
function getTime(t) {
|
|
var milliseconds = parseInt((t % 1000) / 100),
|
|
seconds = Math.floor((t / 1000) % 60),
|
|
minutes = Math.floor((t / (1000 * 60)) % 60),
|
|
hours = Math.floor((t / (1000 * 60 * 60)) % 24);
|
|
return hours.toString().padStart(2,0) + ":" + minutes.toString().padStart(2,0) + ":" + seconds.toString().padStart(2,0);
|
|
}
|
|
|
|
/*function printDebug() {
|
|
print ("Goaltime: " + getTime(settingsChronowid.goal));
|
|
print ("Goal: " + settingsChronowid.goal);
|
|
print("Difftime: " + getTime(diff));
|
|
print("Diff: " + diff);
|
|
print ("Started: " + settingsChronowid.started);
|
|
print ("----");
|
|
}*/
|
|
|
|
//counts down, calculates and displays
|
|
function countDown() {
|
|
var now = new Date();
|
|
diff = settingsChronowid.goal - now; //calculate difference
|
|
// time is up
|
|
if (settingsChronowid.started && diff < 1000) {
|
|
Bangle.buzz(1500);
|
|
//write timer off to file
|
|
settingsChronowid.started = false;
|
|
require('Storage').writeJSON('chronowid.json', settingsChronowid);
|
|
clearInterval(interval); //stop interval
|
|
interval = undefined;
|
|
}
|
|
// calculates width and redraws accordingly
|
|
WIDGETS["chronowid"].redraw();
|
|
}
|
|
|
|
// add the widget
|
|
WIDGETS["chronowid"]={area:"tl",width:0,draw:function() {
|
|
if (!this.width) return;
|
|
g.reset().setFontAlign(0,0).clearRect(this.x,this.y,this.x+this.width,this.y+23);
|
|
//g.drawRect(this.x,this.y,this.x+this.width-1, this.y+23);
|
|
var scale;
|
|
var timeStr;
|
|
if (diff < 3600000) { //less than 1 hour left
|
|
width = 58;
|
|
scale = 2;
|
|
timeStr = getTime(diff).substring(3); // remove hour part 00:00:00 -> 00:00
|
|
} else { //one hour or more left
|
|
width = 48;
|
|
scale = 1;
|
|
timeStr = getTime(diff); //display hour 00:00:00 but small
|
|
}
|
|
// Font5x9Numeric7Seg - just build this in as it's tiny
|
|
g.setFontCustom(atob("AAAAAAAAAAIAAAQCAQAAAd0BgMBdwAAAAAAAdwAB0RiMRcAAAERiMRdwAcAQCAQdwAcERiMRBwAd0RiMRBwAAEAgEAdwAd0RiMRdwAcERiMRdwAFAAd0QiEQdwAdwRCIRBwAd0BgMBAAABwRCIRdwAd0RiMRAAAd0QiEQAAAAAAAAAA="), 32, atob("BgAAAAAAAAAAAAAAAAYCAAYGBgYGBgYGBgYCAAAAAAAABgYGBgYG"), 9 + (scale<<8));
|
|
g.drawString(timeStr, this.x+this.width/2, this.y+12);
|
|
}, redraw:function() {
|
|
var last = this.width;
|
|
if (!settingsChronowid.started) this.width = 0;
|
|
else this.width = (diff < 3600000) ? 58 : 48;
|
|
if (last != this.width) Bangle.drawWidgets();
|
|
else this.draw();
|
|
}, reload:function() {
|
|
settingsChronowid = require('Storage').readJSON("chronowid.json",1)||{};
|
|
if (interval) clearInterval(interval);
|
|
interval = undefined;
|
|
// start countdown each second
|
|
if (settingsChronowid.started) interval = setInterval(countDown, 1000);
|
|
// reset everything
|
|
countDown();
|
|
}};
|
|
|
|
//printDebug();
|
|
// set width correctly, start countdown each second
|
|
WIDGETS["chronowid"].reload();
|
|
})();
|