diff options
Diffstat (limited to 'web/js/views')
| -rw-r--r-- | web/js/views/admin-status.js | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/web/js/views/admin-status.js b/web/js/views/admin-status.js index 3db7394..9a1d2f9 100644 --- a/web/js/views/admin-status.js +++ b/web/js/views/admin-status.js @@ -1,4 +1,5 @@ import { API } from '../api.js'; +import { toast } from '../utils.js'; let scanProgressTimer = null; @@ -8,19 +9,29 @@ export function showAdmin() { startScanProgressPolling(); } -function startScanProgressPolling() { +export async function triggerRescan() { + try { + await API.rescan(); + await refreshScanProgress(); + toast('Rescan triggered'); + } catch (err) { + toast(err.message || 'Rescan failed', 'error'); + } +} + +export function startScanProgressPolling() { if (scanProgressTimer) return; - pollScanProgress(); - scanProgressTimer = setInterval(pollScanProgress, 2000); + refreshScanProgress(); + scanProgressTimer = setInterval(refreshScanProgress, 2000); } -async function pollScanProgress() { +export async function refreshScanProgress() { try { renderScanProgress(await API.scanProgress()); } catch {} } -function renderScanProgress(progress) { +export function renderScanProgress(progress) { const indicator = document.getElementById('scan-indicator'); const text = document.getElementById('scan-indicator-text'); if (!indicator || !text || !progress) return; @@ -33,7 +44,9 @@ function renderScanProgress(progress) { const setPart = progress.current_set ? ` ${progress.current_set}` : ''; const setsTotal = progress.sets_total || 0; const setsPart = setsTotal ? ` ${progress.sets_done || 0}/${setsTotal} sets` : ''; - const filesPart = progress.files_done ? `, ${progress.files_done} files` : ''; + const filesTotal = progress.files_total || 0; + const filesDone = progress.files_done || 0; + const filesPart = filesTotal ? `, ${filesDone}/${filesTotal} files` : (filesDone ? `, ${filesDone} files` : ''); text.textContent = `Scanning${setPart}${setsPart}${filesPart}`; indicator.classList.remove('hidden'); } |
