diff --git a/webui/index.html b/webui/index.html index 92a982bd..d56533e0 100644 --- a/webui/index.html +++ b/webui/index.html @@ -8012,6 +8012,7 @@ + @@ -8045,6 +8046,8 @@
+ {% include 'track-detail-modal.html' %} +
diff --git a/webui/static/downloads.js b/webui/static/downloads.js index 98ac7bbd..70091e06 100644 --- a/webui/static/downloads.js +++ b/webui/static/downloads.js @@ -2982,21 +2982,17 @@ function _ensureCandidatesClickListener(statusEl) { statusEl.addEventListener('click', function (e) { e.stopPropagation(); _hideErrorTooltip(); - // Single click handler routes by dataset set at render time. A - // quarantined task opens the chooser; everything else opens the search - // modal. Deciding at click-time (not bind-time) means a task that fails - // first and only quarantines on a later retry can't end up double-bound. - if (this.dataset.quarantineEntryId) { - showQuarantineChooser({ - entryId: this.dataset.quarantineEntryId, - taskId: this.dataset.taskId, - reason: this.dataset.quarantineReason || '', - trackName: this.dataset.quarantineTrack || 'this track', - }); - return; - } const taskId = this.dataset.taskId; - if (taskId) showCandidatesModal(taskId); + if (!taskId) return; + // Decide at click-time from dataset set each render: completed and + // quarantined rows open the rich track-detail modal (it carries the + // play/listen + Accept/Search actions); plain failed/not-found go + // straight to the search modal. + if (this.dataset.detailOpen && typeof openTrackDetail === 'function') { + openTrackDetail(taskId); + } else { + showCandidatesModal(taskId); + } }); } @@ -3395,125 +3391,9 @@ async function approveQuarantineFromDownloadRow(button) { } } -// ── Quarantine chooser (download-modal status click) ────────────────────── -// Clicking a 🛡️ Quarantined status opens this instead of the search modal: -// listen to the file, accept & import it (bypassing the failed check), or fall -// back to searching for a different result. (Routing is handled inside -// _ensureCandidatesClickListener so a single listener covers both cases.) - -// Stop and unload the chooser's