diff --git a/webui/static/helper.js b/webui/static/helper.js index 3be1a972..0eeaed04 100644 --- a/webui/static/helper.js +++ b/webui/static/helper.js @@ -3603,6 +3603,7 @@ const WHATS_NEW = { // --- April 19, 2026 --- { date: 'April 19, 2026' }, { title: 'Fix Wishlist Albums Cycle Stuck at 1 Concurrent', desc: 'Auto-wishlist processing during the "albums" cycle was limited to 1 concurrent download even with higher configured settings. The max_concurrent=1 restriction is only needed for Soulseek folder-based album grabs, not individual wishlist track downloads. Albums cycle now uses the configured concurrency like singles' }, + { title: 'Fix Wishlist Splitting Albums by Track Artist', desc: 'Adding a multi-artist album (like a soundtrack) to wishlist was creating separate entries per track artist instead of keeping all tracks under the album artist. Now uses the album-level artist context when available to keep tracks grouped correctly' }, { title: 'Fix Artist Search Case Sensitivity', desc: 'Artist search on the Artists page now normalizes all-lowercase queries to title case before hitting metadata APIs. Some APIs return fewer or no results for lowercase queries like "foreigner" vs "Foreigner"' }, { title: 'Lidarr Download Source Now Production-Ready', desc: 'Lidarr is now a fully functional download source with complete orchestrator integration. Downloads appear in the UI, status polling works, cancellation works, and cleanup on shutdown works. Error messages are now visible in the download list. Removed "(Development)" label' }, { title: 'Fix M3U Showing All Tracks as Missing', desc: 'M3U playlist files were generated before post-processing finished, so file paths pointed to download locations instead of final library paths. M3U is now regenerated from the backend after all post-processing completes, resolving real library paths from the DB' }, diff --git a/webui/static/script.js b/webui/static/script.js index 3418a9c9..b2e94add 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -20427,12 +20427,16 @@ async function addModalTracksToWishlist(playlistId) { trackAlbumType = 'album'; } - // Resolve artist per-track: prefer track's own artists over process-level + // Resolve artist: for album downloads, use the album-level artist to keep + // all tracks grouped under one artist in the wishlist. Per-track artists + // (like individual vocalists on a soundtrack) should NOT split the album. let trackArtist; - if (formattedArtists.length > 0 && formattedArtists[0].name && formattedArtists[0].name !== 'Unknown Artist') { - trackArtist = formattedArtists[0]; - } else if (processArtist && processArtist.name) { + if (processArtist && processArtist.name) { + // Album context exists — use album artist to keep tracks grouped trackArtist = processArtist; + } else if (formattedArtists.length > 0 && formattedArtists[0].name && formattedArtists[0].name !== 'Unknown Artist') { + // No album context (playlist/single) — use track's own artist + trackArtist = formattedArtists[0]; } else { trackArtist = { name: 'Unknown Artist', id: null }; }