|
4 | 4 |
|
5 | 5 | function checkAQI(cb) { |
6 | 6 | let d = new Date(); |
7 | | - if (config.apiKey && config.rows && (data.aqiTime === undefined || data.aqiTime + 3600000 < d.getTime())) { |
8 | | - data.aqi = []; |
| 7 | + if (config.apiKey && config.rows) { |
9 | 8 | config.rows.forEach((row) => { |
10 | 9 | if (row.url) { |
11 | 10 | let el = row.url.replace(/\/$/, "").split("/").reverse(); |
12 | 11 | let url = `https://api.airvisual.com/v2/city?city=${el[0]}&state=${el[1]}&country=${el[2]}&key=${config.apiKey}`; |
13 | | - Bangle.http(url).then((r) => { |
14 | | - let resp = JSON.parse(r.resp); |
15 | | - data.aqiTime = d.getTime(); |
16 | | - data.aqi.push({ |
17 | | - url: row.url, |
18 | | - aqius: resp.data.current.pollution.aqius, |
19 | | - temp: resp.data.current.weather.tp |
| 12 | + data[row.url] = data[row.url] || {}; |
| 13 | + // If neither attempt nor time are set, then we have never tried |
| 14 | + // If attempt was set more than 1 minute ago, try again |
| 15 | + // If time was set more than 1 hour ago, refresh |
| 16 | + if ((!data[row.url].time && !data[row.url].attempt) || |
| 17 | + (data[row.url].attempt && data[row.url].attempt + 60000 < d.getTime()) || |
| 18 | + (data[row.url].time && data[row.url].time + 3600000 < d.getTime())) { |
| 19 | + data[row.url].attempt = d.getTime(); |
| 20 | + Bangle.http(url).then((r) => { |
| 21 | + let resp = JSON.parse(r.resp); |
| 22 | + data[row.url] = { |
| 23 | + aqius: resp.data.current.pollution.aqius, |
| 24 | + temp: resp.data.current.weather.tp, |
| 25 | + time: d.getTime() |
| 26 | + } |
| 27 | + cb(); |
| 28 | + require("Storage").writeJSON("airqualityci.json", data); |
20 | 29 | }); |
21 | | - cb(); |
22 | | - require("Storage").writeJSON("airqualityci.json", data); |
23 | | - }); |
| 30 | + } |
24 | 31 | } |
25 | 32 | }); |
26 | 33 | } |
|
50 | 57 | }, |
51 | 58 | get: function() { |
52 | 59 | checkAQI(() => this.emit("redraw")); |
53 | | - let aqi = data.aqi.find((e) => e.url == config.rows[id].url); |
| 60 | + let aqi = data[config.rows[id].url] |
54 | 61 | let txt = ""; |
55 | 62 | switch ( config.rows[id].mode) { |
56 | 63 | case 2: |
|
0 commit comments