aboutsummaryrefslogtreecommitdiffstats
path: root/lib/weather.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/weather.lua')
-rw-r--r--lib/weather.lua14
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'