You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[0.5.2] - 2026-07-27
Fixed
Status total percentage read a dead column — playtimed status computed the Total progress bar from the legacy daily_total column while Gaming used the current per-day limits, so a stale value could render nonsense (789% against a real 100%). Both now measure against daily_limits, completing the migration started in 0.5.1
History coloured every row against a flat limit — playtimed history compared each day's gaming time to the legacy gaming_limit column instead of that day's own budget, marking weekday rows red against a weekend allowance. Each row is now coloured against its own day's limit
Warns column always showed 0 — playtimed history read the warnings_sent counter, which the daemon never increments; warnings are recorded as the warned_30/warned_15/warned_5 flags. The column now derives its count from those flags
Sessions leaked on unclean daemon exit — active sessions are tracked in memory only, so a crash, reboot, or SIGKILL left rows with no end_time while the next poll opened fresh ones for the same processes. Open sessions are now closed on shutdown, and any left behind by a previous run are reconciled at startup
Added
ActivityDB.get_open_sessions(), close_session(), and get_last_poll_at() supporting session reconciliation
Sessions closed at an unverified upper bound record a NULL duration and display as unknown rather than being credited with playtime that may never have happened — they drop out of per-app aggregates instead of inflating them
shutdown and orphaned end reasons distinguish a clean daemon stop from a session recovered after an unclean exit