Update script.js

This commit is contained in:
Broque Thomas 2025-09-08 09:21:14 -07:00
parent 11717cbd38
commit 8bb020840e

View file

@ -3131,7 +3131,9 @@ async function closeDownloadMissingModal(playlistId) {
// Clean up artist download if this is an artist album playlist // Clean up artist download if this is an artist album playlist
if (playlistId.startsWith('artist_album_')) { if (playlistId.startsWith('artist_album_')) {
console.log(`🧹 [MODAL CLOSE] Cleaning up artist download for completed modal: ${playlistId}`);
cleanupArtistDownload(playlistId); cleanupArtistDownload(playlistId);
console.log(`✅ [MODAL CLOSE] Artist download cleanup completed for: ${playlistId}`);
} }
cleanupDownloadProcess(playlistId); cleanupDownloadProcess(playlistId);
@ -10711,13 +10713,20 @@ function updateArtistDownloadsSection() {
* Show or update the artist downloads section in search state * Show or update the artist downloads section in search state
*/ */
function showArtistDownloadsSection() { function showArtistDownloadsSection() {
console.log(`🔄 [SHOW] showArtistDownloadsSection() called - refreshing artist bubbles`);
console.log(`🔄 [SHOW] Current view: ${artistsPageState.currentView}, artistDownloadBubbles count: ${Object.keys(artistDownloadBubbles).length}`);
// Only show in search state // Only show in search state
if (artistsPageState.currentView !== 'search') { if (artistsPageState.currentView !== 'search') {
console.log(`⏭️ [SHOW] Skipping - not in search state (current: ${artistsPageState.currentView})`);
return; return;
} }
const artistsSearchState = document.getElementById('artists-search-state'); const artistsSearchState = document.getElementById('artists-search-state');
if (!artistsSearchState) return; if (!artistsSearchState) {
console.log(`⏭️ [SHOW] Skipping - no artists-search-state element found`);
return;
}
let downloadsSection = document.getElementById('artist-downloads-section'); let downloadsSection = document.getElementById('artist-downloads-section');
@ -10782,8 +10791,8 @@ function createArtistBubbleCard(artistBubbleData) {
const completedCount = downloads.filter(d => d.status === 'view_results').length; const completedCount = downloads.filter(d => d.status === 'view_results').length;
const allCompleted = activeCount === 0 && completedCount > 0; const allCompleted = activeCount === 0 && completedCount > 0;
// Debug logging for bubble card creation // Enhanced debug logging for bubble card creation and green checkmark detection
console.log(`🔵 Creating bubble for ${artist.name}:`, { console.log(`🔵 [BUBBLE] Creating bubble for ${artist.name}:`, {
totalDownloads: downloads.length, totalDownloads: downloads.length,
activeCount, activeCount,
completedCount, completedCount,
@ -10791,6 +10800,16 @@ function createArtistBubbleCard(artistBubbleData) {
downloadStatuses: downloads.map(d => `${d.album.name}: ${d.status}`) downloadStatuses: downloads.map(d => `${d.album.name}: ${d.status}`)
}); });
// CRITICAL: Green checkmark detection logging
if (allCompleted) {
console.log(`🟢 [BUBBLE] GREEN CHECKMARK DETECTED for ${artist.name} - all ${downloads.length} downloads completed`);
console.log(`✅ [BUBBLE] This bubble will have 'all-completed' class and green checkmark`);
} else if (activeCount === 0 && completedCount === 0) {
console.log(`⭕ [BUBBLE] No active or completed downloads for ${artist.name} - this shouldn't happen`);
} else {
console.log(`⏳ [BUBBLE] Still waiting for completion: ${activeCount} active, ${completedCount} completed`);
}
const imageUrl = artist.image_url || ''; const imageUrl = artist.image_url || '';
const backgroundStyle = imageUrl ? const backgroundStyle = imageUrl ?
`background-image: url('${imageUrl}');` : `background-image: url('${imageUrl}');` :
@ -10849,6 +10868,9 @@ function monitorArtistDownload(artistId, virtualPlaylistId) {
const allCompleted = artistDownloads.every(d => d.status === 'view_results'); const allCompleted = artistDownloads.every(d => d.status === 'view_results');
if (allCompleted) { if (allCompleted) {
console.log(`🟢 All downloads completed for ${artistDownloadBubbles[artistId].artist.name} - green checkmark should appear`); console.log(`🟢 All downloads completed for ${artistDownloadBubbles[artistId].artist.name} - green checkmark should appear`);
console.log(`🎯 [STATUS DEBUG] Green checkmark trigger - forcing bubble refresh`);
// Force immediate bubble refresh to show green checkmark
setTimeout(updateArtistDownloadsSection, 100);
} }
} }
@ -10869,7 +10891,8 @@ function openArtistDownloadModal(artistId) {
const artistBubbleData = artistDownloadBubbles[artistId]; const artistBubbleData = artistDownloadBubbles[artistId];
if (!artistBubbleData || artistDownloadModalOpen) return; if (!artistBubbleData || artistDownloadModalOpen) return;
console.log(`🎵 Opening artist download modal for: ${artistBubbleData.artist.name}`); console.log(`🎵 [MODAL OPEN] Opening artist download modal for: ${artistBubbleData.artist.name}`);
console.log(`📊 [MODAL OPEN] Current download statuses:`, artistBubbleData.downloads.map(d => `${d.album.name}: ${d.status}`));
artistDownloadModalOpen = true; artistDownloadModalOpen = true;
const modal = document.createElement('div'); const modal = document.createElement('div');
@ -10906,6 +10929,9 @@ function createArtistDownloadItem(download, index) {
const buttonText = status === 'view_results' ? 'View Results' : 'View Progress'; const buttonText = status === 'view_results' ? 'View Results' : 'View Progress';
const buttonClass = status === 'view_results' ? 'completed' : 'active'; const buttonClass = status === 'view_results' ? 'completed' : 'active';
// Enhanced debugging for button text generation
console.log(`🎯 [BUTTON] Creating item for ${album.name}: status='${status}' → buttonText='${buttonText}'`);
return ` return `
<div class="artist-download-item" data-playlist-id="${virtualPlaylistId}"> <div class="artist-download-item" data-playlist-id="${virtualPlaylistId}">
<div class="download-item-info"> <div class="download-item-info">
@ -10950,19 +10976,39 @@ function startArtistDownloadModalMonitoring(artistId) {
return; return;
} }
// Update modal content // Update modal content and synchronize with bubble state
let statusChanged = false;
itemsContainer.innerHTML = activeDownloads.map((download, index) => { itemsContainer.innerHTML = activeDownloads.map((download, index) => {
const process = activeDownloadProcesses[download.virtualPlaylistId]; const process = activeDownloadProcesses[download.virtualPlaylistId];
if (process) { if (process) {
const newStatus = process.status === 'complete' ? 'view_results' : 'in_progress'; const newStatus = process.status === 'complete' ? 'view_results' : 'in_progress';
if (download.status !== newStatus) { if (download.status !== newStatus) {
console.log(`🔄 Modal: Updating ${download.album.name} status from ${download.status} to ${newStatus}`); console.log(`🔄 [ARTIST MODAL] Updating ${download.album.name} status from ${download.status} to ${newStatus}`);
download.status = newStatus; download.status = newStatus;
statusChanged = true;
} }
} }
return createArtistDownloadItem(download, index); return createArtistDownloadItem(download, index);
}).join(''); }).join('');
// CRITICAL: If any status changed, immediately refresh artist bubble to show green checkmarks
if (statusChanged) {
console.log(`🎯 [SYNC] Status change detected in artist modal - refreshing bubble display`);
updateArtistDownloadsSection();
// Check if all downloads for this artist are now completed
const artistDownloads = artistDownloadBubbles[artistId].downloads;
const allCompleted = artistDownloads.every(d => d.status === 'view_results');
if (allCompleted) {
console.log(`🟢 [ARTIST MODAL] All downloads completed for artist ${artistId} - triggering green checkmark`);
// Force additional refresh after a brief delay to ensure UI updates
setTimeout(() => {
console.log(`✨ [ARTIST MODAL] Forcing final refresh for green checkmark`);
updateArtistDownloadsSection();
}, 200);
}
}
// Continue monitoring // Continue monitoring
setTimeout(updateModal, 2000); setTimeout(updateModal, 2000);
}; };
@ -11041,28 +11087,40 @@ function bulkCompleteArtistDownloads(artistId) {
* Clean up artist download when a modal is closed * Clean up artist download when a modal is closed
*/ */
function cleanupArtistDownload(virtualPlaylistId) { function cleanupArtistDownload(virtualPlaylistId) {
console.log(`🔍 [CLEANUP] Looking for download to cleanup: ${virtualPlaylistId}`);
console.log(`🔍 [CLEANUP] Current artist bubbles:`, Object.keys(artistDownloadBubbles));
// Find which artist this download belongs to // Find which artist this download belongs to
for (const artistId in artistDownloadBubbles) { for (const artistId in artistDownloadBubbles) {
const downloads = artistDownloadBubbles[artistId].downloads; const downloads = artistDownloadBubbles[artistId].downloads;
const downloadIndex = downloads.findIndex(d => d.virtualPlaylistId === virtualPlaylistId); const downloadIndex = downloads.findIndex(d => d.virtualPlaylistId === virtualPlaylistId);
console.log(`🔍 [CLEANUP] Checking artist ${artistId}: ${downloads.length} downloads`);
downloads.forEach(d => console.log(` - ${d.album.name} (${d.virtualPlaylistId}): ${d.status}`));
if (downloadIndex !== -1) { if (downloadIndex !== -1) {
console.log(`🧹 Cleaning up artist download: ${downloads[downloadIndex].album.name}`); const downloadToRemove = downloads[downloadIndex];
console.log(`🧹 [CLEANUP] Found download to cleanup: ${downloadToRemove.album.name} (status: ${downloadToRemove.status})`);
// Remove this download from the artist's downloads // Remove this download from the artist's downloads
downloads.splice(downloadIndex, 1); downloads.splice(downloadIndex, 1);
console.log(`✅ [CLEANUP] Removed download from artist ${artistId}. Remaining: ${downloads.length}`);
// If no more downloads for this artist, remove the bubble // If no more downloads for this artist, remove the bubble
if (downloads.length === 0) { if (downloads.length === 0) {
delete artistDownloadBubbles[artistId]; delete artistDownloadBubbles[artistId];
console.log(`🧹 Removed artist bubble: ${artistId}`); console.log(`🧹 [CLEANUP] No more downloads - removed artist bubble: ${artistId}`);
} else {
console.log(`📊 [CLEANUP] Artist ${artistId} still has ${downloads.length} downloads remaining`);
} }
// Update the downloads section // Update the downloads section
console.log(`🔄 [CLEANUP] Updating artist downloads section...`);
updateArtistDownloadsSection(); updateArtistDownloadsSection();
break; break;
} }
} }
console.log(`✅ [CLEANUP] Cleanup process completed for ${virtualPlaylistId}`);
} }
/** /**