More caching for fewer redraws and backlight refreshes
parent
f66efa1b36
commit
a3209238ba
|
|
@ -7,6 +7,10 @@ const LOCATION_FILE = "mylocation.json";
|
||||||
const h = g.getHeight();
|
const h = g.getHeight();
|
||||||
const w = g.getWidth();
|
const w = g.getWidth();
|
||||||
let location;
|
let location;
|
||||||
|
let cachedSunTimes = null;
|
||||||
|
let lastSunCalcDate = null;
|
||||||
|
var prevVals = {};
|
||||||
|
let drawTimeout;
|
||||||
|
|
||||||
var settings = {
|
var settings = {
|
||||||
hr_12: global_settings["12hour"] !== undefined ? global_settings["12hour"] : false,
|
hr_12: global_settings["12hour"] !== undefined ? global_settings["12hour"] : false,
|
||||||
|
|
@ -14,7 +18,7 @@ var settings = {
|
||||||
};
|
};
|
||||||
|
|
||||||
let clrs = {
|
let clrs = {
|
||||||
tab : settings.dark_mode ? "#2d2d30" : "#DDDDDD", // grey
|
tab : "#DDDDDD", // grey
|
||||||
keys: settings.dark_mode ? "#4287f5" : "#0000FF", // blue
|
keys: settings.dark_mode ? "#4287f5" : "#0000FF", // blue
|
||||||
strings: settings.dark_mode ? "#F0A000" : "#FF0000", // orange or red
|
strings: settings.dark_mode ? "#F0A000" : "#FF0000", // orange or red
|
||||||
ints: settings.dark_mode ? "#00FF00" : "#00FF00", // green
|
ints: settings.dark_mode ? "#00FF00" : "#00FF00", // green
|
||||||
|
|
@ -81,18 +85,22 @@ function extractTime(d){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getVal() {
|
function getVal() {
|
||||||
vals = {};
|
const vals = {};
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const sunTimes = SunCalc.getTimes(now, location.lat, location.lon);
|
const currentDateStr = extractDate(now);
|
||||||
|
if (lastSunCalcDate !== currentDateStr) {
|
||||||
|
cachedSunTimes = SunCalc.getTimes(now, location.lat, location.lon);
|
||||||
|
lastSunCalcDate = currentDateStr;
|
||||||
|
}
|
||||||
vals.time = extractTime(now);
|
vals.time = extractTime(now);
|
||||||
vals.date = extractDate(now);
|
vals.date = currentDateStr;
|
||||||
vals.rise = extractTime(sunTimes.sunrise);
|
vals.rise = extractTime(cachedSunTimes.sunrise);
|
||||||
vals.set = extractTime(sunTimes.sunset);
|
vals.set = extractTime(cachedSunTimes.sunset);
|
||||||
vals.batt_pct = E.getBattery();
|
vals.batt_pct = E.getBattery();
|
||||||
vals.steps = getSteps();
|
vals.steps = getSteps();
|
||||||
return vals;
|
return vals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function loadJson() {
|
function loadJson() {
|
||||||
|
|
@ -158,6 +166,9 @@ function redraw() {
|
||||||
const key = kvMatch[1];
|
const key = kvMatch[1];
|
||||||
let value = kvMatch[2];
|
let value = kvMatch[2];
|
||||||
|
|
||||||
|
if (prevVals.key == value) continue;
|
||||||
|
prevVals.key = value;
|
||||||
|
|
||||||
// Key
|
// Key
|
||||||
g.setColor(clrs.keys);
|
g.setColor(clrs.keys);
|
||||||
g.drawString(indent + `"${key}"`, numWidth, y);
|
g.drawString(indent + `"${key}"`, numWidth, y);
|
||||||
|
|
@ -200,6 +211,11 @@ function redrawValues(){
|
||||||
loadJson();
|
loadJson();
|
||||||
clearVals();
|
clearVals();
|
||||||
redraw();
|
redraw();
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
drawTimeout = setTimeout(function() {
|
||||||
|
drawTimeout = undefined;
|
||||||
|
redrawValues();
|
||||||
|
}, 60000 - (Date.now() % 60000));
|
||||||
}
|
}
|
||||||
|
|
||||||
function scroll(amount) {
|
function scroll(amount) {
|
||||||
|
|
@ -219,6 +235,12 @@ Bangle.on('touch', (zone, e) => {
|
||||||
|
|
||||||
Bangle.on('drag', (e) => scroll(-e.dy));
|
Bangle.on('drag', (e) => scroll(-e.dy));
|
||||||
|
|
||||||
|
Bangle.on('backlight', function(on) {
|
||||||
|
if (on) {
|
||||||
|
redrawValues(); // or just draw() if you want full re-render
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Bangle.setUI({
|
Bangle.setUI({
|
||||||
mode: "clock",
|
mode: "clock",
|
||||||
remove: function () {
|
remove: function () {
|
||||||
|
|
@ -231,4 +253,4 @@ loadLocation();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
widget_utils.hide();
|
widget_utils.hide();
|
||||||
draw();
|
draw();
|
||||||
setInterval(redrawValues, 5000);
|
setTimeout(Bangle.drawWidgets,0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue