2020-04-21 21:18:21 +00:00
|
|
|
(() => {
|
2020-05-24 09:21:24 +00:00
|
|
|
const weather = require('weather');
|
2021-12-08 09:37:02 +00:00
|
|
|
|
2020-05-23 03:36:56 +00:00
|
|
|
var dirty = false;
|
2021-12-08 09:37:02 +00:00
|
|
|
|
|
|
|
let settings;
|
|
|
|
|
|
|
|
function loadSettings() {
|
2021-12-08 10:30:21 +00:00
|
|
|
settings = require('Storage').readJSON('weather.json', 1) || {};
|
2021-12-08 09:37:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setting(key) {
|
|
|
|
if (!settings) { loadSettings(); }
|
|
|
|
const DEFAULTS = {
|
|
|
|
'expiry': 2*3600000,
|
|
|
|
'hide': false
|
|
|
|
};
|
|
|
|
return (key in settings) ? settings[key] : DEFAULTS[key];
|
|
|
|
}
|
2020-05-23 03:36:56 +00:00
|
|
|
|
2021-09-19 18:28:56 +00:00
|
|
|
weather.on("update", w => {
|
2021-12-08 09:37:02 +00:00
|
|
|
if (setting('hide')) return;
|
2021-09-19 18:28:56 +00:00
|
|
|
if (w) {
|
|
|
|
if (!WIDGETS["weather"].width) {
|
|
|
|
WIDGETS["weather"].width = 20;
|
|
|
|
Bangle.drawWidgets();
|
|
|
|
} else if (Bangle.isLCDOn()) {
|
|
|
|
WIDGETS["weather"].draw();
|
|
|
|
} else {
|
|
|
|
dirty = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
WIDGETS["weather"].width = 0;
|
2020-05-23 03:53:42 +00:00
|
|
|
Bangle.drawWidgets();
|
2020-04-21 21:18:21 +00:00
|
|
|
}
|
2020-05-24 09:21:24 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
Bangle.on('lcdPower', on => {
|
2021-12-08 09:37:02 +00:00
|
|
|
if (on && dirty && !setting('hide')) {
|
2020-05-23 03:36:56 +00:00
|
|
|
WIDGETS["weather"].draw();
|
|
|
|
dirty = false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-05-24 09:21:24 +00:00
|
|
|
WIDGETS["weather"] = {
|
|
|
|
area: "tl",
|
2021-12-08 09:23:48 +00:00
|
|
|
width: weather.get() && !setting('hide') ? 20 : 0,
|
2021-09-19 18:28:56 +00:00
|
|
|
draw: function() {
|
2021-12-08 10:30:21 +00:00
|
|
|
if (setting('hide')) return;
|
2021-09-19 18:28:56 +00:00
|
|
|
const w = weather.get();
|
|
|
|
if (!w) return;
|
|
|
|
g.reset();
|
|
|
|
g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23);
|
|
|
|
if (w.txt) {
|
|
|
|
weather.drawIcon(w.txt, this.x+10, this.y+8, 7.5);
|
|
|
|
}
|
|
|
|
if (w.temp) {
|
|
|
|
let t = require('locale').temp(w.temp-273.15); // applies conversion
|
|
|
|
t = t.match(/[\d\-]*/)[0]; // but we have no room for units
|
|
|
|
g.reset();
|
|
|
|
g.setFontAlign(0, 1); // center horizontally at bottom of widget
|
|
|
|
g.setFont('6x8', 1);
|
|
|
|
g.drawString(t, this.x+10, this.y+24);
|
|
|
|
}
|
|
|
|
},
|
2021-12-08 09:37:02 +00:00
|
|
|
reload:function() {
|
|
|
|
loadSettings();
|
|
|
|
WIDGETS["weather"].redraw();
|
|
|
|
},
|
2020-04-21 21:18:21 +00:00
|
|
|
};
|
|
|
|
})();
|