soulsync/api/video
BoulderBadgeDad 4287385af6 Video watchlist page: server-paged + search bar (like the library)
The page rendered every follow + airing-default show at once (DOM + all posters)
— slow once the watchlist grows. Now it pages like the library:

- /api/video/watchlist?kind=&search=&page=&limit= returns {items, pagination,
  counts}; query_watchlist() filters by title + slices (effective list is
  bounded, so compute-then-slice, not heavier UNION SQL).
- Page reworked to a single grid: Shows/People tabs each load their own page;
  debounced search box; Prev/Next pager; tab badges show totals from counts.
- Only a page of cards (and lazy posters) render at a time.

4 tests added (DB paginate/search + endpoint). 82 video tests green.
2026-06-16 09:40:41 -07:00
..
__init__.py Video watchlist (shows + people): DB + endpoints + button + page (v1, no scan yet) 2026-06-16 01:06:24 -07:00
calendar.py Video Calendar: week navigation + owned/missing filter 2026-06-15 19:32:57 -07:00
dashboard.py Video: scope library reads to the active server (Plex/Jellyfin don't commingle) 2026-06-15 18:45:28 -07:00
detail.py video: episode detail expand (guest stars + bigger still) 2026-06-15 13:20:15 -07:00
enrichment.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
libraries.py Video side: own server connection (Plex/Jellyfin), music-style picker, isolated 2026-06-15 16:42:22 -07:00
library.py Video: scope library reads to the active server (Plex/Jellyfin don't commingle) 2026-06-15 18:45:28 -07:00
poster.py Video Calendar: featured billboard, tactile cards, faster art 2026-06-15 19:25:45 -07:00
scan.py video Tools: match music Database Updater (stats, cancel, real progress) 2026-06-14 07:35:57 -07:00
search.py video: smart multi-layer back button + next-level search/person 2026-06-15 08:30:17 -07:00
watchlist.py Video watchlist page: server-paged + search bar (like the library) 2026-06-16 09:40:41 -07:00