From eed9868b76acb461855e28fbcedf108a6efc6a91 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Sat, 23 May 2020 22:37:38 -0400 Subject: [PATCH] weather: delete stale weather data --- apps.json | 3 ++- apps/weather/lib.js | 21 +++++++++++++++++++++ apps/weather/settings.js | 24 ++++++++++++++++++++++++ apps/weather/widget.js | 5 +++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 apps/weather/settings.js diff --git a/apps.json b/apps.json index 3386867cf..f1ca85f8e 100644 --- a/apps.json +++ b/apps.json @@ -392,7 +392,8 @@ {"name":"weather.app.js","url":"app.js"}, {"name":"weather.wid.js","url":"widget.js"}, {"name":"weather","url":"lib.js"}, - {"name":"weather.img","url":"icon.js","evaluate":true} + {"name":"weather.img","url":"icon.js","evaluate":true}, + {"name":"weather.settings.js","url":"settings.js"} ], "data": [ {"name": "weather.json"} diff --git a/apps/weather/lib.js b/apps/weather/lib.js index a227cd0e2..6ed9ae292 100644 --- a/apps/weather/lib.js +++ b/apps/weather/lib.js @@ -1,3 +1,21 @@ +let expiryTimeout = undefined; +function updateExpiry(json) { + if (expiryTimeout) { + clearTimeout(expiryTimeout); + expiryTimeout = undefined; + } + if (json.weather && json.weather.time && json.expiry) { + let t = json.weather.time + json.expiry - Date.now(); + expiryTimeout = setTimeout(() => { + expiryTimeout = undefined; + let json = require('Storage').readJSON('weather.json')||{}; + delete json.weather; + require('Storage').write('weather.json', json); + exports.emit("expiry"); + }, t); + } +} + exports = { save: weather => { let json = require('Storage').readJSON('weather.json')||{}; @@ -5,6 +23,7 @@ exports = { delete json.weather.t; // don't save the event type (if present) json.weather.time = Date.now(); require('Storage').write('weather.json', json); + updateExpiry(json); }, load: () => { let json = require('Storage').readJSON('weather.json')||{}; @@ -175,3 +194,5 @@ exports = { chooseIcon(cond)(x, y, r); }, } + +updateExpiry(require('Storage').readJSON('weather.json')||{}); diff --git a/apps/weather/settings.js b/apps/weather/settings.js new file mode 100644 index 000000000..1cc097e3a --- /dev/null +++ b/apps/weather/settings.js @@ -0,0 +1,24 @@ +(function(back) { + const storage = require('Storage'); + let settings = storage.readJSON('weather.json', 1) || {}; + function save(key, value) { + settings[key] = value; + storage.write('weather.json', settings); + } + E.showMenu({ + '': { 'title': 'Weather' }, + 'Expiry': { + value: "expiry" in settings ? settings["expiry"] : 2*3600000, + min: 0, + max : 24*3600000, + step: 15*60000, + format: x => { + if (x == 0) return "none"; + if (x < 3600000) return Math.floor(x/60000) + "m"; + if (x < 86400000) return Math.floor(x/36000)/100 + "h"; + }, + onchange: x => save('expiry', x), + }, + '< Back': back, + }); +}) diff --git a/apps/weather/widget.js b/apps/weather/widget.js index 25b3adc9c..7794b0489 100644 --- a/apps/weather/widget.js +++ b/apps/weather/widget.js @@ -44,6 +44,11 @@ if (_GB) setTimeout(_GB, 0, event); }; + require('weather').on("expiry", () => { + WIDGETS["weather"].width = 0; + Bangle.drawWidgets(); + }); + WIDGETS["weather"] = {area: "tl", width: 20, draw: draw}; if (!require('weather').load()) { WIDGETS["weather"].width = 0;