soulsync/core/automation/handlers
BoulderBadgeDad 8eadadc1ae
Some checks failed
Compile the app and run tests / sanity-check (push) Has been cancelled
youtube retention: auto-clean old channel episodes (per-channel keep window)
new opt-in feature — default keeps everything, so nothing changes unless a channel sets it.

- history got smarter: youtube rows now carry channel_id + published_at (mined from
  search_ctx) + a pruned_at marker. new queries: youtube_channels_with_downloads,
  youtube_channel_episodes, mark_download_pruned.
- core/video/retention.py (pure): parse_retention + episodes_to_prune — age by UPLOAD
  date (published_at, filename fallback); 'count_N' keeps newest N, 'days_N' keeps last N
  days; undated episodes never pruned.
- handler auto_video_clean_youtube_episodes: for each channel with a policy, delete the
  out-of-window video + its -thumb/.nfo sidecars (only the exact recorded dest_path, never
  walks folders), then mark the history row pruned — KEPT so the scan never re-downloads it.
- 'Keep' dropdown in each channel's cog modal (Everything / Last 30 episodes / Last 3 / 6
  months); playlists excluded. seeded daily automation + register/block/label/icon/sort.
pure math + handler (i/o injected) + the prune-keeps-dedup DB contract all tested.
2026-06-26 17:24:59 -07:00
..
__init__.py Personalized playlist pipeline: auto-sync discover-page playlists 2026-05-15 18:41:08 -07:00
_pipeline_shared.py Fix organize-by-playlist downloads: library entries, wishlist, and stale Spotify cache 2026-06-03 10:26:32 +02:00
database_update.py Fix: deep-scan / DB-update automation falsely errors on large libraries (stall-based timeout) 2026-06-01 16:30:28 -07:00
discover_playlist.py Extract automation handlers (2/N): playlist lifecycle group 2026-05-15 10:47:46 -07:00
download_cleanup.py Extract automation handlers (3/3): maintenance + misc, finishing the lift 2026-05-15 11:24:35 -07:00
duplicate_cleaner.py Extract automation handlers (3/3): maintenance + misc, finishing the lift 2026-05-15 11:24:35 -07:00
maintenance.py Video automations: Auto-Backup Database (video DB) — custom twin (phase 5) 2026-06-21 23:41:19 -07:00
personalized_pipeline.py Preserve personalized playlist metadata for wishlist 2026-05-15 21:50:32 -07:00
playlist_pipeline.py Move mirrored playlist pipeline into playlist domain 2026-05-24 19:44:13 -07:00
process_wishlist.py Extract automation handlers (1/N): infrastructure + 3 simple handlers 2026-05-15 10:25:41 -07:00
progress_callbacks.py Extract automation handlers (4/3 — finish): progress callbacks + scan-completion emitter 2026-05-15 11:59:32 -07:00
quality_scanner.py Remove old auto-acting Quality Scanner tool (replaced by Quality Upgrade Finder job) 2026-06-13 12:14:45 -07:00
refresh_mirrored.py Playlists: mirror-update trigger prunes removed tracks (the other half) 2026-06-12 15:49:13 -07:00
registration.py youtube retention: auto-clean old channel episodes (per-channel keep window) 2026-06-26 17:24:59 -07:00
run_script.py Extract automation handlers (3/3): maintenance + misc, finishing the lift 2026-05-15 11:24:35 -07:00
scan_library.py Extract automation handlers (1/N): infrastructure + 3 simple handlers 2026-05-15 10:25:41 -07:00
scan_watchlist.py Extract automation handlers (1/N): infrastructure + 3 simple handlers 2026-05-15 10:25:41 -07:00
search_and_download.py Extract automation handlers (3/3): maintenance + misc, finishing the lift 2026-05-15 11:24:35 -07:00
sync_playlist.py Mirrored playlists: custom name alias (overrides display + sync name, survives upstream refresh) — card rename button like the source-ref editor 2026-06-13 00:23:56 -07:00
video_auto_wishlist_airing.py Lint: silence S110 on two intentional best-effort swallows in video handlers (pre-existing) 2026-06-21 23:35:05 -07:00
video_clean_youtube.py youtube retention: auto-clean old channel episodes (per-channel keep window) 2026-06-26 17:24:59 -07:00
video_process_wishlist.py downloads drawer: episode detail + youtube treatment + availability line 2026-06-26 13:06:44 -07:00
video_process_youtube_wishlist.py downloads: youtube 'open' goes to the in-app channel page, not youtube.com 2026-06-26 13:24:41 -07:00
video_refresh_airing_schedules.py downloads drawer: rich TMDB detail + fix cast photos + stop OMDb quota burn 2026-06-26 12:49:11 -07:00
video_scan_library.py Lint: silence S110 on two intentional best-effort swallows in video handlers (pre-existing) 2026-06-21 23:35:05 -07:00
video_scan_watchlist_channels.py youtube scans: dedup against downloaded videos so they don't re-download 2026-06-26 09:34:58 -07:00
video_scan_watchlist_people.py video automations: watchlist scans for people + channels 2026-06-25 19:07:06 -07:00
video_scan_watchlist_playlists.py youtube scans: dedup against downloaded videos so they don't re-download 2026-06-26 09:34:58 -07:00