diff --git a/webui/static/script.js b/webui/static/script.js index e360ad0c..6bca2e39 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -19429,6 +19429,8 @@ function openDiscoveryFixModal(platform, identifier, trackIndex) { state = youtubePlaylistStates[identifier]; // Deezer uses YouTube state infrastructure } else if (platform === 'mirrored') { state = youtubePlaylistStates[identifier]; // Mirrored playlists use YouTube state infrastructure + } else if (platform === 'spotify_public') { + state = youtubePlaylistStates[identifier]; // Spotify public playlists use YouTube state infrastructure } // Support both camelCase and snake_case for discovery results @@ -27121,7 +27123,13 @@ async function openTidalDiscoveryModal(playlistId, playlistData) { status_class: isFound ? 'found' : 'not-found', spotify_track: result.spotify_data ? result.spotify_data.name : (result.spotify_track || '-'), spotify_artist: result.spotify_data && result.spotify_data.artists ? - (Array.isArray(result.spotify_data.artists) ? result.spotify_data.artists.join(', ') : result.spotify_data.artists) : (result.spotify_artist || '-'), + (Array.isArray(result.spotify_data.artists) + ? result.spotify_data.artists + .map(a => (typeof a === 'object' && a !== null) ? (a.name || '') : a) + .filter(Boolean) + .join(', ') || '-' + : result.spotify_data.artists) + : (result.spotify_artist || '-'), spotify_album: result.spotify_data ? (typeof result.spotify_data.album === 'object' ? result.spotify_data.album.name : result.spotify_data.album) : (result.spotify_album || '-'), spotify_data: result.spotify_data, // Pass through spotify_data spotify_id: result.spotify_id, // Pass through spotify_id @@ -28582,7 +28590,13 @@ async function openDeezerDiscoveryModal(playlistId, playlistData) { status_class: isFound ? 'found' : 'not-found', spotify_track: result.spotify_data ? result.spotify_data.name : (result.spotify_track || '-'), spotify_artist: result.spotify_data && result.spotify_data.artists ? - (Array.isArray(result.spotify_data.artists) ? result.spotify_data.artists.join(', ') : result.spotify_data.artists) : (result.spotify_artist || '-'), + (Array.isArray(result.spotify_data.artists) + ? result.spotify_data.artists + .map(a => (typeof a === 'object' && a !== null) ? (a.name || '') : a) + .filter(Boolean) + .join(', ') || '-' + : result.spotify_data.artists) + : (result.spotify_artist || '-'), spotify_album: result.spotify_data ? (typeof result.spotify_data.album === 'object' ? result.spotify_data.album.name : result.spotify_data.album) : (result.spotify_album || '-'), spotify_data: result.spotify_data, spotify_id: result.spotify_id, @@ -32461,7 +32475,13 @@ async function openSpotifyPublicDiscoveryModal(urlHash, playlistData) { status_class: isFound ? 'found' : 'not-found', spotify_track: result.spotify_data ? result.spotify_data.name : (result.spotify_track || '-'), spotify_artist: result.spotify_data && result.spotify_data.artists ? - (Array.isArray(result.spotify_data.artists) ? result.spotify_data.artists.join(', ') : result.spotify_data.artists) : (result.spotify_artist || '-'), + (Array.isArray(result.spotify_data.artists) + ? result.spotify_data.artists + .map(a => (typeof a === 'object' && a !== null) ? (a.name || '') : a) + .filter(Boolean) + .join(', ') || '-' + : result.spotify_data.artists) + : (result.spotify_artist || '-'), spotify_album: result.spotify_data ? (typeof result.spotify_data.album === 'object' ? result.spotify_data.album.name : result.spotify_data.album) : (result.spotify_album || '-'), spotify_data: result.spotify_data, spotify_id: result.spotify_id, diff --git a/webui/static/style.css b/webui/static/style.css index 4c2df1fa..07789621 100644 --- a/webui/static/style.css +++ b/webui/static/style.css @@ -14808,16 +14808,17 @@ body.helper-mode-active #dashboard-activity-feed:hover { } .youtube-discovery-modal .discovery-table th { - background: rgba(255, 255, 255, 0.1); + background: rgba(17, 17, 20, 0.96); color: #ffffff; font-weight: 600; padding: 12px 8px; text-align: left; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); + border-top: 1px solid rgba(255, 255, 255, 0.08); + border-bottom: 1px solid rgba(255, 255, 255, 0.18); font-size: 14px; position: sticky; top: 0; - z-index: 1; + z-index: 5; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;