soulsync/core
Broque Thomas 58d8e830c6 Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes
YOUR ARTISTS (major feature):
- Aggregates liked/followed artists from Spotify, Tidal, Last.fm, Deezer
- Matches to ALL metadata sources (Spotify, iTunes, Deezer, Discogs)
- DB-first matching: library → watchlist → cache → API search (capped)
- Image backfill from Spotify API for artists missing artwork
- Carousel on Discover page with 20 random matched artists
- View All modal with search, source filters, sort, pagination
- Artist info modal: hero image, matched source badges, genres, bio,
  listeners/plays from Last.fm, watchlist toggle, view discography
- Auto-refresh with loading state on first load, polls until ready
- Deduplication by normalized name across all services

DEEZER OAUTH:
- Full OAuth flow: /auth/deezer + /deezer/callback
- Settings UI on Connections tab (App ID, Secret, Redirect URI)
- Token stored encrypted, auto-included in API calls
- get_user_favorite_artists() for liked artists pool

SERVICE CLIENTS:
- Spotify: added user-follow-read scope + get_followed_artists()
- Tidal: get_favorite_artists() with V2/V1 fallback
- Last.fm: get_authenticated_username() + get_user_top_artists()

FAILED MB LOOKUPS MANAGER:
- Manage button on Cache Health modal
- Browse/filter/search all failed MusicBrainz lookups
- Search MusicBrainz directly and manually match entries
- Optimized cache health queries (11 → 4 consolidated)
- Dashboard cache stats now poll every 15s

EXPLORER IMPROVEMENTS:
- Discover button on undiscovered playlist cards
- Status badges: explored/wishlisted/downloaded/ready
- Auto-refresh during discovery via polling
- Redesigned controls: prominent Explore button, icons

BUG FIXES:
- Fix album artist splitting on collab albums (collab mode fed
  album-level artists instead of per-track)
- Fix cover.jpg not moving during library reorganize (post-pass sweep)
- Fix cover.jpg missing when album detection takes fallback path
- Fix wishlist auto-processing toast spam (was firing every 2s)
- Fix media player collapsing on short viewports
- Fix watchlist rate limiting (~90% fewer API calls)
- Configurable spotify.min_api_interval setting
- Better Retry-After header extraction
- Encrypt Last.fm and Discogs credentials at rest
- Add $discnum template variable (unpadded disc number)
2026-04-03 22:39:05 -07:00
..
repair_jobs Add metadata cache maintenance and health monitoring 2026-03-30 07:40:20 -07:00
acoustid_client.py Helper V2 complete + enrichment worker fixes 2026-03-26 12:20:58 -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 Add Picard-style MB release preflight for album downloads 2026-03-23 12:42:29 -07:00
api_call_tracker.py Add Discogs to Settings connections and rate monitor 2026-04-02 16:25:23 -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 Fix enrichment overwriting manual match status (#221) 2026-03-30 11:07:48 -07:00
automation_engine.py Add webhook POST then-action for automation engine 2026-04-02 12:22:07 -07:00
database_update_worker.py Fix deep scan skipping file path updates for existing tracks 2026-03-18 13:03:01 -07:00
deezer_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07:00
deezer_download_client.py Fix Deezer download crash: config_manager not in scope 2026-03-24 13:12:23 -07:00
deezer_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07: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 Fix Discogs cache — add field extractor, wire worker caching, browser UI 2026-04-02 19:47:36 -07:00
download_orchestrator.py Harden download orchestrator and surface init failures in debug info 2026-04-02 11:40:11 -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 Fix enrichment overwriting manual match status (#221) 2026-03-30 11:07:48 -07: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 Use nonces and drain interleaved stats in Hydrabase 2026-02-24 19:16:14 -08:00
itunes_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
itunes_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
jellyfin_client.py Add Listening Stats page with media server play data integration 2026-03-22 13:18:14 -07:00
lastfm_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07:00
lastfm_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
listenbrainz_client.py Add scrobbling to Last.fm/ListenBrainz + update What's New 2026-03-22 14:38:53 -07:00
listenbrainz_manager.py Fix per-profile ListenBrainz playlist cache scoping and stale data recovery 2026-03-14 21:11:59 -07:00
listening_stats_worker.py Increase stats page top artists/albums/tracks from 10 to 25 2026-03-22 16:39:53 -07:00
lyrics_client.py Fix .lrc files written without timestamps for plain lyrics 2026-03-30 13:28:41 -07:00
matching_engine.py Fix Japanese/CJK text mangled in Soulseek search queries 2026-03-30 18:28:25 -07:00
media_scan_manager.py Fix automated scans for non-Plex servers & incremental scan performance 2026-03-12 11:17:32 -07:00
metadata_cache.py Add Failed MB Lookups manager + optimize cache performance 2026-04-03 11:38:50 -07:00
metadata_service.py Complete Hydrabase as selectable fallback metadata source 2026-03-20 14:18:10 -07: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 Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
navidrome_client.py Increase Navidrome API timeout from 10s to 60s 2026-03-31 12:44:40 -07:00
personalized_playlists.py Add discovery artist blacklist — block artists from all discovery playlists 2026-04-01 23:35:56 -07:00
plex_client.py Add Listening Stats page with media server play data integration 2026-03-22 13:18:14 -07:00
plex_scan_manager.py fix logging issue 2025-08-09 13:17:11 -07:00
qobuz_client.py Add API Rate Monitor dashboard with real-time speedometer gauges 2026-04-02 10:46:43 -07:00
qobuz_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
repair_worker.py Fix library maintenance path fixes failing silently (#207) 2026-03-29 16:25:36 -07:00
seasonal_discovery.py Fix seasonal playlists not appearing when Deezer is active source 2026-03-18 10:28:54 -07:00
soulid_worker.py Rebuild artist SoulID: track-verified canonical ID from Deezer + iTunes 2026-03-23 18:34:36 -07:00
soulseek_client.py Enforce FLAC bit depth preference and prioritize audio quality in sorting 2026-03-25 15:59:22 -07:00
spotify_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07: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 Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
tag_writer.py Fix OPUS files losing all metadata during import/post-processing 2026-03-28 09:37:12 -07:00
tidal_client.py Your Artists on Discover + Deezer OAuth + MB Lookups Manager + Explorer improvements + bug fixes 2026-04-03 22:39:05 -07:00
tidal_download_client.py Add per-source quality fallback toggle for streaming downloads (#187) 2026-03-24 11:42:47 -07:00
tidal_worker.py Apply manual match protection to all enrichment workers (#226) 2026-03-31 08:24:30 -07:00
watchlist_scanner.py Reduce watchlist Spotify API calls ~90% + configurable rate interval 2026-04-03 10:24:44 -07:00
web_scan_manager.py Fix automated scans for non-Plex servers & incremental scan performance 2026-03-12 11:17:32 -07:00
wishlist_service.py Fix wishlisted tracks showing 'Unknown Album' with no cover art 2026-03-18 14:23:53 -07:00
youtube_client.py Strip '- Topic' suffix from YouTube auto-generated channel names (#231) 2026-03-31 21:06:05 -07:00