summaryrefslogtreecommitdiff
path: root/web/js/views
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/views')
-rw-r--r--web/js/views/admin-status.js25
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');
}