mirror of https://github.com/espruino/BangleApps
47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
{
|
|
let loading = false;
|
|
let timeoutRef = null;
|
|
let settings = Object.assign(
|
|
require('Storage').readJSON("owmweather.default.json", true) || {},
|
|
require('Storage').readJSON("owmweather.json", true) || {}
|
|
);
|
|
|
|
let refreshMillis = function () {
|
|
return settings.refresh * 1000 * 60 + 1; // +1 <- leave some slack
|
|
};
|
|
|
|
let onCompleted = function () {
|
|
loading = false;
|
|
settings.updated = Date.now();
|
|
require('Storage').writeJSON("owmweather.json", settings);
|
|
if (timeoutRef) clearTimeout(timeoutRef);
|
|
timeoutRef = setTimeout(loadIfDueAndReschedule, refreshMillis());
|
|
};
|
|
|
|
let loadIfDueAndReschedule = function () {
|
|
// also check if the weather.json file has been updated (e.g. force refresh)
|
|
let weather = require("Storage").readJSON('weather.json') || {};
|
|
let lastWeatherUpdate = weather && weather.weather && weather.weather.time && weather.weather.time || 0;
|
|
if (lastWeatherUpdate > settings.updated) {
|
|
settings.updated = lastWeatherUpdate;
|
|
}
|
|
|
|
let MillisUntilDue = settings.updated + refreshMillis() - Date.now();
|
|
if (!MillisUntilDue || MillisUntilDue <= 0) {
|
|
if (!loading) {
|
|
loading = true;
|
|
require("owmweather").pull(onCompleted);
|
|
}
|
|
} else {
|
|
// called to early, reschedule
|
|
// console.log('Weather data is not due yet, rescheduling in ' + (MillisUntilDue || 0) + 'ms');
|
|
if (timeoutRef) clearTimeout(timeoutRef);
|
|
timeoutRef = setTimeout(loadIfDueAndReschedule, MillisUntilDue + 1);
|
|
}
|
|
};
|
|
|
|
if (settings.enabled) {
|
|
setTimeout(loadIfDueAndReschedule, 5000); // run 5 seconds after boot
|
|
NRF.on('connect', loadIfDueAndReschedule); // after reconnect, fetch the weather data right away if it's due
|
|
}
|
|
} |