diff --git a/database/music_library.db-shm b/database/music_library.db-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/database/music_library.db-shm differ diff --git a/database/music_library.db-wal b/database/music_library.db-wal new file mode 100644 index 00000000..e69de29b diff --git a/webui/static/script.js b/webui/static/script.js index ae555d39..ea5fa36b 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -5363,7 +5363,7 @@ function processModalStatusUpdate(playlistId, data) { } (data.tasks || []).forEach(task => { - const row = document.querySelector(`#download-missing-modal-${playlistId} tr[data-track-index="${task.track_index}"]`); + const row = document.querySelector(`#download-missing-modal-${CSS.escape(playlistId)} tr[data-track-index="${task.track_index}"]`); if (!row) { console.debug(`❌ [Status Update] Row not found for playlistId: ${playlistId}, track_index: ${task.track_index}`); return; @@ -5872,7 +5872,7 @@ async function cancelTrackDownloadV2(playlistId, trackIndex) { return; } - const row = document.querySelector(`#download-missing-modal-${playlistId} tr[data-track-index="${trackIndex}"]`); + const row = document.querySelector(`#download-missing-modal-${CSS.escape(playlistId)} tr[data-track-index="${trackIndex}"]`); if (!row) { console.warn(`❌ [Cancel V2] No row found for track index: ${trackIndex}`); return; @@ -5959,7 +5959,7 @@ async function cancelTrackDownload(playlistId, trackIndex) { const process = activeDownloadProcesses[playlistId]; if (!process) return; - const row = document.querySelector(`#download-missing-modal-${playlistId} tr[data-track-index="${trackIndex}"]`); + const row = document.querySelector(`#download-missing-modal-${CSS.escape(playlistId)} tr[data-track-index="${trackIndex}"]`); if (!row) return; // Prevent double cancellation @@ -9771,7 +9771,7 @@ function resetWishlistModalToIdleState() { if (downloadBar) downloadBar.style.width = '0%'; // Reset all track rows to pending state - const trackRows = document.querySelectorAll(`#download-missing-modal-${playlistId} tr[data-track-index]`); + const trackRows = document.querySelectorAll(`#download-missing-modal-${CSS.escape(playlistId)} tr[data-track-index]`); trackRows.forEach((row, index) => { const matchCell = row.querySelector(`#match-${playlistId}-${index}`); const downloadCell = row.querySelector(`#download-${playlistId}-${index}`); @@ -10422,7 +10422,7 @@ function updateCompletedModalResults(playlistId, downloadData) { let failedOrCancelledCount = 0; (downloadData.tasks || []).forEach(task => { - const row = document.querySelector(`#download-missing-modal-${playlistId} tr[data-track-index="${task.track_index}"]`); + const row = document.querySelector(`#download-missing-modal-${CSS.escape(playlistId)} tr[data-track-index="${task.track_index}"]`); if (!row) return; row.dataset.taskId = task.task_id;