soulsync/core
Broque Thomas 43dedeb2ee Add SoulSync standalone library — no media server required
New 'soulsync' media server option manages the library directly from
the filesystem, bypassing Plex/Jellyfin/Navidrome entirely.

Two paths populate the library:
1. Downloads/imports write artist/album/track to DB immediately at
   post-processing completion, with pre-populated enrichment IDs
   (Spotify, Deezer, MusicBrainz) so workers skip re-discovery
2. soulsync_client.py scans Transfer folder for incremental/deep scan
   via DatabaseUpdateWorker (same interface as server clients)

New files:
- core/soulsync_client.py: filesystem scanner implementing the same
  interface as Plex/Jellyfin/Navidrome clients. Recursive folder scan,
  Mutagen tag reading, artist/album/track grouping, hash-based stable
  IDs, incremental scan by modification time.

Modified:
- web_server.py: _record_soulsync_library_entry() at post-processing
  completion, client init, scan endpoint integration, status endpoint,
  web_scan_manager media_clients dict, test-connection cache updates
- config/settings.py: accept 'soulsync' in set_active_media_server,
  get_active_media_server_config, is_configured, validate_config
- core/web_scan_manager.py: add soulsync to server_client_map

Dedup: checks existing artist/album by name across ALL server sources
before inserting to avoid duplicates. Enrichment IDs only written when
the column is empty (won't overwrite existing data).
2026-04-17 20:34:55 -07:00
..
repair_jobs Fix track ID generation in repair flows 2026-04-17 19:26:08 +03:00
acoustid_client.py Fix AcoustID test connection falsely failing for valid API keys 2026-04-13 09:37:50 -07:00
acoustid_verification.py Skip AcoustID verification for high-confidence cross-language matches 2026-03-29 20:04:41 -07:00
album_consistency.py Picard-style release preference scoring for MusicBrainz matching 2026-04-16 13:29:04 -07:00
api_call_tracker.py Persist API call history, record rate limit events, fix Spotify re-auth issues 2026-04-05 12:36:58 -07:00
audiodb_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
audiodb_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
auto_import_worker.py Fix auto-import rescan race condition, coverage penalty, and UI 2026-04-17 19:37:42 -07:00
automation_engine.py Add Run Script action to automation engine 2026-04-09 18:20:29 -07:00
database_update_worker.py More dead code removal after desktop app removal 2026-04-17 20:06:24 +03:00
deezer_client.py Fix playlist cover art not syncing to Plex/Jellyfin from Deezer and other sources 2026-04-15 10:25:38 -07:00
deezer_download_client.py Add Your Albums — multi-source liked albums pool (Spotify, Tidal, Deezer) 2026-04-13 23:02:37 -07:00
deezer_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
discogs_client.py Fix Discogs cache — add field extractor, wire worker caching, browser UI 2026-04-02 19:47:36 -07:00
discogs_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
download_orchestrator.py Add first-run setup wizard and fix download path reloading 2026-04-11 22:45:16 -07:00
genius_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
genius_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
hifi_client.py Add per-source quality fallback toggle for streaming downloads (#187) 2026-03-24 11:42:47 -07:00
hydrabase_client.py Add missing _get_artist_image_from_albums to HydrabaseClient 2026-03-23 17:54:21 -07:00
hydrabase_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
itunes_client.py Upgrade artwork to highest available resolution for Spotify and iTunes 2026-04-13 15:04:37 -07:00
itunes_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
jellyfin_client.py Fix Jellyfin playlist track fetch truncating at default API limit 2026-04-13 15:17:52 -07:00
lastfm_client.py Add Last.fm Track Radio to Discover page 2026-04-14 23:41:36 -07:00
lastfm_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
lidarr_download_client.py Add Lidarr as 7th download source and validate music video path 2026-04-11 07:59:12 -07:00
listenbrainz_client.py Remove emojis from all Python log and print statements 2026-04-11 21:11:02 -07:00
listenbrainz_manager.py Add Last.fm Track Radio to Discover page 2026-04-14 23:41:36 -07:00
listening_stats_worker.py Tighten up teardown logic 2026-04-12 18:13:27 +03:00
lyrics_client.py Remove emojis from all Python log and print statements 2026-04-11 21:11:02 -07:00
matching_engine.py Reject junk artist Soulseek results and cancel downloads on wishlist clear 2026-04-17 12:24:50 -07:00
metadata_cache.py Reject tracks with Unknown Artist from metadata cache 2026-04-12 09:27:17 -07:00
metadata_service.py Reduce discovery fan-out and pagination 2026-04-16 20:59:26 +03:00
musicbrainz_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
musicbrainz_service.py Add metadata cache maintenance and health monitoring 2026-03-30 07:40:20 -07:00
musicbrainz_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
navidrome_client.py Remove emojis from all Python log and print statements 2026-04-11 21:11:02 -07:00
personalized_playlists.py Replace all legacy metadata_service imports with canonical functions 2026-04-10 12:52:36 -07:00
plex_client.py Fix playlist cover art not syncing to Plex/Jellyfin from Deezer and other sources 2026-04-15 10:25:38 -07:00
qobuz_client.py Reject Qobuz 30-second sample/preview downloads 2026-04-15 20:41:48 -07:00
qobuz_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
repair_worker.py Fix track ID generation in repair flows 2026-04-17 19:26:08 +03:00
replaygain.py Add ReplayGain analysis and tagging support 2026-04-14 19:09:25 -07:00
seasonal_discovery.py Remove emojis from all Python log and print statements 2026-04-11 21:11:02 -07:00
soulid_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
soulseek_client.py Add first-run setup wizard and fix download path reloading 2026-04-11 22:45:16 -07:00
soulsync_client.py Add SoulSync standalone library — no media server required 2026-04-17 20:34:55 -07:00
spotify_client.py Use cache before Spotify auth checks 2026-04-16 09:54:00 +03:00
spotify_public_scraper.py Add Spotify Link tab for public playlist/album scraping without API credentials 2026-03-15 21:25:05 -07:00
spotify_worker.py Fix Spotify enrichment worker infinite loop on pre-matched artists 2026-04-15 20:37:20 -07:00
tag_writer.py Add ReplayGain analysis and tagging support 2026-04-14 19:09:25 -07:00
tidal_client.py Fix playlist cover art not syncing to Plex/Jellyfin from Deezer and other sources 2026-04-15 10:25:38 -07:00
tidal_download_client.py Improve Tidal download failure diagnostics and error messaging 2026-04-14 14:07:50 -07:00
tidal_worker.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
watchlist_scanner.py Clarify comments 2026-04-17 10:02:00 +03:00
web_scan_manager.py Add SoulSync standalone library — no media server required 2026-04-17 20:34:55 -07:00
wishlist_service.py Fix wishlisted tracks showing 'Unknown Album' with no cover art 2026-03-18 14:23:53 -07:00
worker_utils.py Improve graceful shutdown and rollback safety 2026-04-12 15:17:18 +03:00
youtube_client.py Add first-run setup wizard and fix download path reloading 2026-04-11 22:45:16 -07:00