soulsync/webui/static/video
BoulderBadgeDad 01c101d24a Video: live per-episode download tracking + auto-wishlist today's airings
Two Sonarr-parity features.

1) Per-episode live tracking. "Grab season" was headless (only a button label
   changed); episode rows had a status span that was never populated. Now every
   episode ROW shows its own live state — Searching → Downloading % → Downloaded
   / Failed — via epTrack() polling /downloads/status?id, matching the inline
   movie tracker. Grab season lights all target rows at once; manual + per-source
   auto grabs also light their row; reopening the modal resumes tracking in-flight
   episodes (resumeEpisodeTracking via /downloads/active + search_ctx match).
   Season batch grabs through the same payload as a manual grab (_pickAndGrab →
   sendGrab(buildGrabPayload)).

2) Auto-wishlist airing episodes. New daily automation (video_add_airing_episodes):
   reads the calendar for episodes airing TODAY for followed shows, skips owned
   ones, adds the rest to the wishlist (idempotent). Handler uses injected seams
   (calendar read + wishlist write) so it's unit-tested without a DB/server.
   Registered + action block + seeded as a daily system automation (01:00),
   owned_by=video.
2026-06-21 02:27:08 -07:00
..
video-automations.js video automations: working builder + New Automation button (own builder, not music's) 2026-06-19 23:02:52 -07:00
video-calendar.js video calendar: watchlist-driven by default + an 'All library' toggle 2026-06-20 14:07:40 -07:00
video-dashboard.js video dashboard: live system stats (memory + uptime) from the shared endpoint 2026-06-18 21:24:59 -07:00
video-detail.js video downloads: header 'Auto' picks ONE best across all sources; fix YT playlist leak 2026-06-20 10:48:55 -07:00
video-discover.js Discover: fix grid pagination + session cache + responsive pass 2026-06-16 15:44:36 -07:00
video-download-view.js Video: live per-episode download tracking + auto-wishlist today's airings 2026-06-21 02:27:08 -07:00
video-downloads-page.js video Downloads page: stop polling when off-page (incl. music side); 2s cadence 2026-06-19 17:28:45 -07:00
video-enrichment-manager.js video enrichment: add a GLOBAL 'Retry all failed' (all workers, all kinds) 2026-06-20 14:15:18 -07:00
video-enrichment.js video enrichment: keyless workers read 'Disabled' (not 'Not configured') when off 2026-06-18 23:29:22 -07:00
video-get-modal.js video downloads: live tracking on the grabbed result + movie detail, redesigned cards 2026-06-20 09:41:05 -07:00
video-import.js Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
video-library.js Video: airing shows get BOTH the watchlist eye AND the get/download button 2026-06-16 11:07:53 -07:00
video-person.js video: add 'Add to Watchlist' button to person detail pages 2026-06-20 13:50:34 -07:00
video-scan.js video Tools: rehydrate scan state on page refresh (parity with music) 2026-06-14 07:59:44 -07:00
video-search.js Playlist search result: standard 'Add to Watchlist' button (not 'Follow') 2026-06-17 20:42:30 -07:00
video-settings.js Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
video-side.css Video: live per-episode download tracking + auto-wishlist today's airings 2026-06-21 02:27:08 -07:00
video-side.js Video downloads: best-in-class post-process pipeline 2026-06-21 01:44:35 -07:00
video-watchlist-btn.js Watchlist eye: confirm before removing (the standard yes/no dialog) 2026-06-16 09:29:31 -07:00
video-watchlist.js Watchlist cards: show the channel/playlist video count, not '0 videos' 2026-06-17 21:13:33 -07:00
video-wishlist.js video wishlist: add a 'Clear all' button (movies / TV / YouTube) 2026-06-20 16:42:57 -07:00
video-worker-orbs.js video enrichment: show the 5 new workers in the dashboard-header orbs too 2026-06-18 23:22:32 -07:00
video-youtube.js Watchlist cards: show the channel/playlist video count, not '0 videos' 2026-06-17 21:13:33 -07:00