Owning a still-running show means you want its new episodes, so it's on the watchlist without a click. Implemented as a computed default + explicit-override so it stays correct: - video_watchlist gains a 'state' column: 'follow' (explicit) | 'mute' (a tombstone — user un-followed an airing show that's on by default, so the default must not silently re-add it). - Effective watchlist (list/state/counts) = explicit follows ∪ library shows whose status isn't ended/canceled, minus mutes. Computed at READ time, so it always tracks the library + a show's status — no scanner hook, no re-seeding. - remove() now writes a mute tombstone (idempotent) instead of deleting; add() sets state='follow' and clears any mute. Scoped to the active video server. The existing library-card eye now paints 'watched' on airing shows by default; clicking mutes, clicking again re-follows. 4 tests updated/added incl. the airing-default + mute + re-follow flow. 80 video tests green. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| music_database.py | ||
| personalized_schema.py | ||
| video_database.py | ||
| video_schema.sql | ||