Commit graph

5 commits

Author SHA1 Message Date
JohnBaumb
6ce90ba10d fix: seasonal service constructor, source-aware track IDs, deep-link timing
- Use get_seasonal_discovery_service(spotify_client, database) instead
  of broken SeasonalDiscoveryService(database) in both auto-sync and
  track_count paths
- Replace nonexistent get_current_season_playlist() with working
  get_current_season() + get_curated_seasonal_playlist() pattern
- Use generic track_id field for personalized playlist auto-sync
  instead of hardcoded spotify_track_id (fixes Deezer/iTunes)
- Replace fixed 400ms setTimeout in _applySyncTabAction with polling
  loop that waits for target element (up to 4s)
2026-04-27 10:11:06 -07:00
JohnBaumb
450e246b77 discover: replace Force DL toggle with Any Quality placeholder (Phase 0)
Replace the misleading Force DL toggle on the Sync page Discover tab with
a disabled Any Quality toggle. Stop sending force_download_all from
discover sync so discover playlists run ownership analysis instead of
blindly re-downloading owned tracks.

Adds PLAN-download-quality-flags.md describing the full refactor plan.
2026-04-24 00:46:46 -07:00
JohnBaumb
6bbc6b3c17 Add sync tab deep-linking, redirect Discover sync to sync tab, add Force Download toggle 2026-04-24 00:46:45 -07:00
JohnBaumb
23b0214712 feat: add SoulSync Discover sync tab with ListenBrainz, progress tracking, and Navidrome push
Adds a full Discover Sync tab to the Sync page with:
- Core UI scaffolding, playlist modal, empty-state handling
- ListenBrainz playlist integration with auto-update toggle persistence
- Sync progress tracking with matched/total counts on cards
- Navidrome playlist push on batch completion (V1 and V2 paths)
- Active download state display with polling resume on page reload
- Stuck-download detection for downloading and catch-all states
- Serialized sync queue to prevent concurrent backend contention
- Source badges, compact card layout, URL fixes
2026-04-24 00:46:23 -07:00
JohnBaumb
a66c4d06e1 Split monolithic script.js (78K lines) into 17 domain modules
Extracts the single 77,957-line script.js into focused modules:

  core.js            (874)   - Global state, confirm dialog, websocket, constants
  init.js            (2358)  - Initialization, personal settings, navigation
  media-player.js    (2398)  - Media player, audio, visualizer, radio
  settings.js        (3657)  - Settings page, quality profiles, API keys, auth
  search.js          (1542)  - Search functionality, page data loading
  sync-spotify.js    (2538)  - Spotify sync, YouTube backend, hero section
  downloads.js       (6398)  - Wing It, batched polling, cancel, notifications
  wishlist-tools.js  (7234)  - Wishlist, matched downloads, tools, retag
  sync-services.js   (9076)  - Tidal, Deezer, Beatport, YouTube, ListenBrainz sync
  artists.js         (4610)  - Artists page, artist downloads
  api-monitor.js     (3798)  - API rate monitor gauges
  library.js         (6652)  - Library, artist detail, enhanced management
  beatport-ui.js     (3902)  - Beatport sliders, genre browser
  discover.js        (8920)  - Discover page and all sub-sections
  enrichment.js      (3551)  - All enrichment workers, library repair
  stats-automations.js (7575) - Stats, automations, issues, import
  pages-extra.js     (2874)  - Playlist explorer, server playlists, active downloads

Load order: core.js first (globals), init.js last (DOMContentLoaded).
All other modules define functions and load in any order.
No functional changes - pure extraction along existing section boundaries.
2026-04-21 23:52:30 -07:00