soulsync/webui/static
BoulderBadgeDad 8ee59c7453 Blocklist Phase 2b: gate manual downloads with a "download anyway?" confirm
Closes the last acquisition gap — user-initiated downloads. A blocklist isn't
a censor, so search + discography stay fully visible; instead the download
ACTION is gated, visibly and overridably:

- Download modal (start-missing-process): an up-front check — if the WHOLE
  album or artist being downloaded is blocklisted, return 409 {blocked:true}
  with the entity, before starting a batch. The modal shows "X is blocklisted
  — download anyway?" and re-POSTs with ignore_blocklist:true on confirm
  (threaded onto the batch so the Phase 2a per-track filter skips it).
  Scattered single-track bans still fall through to the 2a filter quietly.
- Manual /api/download (search-result download): source-file-centric, so it
  matches the blocked ARTIST by name; same 409 + confirm + override. search.js
  now sends artist/title so the guard has something to match.
- Precedence confirmed: force-download overrides "already owned", NOT a ban
  (the 2a filter runs on the force-expanded missing list).

Frontend: shared confirmBlockedDownload() helper; modal + search callers
handle the blocked response and retry with the override.

Tests: manual download blocked-by-name / unrelated-allowed / override-passes,
and the modal up-front 409 for a blocked album. 8 blocklist API tests pass.
2026-06-07 16:15:23 -07:00
..
docs
vendor
amazon.svg
api-monitor.js Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page 2026-06-07 15:25:52 -07:00
artists.png
audiodb.png
auto-sync.js Fix organize-by-playlist downloads: library entries, wishlist, and stale Spotify cache 2026-06-03 10:26:32 +02:00
automation.png
basic-search-v2.css
beatport-ui.js
blocklist.js Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page 2026-06-07 15:25:52 -07:00
core.js Auto-Sync tile: light for the WHOLE pipeline, including scheduled auto-sync 2026-06-06 16:32:10 -07:00
dashboard.png
discover-section-controller.js
discover.js Discover: promote recommendations to a first-class section + show the 'why' 2026-06-03 18:28:19 -07:00
discover.png
docs-images-needed.md
docs.js
downloads.js Blocklist Phase 2b: gate manual downloads with a "download anyway?" confirm 2026-06-07 16:15:23 -07:00
enrichment-manager.js Show "Running (Spotify Free)" instead of "rate limited" while the worker bridges 2026-06-05 22:08:07 -07:00
enrichment.js Cover Art Filler: fix album art or artist art independently (Pache711) 2026-06-07 13:24:46 -07:00
explorer.png
favicon.png
help.png
helper.js Changelog/PR: note the Spotify Free budget→free bridge in the 2.6.7 entry 2026-06-06 08:52:54 -07:00
hydrabase.png
import.png
init.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
library.js #809 Navidrome playback: stream via the server's API when the library isn't mounted on disk 2026-06-07 13:52:14 -07:00
library.png
manifest.json
media-player.js #809 review follow-up: crossfade preload also streams un-mounted Navidrome tracks 2026-06-07 13:55:58 -07:00
mobile.css Mobile: notification panel fits the screen (override inline JS positioning) 2026-06-04 20:50:33 -07:00
origin-history.js Download Origins: see (and delete) exactly what watchlist + playlist syncs downloaded 2026-06-07 00:15:31 -07:00
pages-extra.js Merge pull request #793 from nick2000713/perf/scroll-render-and-pm-compat 2026-06-04 16:58:27 -07:00
particles.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
placeholder-album.png
pwa-icon-192.png
pwa-icon-512.png
search.js Blocklist Phase 2b: gate manual downloads with a "download anyway?" confirm 2026-06-07 16:15:23 -07:00
search.png
settings.js Torrents: surface the stall settings as UI controls (noldevin) 2026-06-07 12:52:57 -07:00
settings.png
setup-wizard.css
setup-wizard.js
shared-helpers.js #797: stop AcoustID quarantining correct non-English-artist downloads 2026-06-05 16:02:01 -07:00
shell-bridge.js perf(webui): faster navigation, smoother scroll, no spurious settings save 2026-06-04 02:40:27 +02:00
stats-automations.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
style.css Blocklist Phase 1 (backfill + API + modal): the Blocklist button on the watchlist page 2026-06-07 15:25:52 -07:00
sw.js
sync-lastfm.js
sync-listenbrainz.js
sync-services.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
sync-soulsync-discovery.js
sync-spotify.js Fix standalone mirrored playlist sync and post-sync downloads. 2026-06-04 00:24:00 +02:00
sync.png
track-detail.js
trans.png
trans2.png
whisoul.png
wishlist-tools.js Add "Import IDs from File Tags" backfill — gap-fill provider IDs from embedded tags 2026-06-05 17:52:29 -07:00
worker-orbs.js Dashboard animations: GPU pass — same visuals, compositor-only where possible 2026-06-06 16:05:05 -07:00