diff options
Diffstat (limited to 'lib/weather.lua')
| -rw-r--r-- | lib/weather.lua | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/weather.lua b/lib/weather.lua index b1fda4d..8ecd273 100644 --- a/lib/weather.lua +++ b/lib/weather.lua @@ -189,15 +189,25 @@ end -- Three missed fetches at the 15-minute interval. M.STALE_AFTER = 45 * 60 +-- `now` is guarded alongside `dt` although every caller passes os.time(), +-- which cannot be nil: these were the only two functions in the module that +-- did arithmetic on an unchecked argument, and the module's promise is that +-- nothing raises. A raise here is a blank dashboard. function M.is_stale(dt, now) - if type(dt) ~= 'number' then return true end + if type(dt) ~= 'number' or type(now) ~= 'number' then return true end return (now - dt) > M.STALE_AFTER end -- Short age for the marker beside the city: "12m", "3h", "2d". +-- +-- A negative age is clamped to zero rather than printed. An observation +-- timestamped in the future means a clock skew somewhere, and "stale -17m" on +-- the card reads as a broken widget; treating it as fresh is both tidier and +-- truer, since weather from the future is not old. function M.age_str(dt, now) - if type(dt) ~= 'number' then return '?' end + if type(dt) ~= 'number' or type(now) ~= 'number' then return '?' end local s = now - dt + if s < 0 then s = 0 end if s < 3600 then return math.floor(s / 60) .. 'm' end if s < 86400 then return math.floor(s / 3600) .. 'h' end return math.floor(s / 86400) .. 'd' |
