diff --git a/webui/static/script.js b/webui/static/script.js index cb41d3f6..59b8865d 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -2920,7 +2920,7 @@ function showPlaylistDetailsModal(playlist) { `; - + modal.style.display = 'flex'; } @@ -3057,6 +3057,8 @@ let currentModalPlaylistId = null; let cancelledTracks = new Set(); // Track cancelled track indices like GUI's cancelled_tracks async function openDownloadMissingModal(playlistId) { + showLoadingOverlay('Loading playlist...'); + // **NEW**: Check if a process is already active for this playlist if (activeDownloadProcesses[playlistId]) { console.log(`Modal for ${playlistId} already exists. Showing it.`); @@ -3069,6 +3071,7 @@ async function openDownloadMissingModal(playlistId) { } process.modalElement.style.display = 'flex'; } + hideLoadingOverlay(); return; // Don't create a new one } @@ -3227,9 +3230,11 @@ async function openDownloadMissingModal(playlistId) { `; modal.style.display = 'flex'; + hideLoadingOverlay(); } async function openDownloadMissingModalForYouTube(virtualPlaylistId, playlistName, spotifyTracks) { + showLoadingOverlay('Loading YouTube playlist...'); // Check if a process is already active for this virtual playlist if (activeDownloadProcesses[virtualPlaylistId]) { console.log(`Modal for ${virtualPlaylistId} already exists. Showing it.`); @@ -3387,6 +3392,7 @@ async function openDownloadMissingModalForYouTube(virtualPlaylistId, playlistNam `; modal.style.display = 'flex'; + hideLoadingOverlay(); } async function closeDownloadMissingModal(playlistId) { @@ -3523,6 +3529,7 @@ async function closeDownloadMissingModal(playlistId) { } async function openDownloadMissingWishlistModal() { + showLoadingOverlay('Loading wishlist...'); const playlistId = "wishlist"; // Use a consistent ID for wishlist // Check if a process is already active for the wishlist @@ -3700,6 +3707,7 @@ async function openDownloadMissingWishlistModal() { `; modal.style.display = 'flex'; + hideLoadingOverlay(); WishlistModalState.setVisible(); // Track that new wishlist modal is now visible } @@ -6311,6 +6319,7 @@ let currentWishlistModalData = null; * @param {string} albumType - Type of release (album, EP, single) */ async function openAddToWishlistModal(album, artist, tracks, albumType) { + showLoadingOverlay('Preparing wishlist...'); console.log(`🎵 Opening Add to Wishlist modal for: ${artist.name} - ${album.name}`); try { @@ -6352,11 +6361,13 @@ async function openAddToWishlistModal(album, artist, tracks, albumType) { // Show the modal overlay.classList.remove('hidden'); + hideLoadingOverlay(); console.log(`✅ Successfully opened Add to Wishlist modal for: ${album.name}`); } catch (error) { console.error('❌ Error opening Add to Wishlist modal:', error); + hideLoadingOverlay(); showToast(`Error opening wishlist modal: ${error.message}`, 'error'); } } @@ -8986,6 +8997,7 @@ async function startTidalDownloadMissing(urlHash) { } async function openDownloadMissingModalForTidal(virtualPlaylistId, playlistName, spotifyTracks) { + showLoadingOverlay('Loading Tidal playlist...'); // Check if a process is already active for this virtual playlist if (activeDownloadProcesses[virtualPlaylistId]) { console.log(`Modal for ${virtualPlaylistId} already exists. Showing it.`); @@ -9136,6 +9148,7 @@ async function openDownloadMissingModalForTidal(virtualPlaylistId, playlistName, `; modal.style.display = 'flex'; + hideLoadingOverlay(); } @@ -11912,28 +11925,8 @@ async function handleArtistAlbumClick(album, albumType) { return; } - // If album has missing tracks, show Add to Wishlist modal - if (completionStatus?.status && ['partial', 'missing', 'nearly_complete'].includes(completionStatus.status)) { - console.log(`🎵 Album has missing tracks, opening Add to Wishlist modal`); - - // Load tracks for the album - const response = await fetch(`/api/artist/${artistsPageState.selectedArtist.id}/album/${album.id}/tracks`); - if (!response.ok) { - throw new Error(`Failed to load album tracks: ${response.status}`); - } - - const data = await response.json(); - if (!data.success || !data.tracks || data.tracks.length === 0) { - throw new Error('No tracks found for this album'); - } - - // Open the Add to Wishlist modal - await openAddToWishlistModal(album, artistsPageState.selectedArtist, data.tracks, albumType); - return; - } - - // For unknown status or if we want to check what's missing, use the existing download modal - console.log(`🔄 Opening existing download missing tracks modal for status analysis`); + // For Artists page, always use Download Missing Tracks modal to analyze and download + console.log(`🔄 Opening download missing tracks modal for album analysis`); // Create virtual playlist ID const virtualPlaylistId = `artist_album_${artistsPageState.selectedArtist.id}_${album.id}`; @@ -12012,6 +12005,7 @@ async function createArtistAlbumVirtualPlaylist(album, albumType) { * Similar to openDownloadMissingModalForYouTube but for artist albums */ async function openDownloadMissingModalForArtistAlbum(virtualPlaylistId, playlistName, spotifyTracks, album, artist) { + showLoadingOverlay('Loading album...'); // Check if a process is already active for this virtual playlist if (activeDownloadProcesses[virtualPlaylistId]) { console.log(`Modal for ${virtualPlaylistId} already exists. Showing it.`); @@ -12174,7 +12168,8 @@ async function openDownloadMissingModalForArtistAlbum(virtualPlaylistId, playlis `; modal.style.display = 'flex'; - + hideLoadingOverlay(); + console.log(`✅ Successfully opened download missing tracks modal for: ${playlistName}`); }