From 7fd29c4f777bfa31504a27246a08365c7627b28a Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Tue, 17 Mar 2026 07:53:59 -0700 Subject: [PATCH] Fix confirm modals hidden behind other modals and wishlist showing Unknown Album MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump confirm dialog z-index to 200000 (both #confirm-modal-overlay and .confirmation-modal-overlay) so they always appear above all other modals - Normalize track data in _run_sync_task before storing in original_tracks_map: album as dict {'name': ...} and artists as [{'name': ...}] — fixes all source converters (Deezer, YouTube, Tidal, Spotify Public, ListenBrainz, Beatport) whose fallback paths stored plain strings, causing the wishlist UI to show "Unknown Album" for every synced track --- web_server.py | 11 +++++++++++ webui/static/style.css | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/web_server.py b/web_server.py index f610f445..9161dab0 100644 --- a/web_server.py +++ b/web_server.py @@ -29035,10 +29035,21 @@ def _run_sync_task(playlist_id, playlist_name, tracks_json, automation_id=None): print(f"🔄 Converting JSON tracks to SpotifyTrack objects...") # Store original track data with full album objects (for wishlist with cover art) + # Normalize formats: album must be dict {'name': ...}, artists must be [{'name': ...}] original_tracks_map = {} for t in tracks_json: track_id = t.get('id', '') if track_id: + # Normalize album to dict format + raw_album = t.get('album', '') + if isinstance(raw_album, str): + t['album'] = {'name': raw_album} if raw_album else {'name': 'Unknown Album'} + elif not isinstance(raw_album, dict): + t['album'] = {'name': str(raw_album) if raw_album else 'Unknown Album'} + # Normalize artists to list of dicts + raw_artists = t.get('artists', []) + if raw_artists and isinstance(raw_artists[0], str): + t['artists'] = [{'name': a} for a in raw_artists] original_tracks_map[track_id] = t tracks = [] diff --git a/webui/static/style.css b/webui/static/style.css index 77ddc0c8..cd25c0d2 100644 --- a/webui/static/style.css +++ b/webui/static/style.css @@ -4337,7 +4337,7 @@ body { /* Confirm Dialog Modal */ /* Confirm dialog must sit above all other modals (playlist, download, etc.) */ #confirm-modal-overlay { - z-index: 100000; + z-index: 200000; } .confirm-modal { @@ -13549,7 +13549,7 @@ body { height: 100vh; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(8px); - z-index: 12000; + z-index: 200000; display: flex; align-items: center; justify-content: center;