feat(schedule): per-plugin schedules and hide-while-live

Users asked to turn off news and stocks on gameday so only scores show.
Each plugin can now have its own schedule (global or per-day window in
which it may show) plus hide_when_live, which hides it whenever any
plugin reports a live game. A hidden plugin is skipped in the rotation,
the live takeover and the Vegas ticker; it stays loaded, and on-demand
still shows it.

- src/plugin_schedule.py: the window rule, now shared with the display
  schedule (_check_schedule calls schedule_state)
- core config key plugin_schedules; GET/POST /api/v3/config/plugin-schedules
- Schedule page: Plugin Schedules card, one picker per enabled plugin

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chuck
2026-10-17 19:29:29 -04:00
co-authored by Claude Opus 5.5
parent 7c51c93707
commit 1c733352b5
15 changed files with 693 additions and 210 deletions
+14
View File
@@ -2409,6 +2409,20 @@ enabled with default times `20:00`-`07:00`. As for the schedule above, an
enabled dim schedule needs at least one day enabled and a disabled one may
have every day off.
### Plugin Schedules
**GET** `/api/v3/config/plugin-schedules`
Every plugin's schedule (`plugin_schedules` in `docs/CONFIG_REFERENCE.md`),
keyed by plugin id.
**POST** `/api/v3/config/plugin-schedules`
Save one plugin's schedule: `plugin_id`, `hide_when_live`, and the same
fields as `POST /api/v3/config/schedule`. A schedule that is off and does
not hide during live games is removed. 400 for a core section name or a bad
time, 404 for a plugin that is not installed.
---
## Integrations