soulsync/api/video
BoulderBadgeDad 04fb19c80c video scan: three modes (full refresh / incremental / deep)
Mirrors the music model (full_refresh vs smart incremental, plus deep_scan):
- incremental: only recently-added items from the server (Plex addedAt:desc /
  Jellyfin DateCreated, capped); upsert; no prune.
- full: every item; upsert all (refresh metadata + add new); no prune.
- deep: every item; upsert; prune what the server no longer has (empty-scan
  safety preserved).
scanner.request_scan/scan_sync take mode; /api/video/scan/request reads
{mode} from the body (default full); adapters take incremental=. Tests cover
deep-prunes / full-doesn't / empty-deep-safety / incremental-requests-recent.
2026-06-13 23:28:57 -07:00
..
__init__.py video side: Library page (lists movies/shows, scan trigger) 2026-06-13 23:17:48 -07:00
dashboard.py video side: live dashboard via isolated /api/video blueprint 2026-06-13 22:40:48 -07:00
library.py video side: Library page (lists movies/shows, scan trigger) 2026-06-13 23:17:48 -07:00
scan.py video scan: three modes (full refresh / incremental / deep) 2026-06-13 23:28:57 -07:00