- New discovery_artist_blacklist table with NOCASE name matching
- Filter blacklisted artists from all 6 discovery pool queries, hero
endpoint, and recent releases via SQL subquery and Python set check
- Name-based filtering means one block covers all sources (Spotify/iTunes/Deezer)
- Hover any discovery track row → ✕ button to quick-block that artist
- 🚫 button on Discover hero opens management modal with search-to-add
(powered by enhanced search) and list of blocked artists with unblock
- CRUD API: GET/POST/DELETE /api/discover/artist-blacklist
- Updated changelogs
{title:'Global Search Bar',desc:'Spotlight-style search from any page — press / or Ctrl+K. Full enhanced search with source tabs, library badges, and playback'},
{title:'Block Artists from Discovery',desc:'Block artists you never want to see in discovery playlists — hover any track and click ✕, or use the 🚫 button on the Discover hero to search and manage blocked artists',page:'discover'},
{title:'MusicBrainz Cache in Browser',desc:'MusicBrainz cache now visible in Cache Browser — browse, clear all, or clear failed lookups only. Cache Health shows MB alongside other sources'},
{title:'Wing It Mode',desc:'Download or sync playlists without metadata discovery — uses raw track names directly. Great for obscure tracks not on Spotify/iTunes'},
{title:'Redesigned Notifications',desc:'Compact pill toasts, notification bell with unread badge, history panel with last 50 notifications and Learn More links'},
<buttonclass="track-compact-block"onclick="event.stopPropagation(); blockDiscoveryArtist('${artistEsc}')"title="Block ${artistEsc} from discovery">✕</button>
</div>
`;
});
@ -53955,6 +53958,161 @@ function renderCompactPlaylist(container, tracks) {
container.innerHTML=html;
}
asyncfunctionblockDiscoveryArtist(artistName){
if(!confirm(`Block "${artistName}" from all discovery playlists?`))return;