From 688aa6581f3219ad9e942d1e8491e729bdd0d26e Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Tue, 23 Sep 2025 09:55:26 -0700 Subject: [PATCH] fixed multiple artist metadata update. style updates --- web_server.py | 25 ++++++++++++++++++++++++- webui/static/style.css | 4 ++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/web_server.py b/web_server.py index 5d909009..9f87371f 100644 --- a/web_server.py +++ b/web_server.py @@ -4835,7 +4835,25 @@ def _extract_spotify_metadata(context: dict, artist: dict, album_info: dict) -> else: metadata['title'] = original_search.get('title', '') print(f"🎵 Metadata: Using original title as fallback: '{metadata['title']}'") - metadata['artist'] = artist.get('name', '') + # Handle multiple artists from Spotify data + original_search = context.get("original_search_result", {}) + if 'artists' in original_search and isinstance(original_search['artists'], list) and len(original_search['artists']) > 0: + # Join all artists with semicolon separator (standard format) + all_artists = [] + for a in original_search['artists']: + if isinstance(a, dict) and 'name' in a: + all_artists.append(a['name']) + elif isinstance(a, str): + all_artists.append(a) + else: + all_artists.append(str(a)) + metadata['artist'] = ', '.join(all_artists) + print(f"🎵 Metadata: Using all artists: '{metadata['artist']}'") + else: + # Fallback to single artist + metadata['artist'] = artist.get('name', '') + print(f"🎵 Metadata: Using primary artist: '{metadata['artist']}'") + metadata['album_artist'] = artist.get('name', '') # Crucial for library organization if album_info.get('is_album'): @@ -7695,6 +7713,8 @@ def _attempt_download_with_candidates(task_id, candidates, track, batch_id=None) enhanced_payload['spotify_clean_title'] = track.name enhanced_payload['spotify_clean_album'] = track.album enhanced_payload['spotify_clean_artist'] = track.artists[0] if track.artists else enhanced_payload.get('artist', '') + # Preserve all artists for metadata tagging + enhanced_payload['artists'] = [{'name': artist} for artist in track.artists] if track.artists else [] print(f"✨ [Context] Using clean Spotify metadata - Album: '{track.album}', Title: '{track.name}'") # CRITICAL FIX: Get track_number from Spotify API like GUI does @@ -7726,6 +7746,9 @@ def _attempt_download_with_candidates(task_id, candidates, track, batch_id=None) enhanced_payload['spotify_clean_title'] = enhanced_payload.get('title', '') enhanced_payload['spotify_clean_album'] = enhanced_payload.get('album', '') enhanced_payload['spotify_clean_artist'] = enhanced_payload.get('artist', '') + # Preserve existing artists array if available, otherwise create from single artist + if 'artists' not in enhanced_payload and enhanced_payload.get('artist'): + enhanced_payload['artists'] = [{'name': enhanced_payload['artist']}] enhanced_payload['track_number'] = 1 # Fallback when no clean Spotify data is_album_context = False print(f"⚠️ [Context] Using fallback data - no clean Spotify metadata available, track_number=1") diff --git a/webui/static/style.css b/webui/static/style.css index a4fd4f46..07572319 100644 --- a/webui/static/style.css +++ b/webui/static/style.css @@ -5896,7 +5896,7 @@ body { @media (min-width: 1600px) { .download-missing-modal-content { width: 1500px; - height: 950px; + height: 90vh; } .download-missing-modal-hero { @@ -5919,7 +5919,7 @@ body { @media (max-width: 1599px) and (min-width: 1200px) { .download-missing-modal-content { width: 1200px; - height: 800px; + height: 90vh; } }