From d0d65946c85718ecd3fafef8e0fda22ba6571774 Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Thu, 14 May 2026 08:50:24 -0700 Subject: [PATCH] =?UTF-8?q?Polish=20quarantine=20UI=20=E2=80=94=20fold=20i?= =?UTF-8?q?nto=20Library=20History=20modal=20as=20third=20tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standalone Quarantine button + modal felt out of place — duplicated the chrome of the existing Library History modal but with worse styling and behavior. Folded the quarantine list into the existing modal as a third tab next to Downloads + Server Imports. UI changes: - Removed the standalone Quarantine button on the Downloads page header and the standalone modal HTML - Added third tab to library-history-tabs with a count badge - loadLibraryHistory dispatches to loadQuarantineList when the quarantine tab is active - Quarantine entries render as library-history-entry cards using the exact same class chrome as Downloads + Imports (thumb placeholder, title + meta, badge, relative time via formatHistoryTime, expandable details panel) - Per-row actions styled as lh-audit-btn to match the existing Audit button look - Approve / Recover / Delete now use the themed showConfirmDialog + showToast — no more native browser alert / confirm Backend endpoints + pure helpers + tests unchanged from f4cff78f. WHATS_NEW entry rewritten to reflect the actual final UX. --- webui/index.html | 22 +--- webui/static/helper.js | 2 +- webui/static/wishlist-tools.js | 201 +++++++++++++++++---------------- 3 files changed, 108 insertions(+), 117 deletions(-) diff --git a/webui/index.html b/webui/index.html index 70e93d3f..e776eb23 100644 --- a/webui/index.html +++ b/webui/index.html @@ -2191,7 +2191,6 @@
Loading…
'; try { - const r = await fetch('/api/quarantine/list'); - const data = await r.json(); + const resp = await fetch('/api/quarantine/list'); + const data = await resp.json(); + const entries = data.entries || []; + const countEl = document.getElementById('history-quarantine-count'); + if (countEl) countEl.textContent = entries.length; + if (!data.success) { - container.innerHTML = `${_quarantineEsc(data.error || 'Failed to load')}
`; + list.innerHTML = `No quarantined files. Nice and clean.
'; + list.innerHTML = '- ${entries.length} quarantined file${entries.length !== 1 ? 's' : ''}. - Approve re-runs the post-process pipeline with the failing check skipped. - Recover (legacy entries only) drops the file into Staging for manual import. - Delete removes the file permanently. -
-| File | -Expected Track | -Expected Artist | -Reason | -When | -Size | -Actions | -
|---|
${_quarantineEsc(err.message || 'Network error')}
`; + console.error('Error loading quarantine entries:', err); + list.innerHTML = '