soulsync/webui/static/video
BoulderBadgeDad d7ab68c067 video side: Library page (lists movies/shows, scan trigger)
- GET /api/video/library -> {movies, shows} from video.db (VideoDatabase.
  list_movies/list_shows; shows carry episode_count + owned_count).
- Library page (video-library subpage, isolated video-library.js): tabbed
  Movies/Shows grid of poster cards, count, empty-state. A 'Scan Library'
  button POSTs /api/video/scan/request then polls /api/video/scan/status,
  showing live phase/counts, and refreshes the grid when done.
- Reuses the music dashboard-header chrome (icon title, sweep hidden) + the
  watchlist-button styling for the scan button; video-card grid styles added.
- All data-attr wired (no inline onclick); module is an isolated IIFE that
  listens for soulsync:video-page-shown. 105 tests green.

Now: video.db -> scanner -> /api/video -> live dashboard + Library page, all
isolated from music. Scanner adapters await live Plex/Jellyfin validation.
2026-06-13 23:17:48 -07:00
..
video-dashboard.js video side: live dashboard via isolated /api/video blueprint 2026-06-13 22:40:48 -07:00
video-library.js video side: Library page (lists movies/shows, scan trigger) 2026-06-13 23:17:48 -07:00
video-side.css video side: Library page (lists movies/shows, scan trigger) 2026-06-13 23:17:48 -07:00
video-side.js video side: build the Dashboard page (mirrors music, isolated data) 2026-06-13 19:49:09 -07:00