fix listenbrainz wishlist comp
This commit is contained in:
parent
e8f9803bd5
commit
28d8dbf5e0
2 changed files with 31 additions and 10 deletions
|
|
@ -9373,22 +9373,33 @@ def _ensure_spotify_track_format(track_info):
|
||||||
else:
|
else:
|
||||||
artists_list.append({'name': 'Unknown Artist'})
|
artists_list.append({'name': 'Unknown Artist'})
|
||||||
|
|
||||||
|
# Build album object with images if available
|
||||||
|
album_data = track_info.get('album', {})
|
||||||
|
if isinstance(album_data, dict):
|
||||||
|
album = {
|
||||||
|
'name': album_data.get('name', 'Unknown Album')
|
||||||
|
}
|
||||||
|
# Preserve album images if present (important for ListenBrainz tracks)
|
||||||
|
if 'images' in album_data:
|
||||||
|
album['images'] = album_data['images']
|
||||||
|
else:
|
||||||
|
album = {
|
||||||
|
'name': str(album_data) if album_data else 'Unknown Album'
|
||||||
|
}
|
||||||
|
|
||||||
# Build proper Spotify track structure
|
# Build proper Spotify track structure
|
||||||
spotify_track = {
|
spotify_track = {
|
||||||
'id': track_info.get('id', f"webui_{hash(str(track_info))}"),
|
'id': track_info.get('id', f"webui_{hash(str(track_info))}"),
|
||||||
'name': track_info.get('name', 'Unknown Track'),
|
'name': track_info.get('name', 'Unknown Track'),
|
||||||
'artists': artists_list, # Proper Spotify format
|
'artists': artists_list, # Proper Spotify format
|
||||||
'album': {
|
'album': album,
|
||||||
'name': track_info.get('album', {}).get('name') if isinstance(track_info.get('album'), dict)
|
|
||||||
else track_info.get('album', 'Unknown Album')
|
|
||||||
},
|
|
||||||
'duration_ms': track_info.get('duration_ms', 0),
|
'duration_ms': track_info.get('duration_ms', 0),
|
||||||
'preview_url': track_info.get('preview_url'),
|
'preview_url': track_info.get('preview_url'),
|
||||||
'external_urls': track_info.get('external_urls', {}),
|
'external_urls': track_info.get('external_urls', {}),
|
||||||
'popularity': track_info.get('popularity', 0),
|
'popularity': track_info.get('popularity', 0),
|
||||||
'source': 'webui_modal' # Mark as coming from webui
|
'source': 'webui_modal' # Mark as coming from webui
|
||||||
}
|
}
|
||||||
|
|
||||||
return spotify_track
|
return spotify_track
|
||||||
|
|
||||||
def _process_failed_tracks_to_wishlist_exact(batch_id):
|
def _process_failed_tracks_to_wishlist_exact(batch_id):
|
||||||
|
|
@ -9672,7 +9683,17 @@ def _on_download_completed(batch_id, task_id, success=True):
|
||||||
|
|
||||||
# Add activity for successful download
|
# Add activity for successful download
|
||||||
track_name = track_info.get('name', 'Unknown Track')
|
track_name = track_info.get('name', 'Unknown Track')
|
||||||
artist_name = track_info.get('artists', [{}])[0].get('name', 'Unknown Artist') if track_info.get('artists') else 'Unknown Artist'
|
|
||||||
|
# Safely extract artist name (handle both list and string formats)
|
||||||
|
artists = track_info.get('artists', [])
|
||||||
|
if isinstance(artists, list) and len(artists) > 0:
|
||||||
|
first_artist = artists[0]
|
||||||
|
artist_name = first_artist.get('name', 'Unknown Artist') if isinstance(first_artist, dict) else str(first_artist)
|
||||||
|
elif isinstance(artists, str):
|
||||||
|
artist_name = artists
|
||||||
|
else:
|
||||||
|
artist_name = 'Unknown Artist'
|
||||||
|
|
||||||
add_activity_item("📥", "Download Complete", f"'{track_name}' by {artist_name}", "Now")
|
add_activity_item("📥", "Download Complete", f"'{track_name}' by {artist_name}", "Now")
|
||||||
|
|
||||||
# Try to remove from wishlist using track info
|
# Try to remove from wishlist using track info
|
||||||
|
|
|
||||||
|
|
@ -28663,12 +28663,12 @@ async function openListenBrainzPlaylist(playlistMbid, playlistName) {
|
||||||
|
|
||||||
// Convert to Spotify-like format for compatibility with download modal
|
// Convert to Spotify-like format for compatibility with download modal
|
||||||
const spotifyTracks = tracks.map(track => ({
|
const spotifyTracks = tracks.map(track => ({
|
||||||
id: track.recording_mbid || '',
|
id: track.recording_mbid || `listenbrainz_${track.title}_${track.creator}`.replace(/[^a-z0-9]/gi, '_'), // Generate ID if missing
|
||||||
name: track.title || 'Unknown',
|
name: track.title || 'Unknown',
|
||||||
artists: [{name: cleanArtistName(track.creator || 'Unknown')}], // Proper Spotify format
|
artists: [{name: cleanArtistName(track.creator || 'Unknown')}], // Proper Spotify format
|
||||||
album: {
|
album: {
|
||||||
name: track.album || 'Unknown Album',
|
name: track.album || 'Unknown Album',
|
||||||
images: []
|
images: track.album_cover_url ? [{url: track.album_cover_url}] : []
|
||||||
},
|
},
|
||||||
duration_ms: track.duration_ms || 0,
|
duration_ms: track.duration_ms || 0,
|
||||||
listenbrainz_metadata: track.additional_metadata
|
listenbrainz_metadata: track.additional_metadata
|
||||||
|
|
@ -30272,7 +30272,7 @@ async function rehydrateDiscoverDownloadModal(playlistId) {
|
||||||
|
|
||||||
// Convert to Spotify format
|
// Convert to Spotify format
|
||||||
const spotifyTracks = tracks.map(track => ({
|
const spotifyTracks = tracks.map(track => ({
|
||||||
id: null,
|
id: track.mbid || `listenbrainz_${track.track_name}_${track.artist_name}`.replace(/[^a-z0-9]/gi, '_'), // Generate ID if missing
|
||||||
name: track.track_name,
|
name: track.track_name,
|
||||||
artists: [{name: cleanArtistName(track.artist_name)}], // Proper Spotify format
|
artists: [{name: cleanArtistName(track.artist_name)}], // Proper Spotify format
|
||||||
album: {
|
album: {
|
||||||
|
|
@ -30345,7 +30345,7 @@ async function rehydrateDiscoverDownloadModal(playlistId) {
|
||||||
id: track.id,
|
id: track.id,
|
||||||
name: track.name,
|
name: track.name,
|
||||||
artists: artistsArray,
|
artists: artistsArray,
|
||||||
album: track.album || 'Unknown Album',
|
album: track.album || {name: 'Unknown Album', images: []},
|
||||||
duration_ms: track.duration_ms || 0,
|
duration_ms: track.duration_ms || 0,
|
||||||
external_urls: track.external_urls || {}
|
external_urls: track.external_urls || {}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue