diff --git a/scheduler.py b/scheduler.py index e81fb38..fb93aa9 100644 --- a/scheduler.py +++ b/scheduler.py @@ -15,6 +15,7 @@ import hashlib import logging import threading import time +from datetime import date from pathlib import Path from PIL import Image @@ -32,8 +33,17 @@ class ScreenCache: def __init__(self): self.state = None self.checked_at: float = 0.0 + self.checked_date: date | None = None def is_stale(self, poll_interval: int) -> bool: + # Also stale across a local-midnight rollover, independent of + # poll_interval -- otherwise a screen whose data is inherently + # date-bound (weather's daily forecast labels, its "today" hourly + # graph) keeps showing yesterday's data for up to poll_interval + # after midnight, since the cached state was genuinely correct + # when fetched, just not anymore now that the date has turned over. + if self.checked_date != date.today(): + return True return (time.time() - self.checked_at) >= poll_interval @@ -197,6 +207,7 @@ class Scheduler: if cache.is_stale(screen.get_poll_interval(settings)): cache.state = self._check(screen_id) cache.checked_at = time.time() + cache.checked_date = date.today() checked = True return screen_id, cache.state, checked