From a1cfaf468ccb9002746db76396f3793858160032 Mon Sep 17 00:00:00 2001 From: Luis Pereira Date: Wed, 19 Nov 2025 14:55:18 +0000 Subject: [PATCH] fix: playlist creation on frontend --- static/js/player.js | 63 ++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/static/js/player.js b/static/js/player.js index f0ae480..51783f2 100644 --- a/static/js/player.js +++ b/static/js/player.js @@ -130,8 +130,8 @@ function renderLibraryPage() { return `
-
${track.title[0] || 'Unknown Title'}
-
${track.artist[0] || 'Unknown Artist'} • ${track.album[0] || 'Unknown Album'}
+
${track.title || 'Unknown Title'}
+
${track.artist || 'Unknown Artist'} • ${track.album || 'Unknown Album'}
@@ -186,9 +186,9 @@ function changeLibraryTracksPerPage() { function filterTracks() { const query = document.getElementById('search-tracks').value.toLowerCase(); const filtered = tracks.filter(track => - (track.title[0] || '').toLowerCase().includes(query) || - (track.artist[0] || '').toLowerCase().includes(query) || - (track.album[0] || '').toLowerCase().includes(query) + (track.title || '').toLowerCase().includes(query) || + (track.artist || '').toLowerCase().includes(query) || + (track.album || '').toLowerCase().includes(query) ); displayTracks(filtered); } @@ -304,9 +304,9 @@ function updatePlayButton(text) { function updatePlayerDisplay() { if (currentTrack) { - document.getElementById('current-title').textContent = currentTrack.title[0] || 'Unknown Title'; - document.getElementById('current-artist').textContent = currentTrack.artist[0] || 'Unknown Artist'; - document.getElementById('current-album').textContent = currentTrack.album[0] || 'Unknown Album'; + document.getElementById('current-title').textContent = currentTrack.title || 'Unknown Title'; + document.getElementById('current-artist').textContent = currentTrack.artist || 'Unknown Artist'; + document.getElementById('current-album').textContent = currentTrack.album || 'Unknown Album'; } } @@ -328,8 +328,8 @@ function updateQueueDisplay() { const queueHtml = playQueue.map((track, index) => `
-
${track.title[0] || 'Unknown Title'}
-
${track.artist[0] || 'Unknown Artist'}
+
${track.title || 'Unknown Title'}
+
${track.artist || 'Unknown Artist'}
@@ -366,8 +366,10 @@ async function createPlaylist() { }); const result = await response.json(); + // Handle RADIANCE API wrapper format + const data = result.data || result; - if (result.status === 'success') { + if (data.status === 'success') { alert(`Playlist "${name}" created successfully!`); document.getElementById('new-playlist-name').value = ''; @@ -375,7 +377,7 @@ async function createPlaylist() { await new Promise(resolve => setTimeout(resolve, 500)); loadPlaylists(); } else { - alert('Error creating playlist: ' + result.message); + alert('Error creating playlist: ' + data.message); } } catch (error) { console.error('Error creating playlist:', error); @@ -404,24 +406,28 @@ async function saveQueueAsPlaylist() { }); const createResult = await createResponse.json(); + // Handle RADIANCE API wrapper format + const createData = createResult.data || createResult; - if (createResult.status === 'success') { + if (createData.status === 'success') { // Wait a moment for database to update await new Promise(resolve => setTimeout(resolve, 500)); // Get the new playlist ID by fetching playlists const playlistsResponse = await fetch('/api/asteroid/playlists'); const playlistsResult = await playlistsResponse.json(); + // Handle RADIANCE API wrapper format + const playlistResultData = playlistsResult.data || playlistsResult; - if (playlistsResult.status === 'success' && playlistsResult.playlists.length > 0) { + if (playlistResultData.status === 'success' && playlistResultData.playlists.length > 0) { // Find the playlist with matching name (most recent) - const newPlaylist = playlistsResult.playlists.find(p => p.name === name) || - playlistsResult.playlists[playlistsResult.playlists.length - 1]; + const newPlaylist = playlistResultData.playlists.find(p => p.name === name) || + playlistResultData.playlists[playlistResultData.playlists.length - 1]; // Add all tracks from queue to playlist let addedCount = 0; for (const track of playQueue) { - const trackId = track.id || (Array.isArray(track.id) ? track.id[0] : null); + const trackId = track.id; if (trackId) { const addFormData = new FormData(); @@ -435,7 +441,7 @@ async function saveQueueAsPlaylist() { const addResult = await addResponse.json(); - if (addResult.status === 'success') { + if (addResult.data?.status === 'success') { addedCount++; } } else { @@ -446,10 +452,11 @@ async function saveQueueAsPlaylist() { alert(`Playlist "${name}" created with ${addedCount} tracks!`); loadPlaylists(); } else { - alert('Playlist created but could not add tracks. Error: ' + (playlistsResult.message || 'Unknown')); + alert('Playlist created but could not add tracks. Error: ' + (playlistResultData.message || 'Unknown')); + loadPlaylists(); } } else { - alert('Error creating playlist: ' + createResult.message); + alert('Error creating playlist: ' + createData.message); } } catch (error) { console.error('Error saving queue as playlist:', error); @@ -461,11 +468,11 @@ async function loadPlaylists() { try { const response = await fetch('/api/asteroid/playlists'); const result = await response.json(); + // Handle RADIANCE API wrapper format + const data = result.data || result; - if (result.data && result.data.status === 'success') { - displayPlaylists(result.data.playlists || []); - } else if (result.status === 'success') { - displayPlaylists(result.playlists || []); + if (data && data.status === 'success') { + displayPlaylists(data.playlists || []); } else { displayPlaylists([]); } @@ -502,9 +509,11 @@ async function loadPlaylist(playlistId) { try { const response = await fetch(`/api/asteroid/playlists/get?playlist-id=${playlistId}`); const result = await response.json(); + // Handle RADIANCE API wrapper format + const data = result.data || result; - if (result.status === 'success' && result.playlist) { - const playlist = result.playlist; + if (data.status === 'success' && data.playlist) { + const playlist = data.playlist; // Clear current queue playQueue = []; @@ -534,7 +543,7 @@ async function loadPlaylist(playlistId) { alert(`Playlist "${playlist.name}" is empty`); } } else { - alert('Error loading playlist: ' + (result.message || 'Unknown error')); + alert('Error loading playlist: ' + (data.message || 'Unknown error')); } } catch (error) { console.error('Error loading playlist:', error);