diff --git a/templates/recounting.html b/templates/recounting.html index 2160f18..a1bf1ba 100644 --- a/templates/recounting.html +++ b/templates/recounting.html @@ -348,29 +348,13 @@
- ◉ Live Counter + ◉ Live Counter
--
-
Objects Counted
+
Objects Counted
Batch #-- · --
- waiting... -
-
@@ -441,11 +425,9 @@ let streaming = false; let streamUrl = ''; document.addEventListener('DOMContentLoaded', () => { - loadLiveProgress(); loadRecountProgress(); loadFiles(); - setInterval(loadLiveProgress, 200); setInterval(loadRecountProgress, 500); setInterval(loadFiles, 30000); }); @@ -480,6 +462,20 @@ async function loadFiles() { } function selectFile(path, name) { + if (selectedFile === path) { + selectedFile = null; + batchResultLoaded = false; + document.getElementById('btn-start').disabled = true; + document.getElementById('live-title').innerHTML = '◉ Live Counter'; + document.getElementById('live-count').textContent = '--'; + document.getElementById('live-label').textContent = 'Objects Counted'; + document.getElementById('live-batch').textContent = '--'; + document.getElementById('live-time').textContent = '--'; + document.getElementById('live-status').textContent = 'no file selected'; + document.getElementById('live-status').className = 'counter-status disconnected'; + loadFiles(); + return; + } selectedFile = path; document.getElementById('btn-start').disabled = false; document.getElementById('stream-file-name').textContent = name; @@ -487,26 +483,36 @@ function selectFile(path, name) { loadBatchResult(path); } +let batchResultLoaded = false; + async function loadBatchResult(filePath) { - const el = document.getElementById('batch-result'); if (!filePath) { - el.style.display = 'none'; + batchResultLoaded = false; + document.getElementById('live-title').innerHTML = '◉ Live Counter'; + document.getElementById('live-label').textContent = 'Objects Counted'; + document.getElementById('live-status').textContent = 'waiting...'; + document.getElementById('live-status').className = 'counter-status disconnected'; + loadLiveProgress(); return; } try { const res = await fetch('/api/batch-result?file=' + encodeURIComponent(filePath)); const data = await res.json(); if (!data.success) { - el.style.display = 'none'; + batchResultLoaded = false; return; } - document.getElementById('br-batch').textContent = '#' + data.batch_number; - document.getElementById('br-count').textContent = data.count.toLocaleString(); - document.getElementById('br-date').textContent = data.date; - el.style.display = 'block'; + batchResultLoaded = true; + document.getElementById('live-title').innerHTML = '◉ Batch Result'; + document.getElementById('live-count').textContent = data.count.toLocaleString(); + document.getElementById('live-label').textContent = 'Batch #' + data.batch_number; + document.getElementById('live-batch').textContent = data.batch_number; + document.getElementById('live-time').textContent = data.date; + document.getElementById('live-status').textContent = 'recorded \u00b7 ' + (data.start_time ? new Date(data.start_time).toLocaleTimeString('en-US', {hour12: false, hour:'2-digit', minute:'2-digit'}) : '--') + ' \u2013 ' + (data.end_time ? new Date(data.end_time).toLocaleTimeString('en-US', {hour12: false, hour:'2-digit', minute:'2-digit'}) : '--'); + document.getElementById('live-status').className = 'counter-status connected'; } catch (err) { console.error('Failed to load batch result:', err); - el.style.display = 'none'; + batchResultLoaded = false; } } @@ -591,43 +597,6 @@ async function stopRecount() { loadFiles(); } -// --- Live counter --- - -async function loadLiveProgress() { - const countEl = document.getElementById('live-count'); - const batchEl = document.getElementById('live-batch'); - const timeEl = document.getElementById('live-time'); - const statusEl = document.getElementById('live-status'); - try { - const res = await fetch('/api/live-progress'); - const data = await res.json(); - if (!data.success) { - countEl.textContent = '--'; - batchEl.textContent = '--'; - timeEl.textContent = data.error || 'unreachable'; - statusEl.className = 'counter-status disconnected'; - statusEl.textContent = 'no connection'; - return; - } - countEl.textContent = data.count.toLocaleString(); - batchEl.textContent = data.batch_number || '--'; - if (data.last_detection_time) { - const d = new Date(data.last_detection_time); - timeEl.textContent = d.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' }); - } else { - timeEl.textContent = 'waiting...'; - } - statusEl.className = 'counter-status connected'; - statusEl.textContent = 'connected'; - } catch (err) { - countEl.textContent = '--'; - batchEl.textContent = '--'; - timeEl.textContent = 'unreachable'; - statusEl.className = 'counter-status disconnected'; - statusEl.textContent = 'no connection'; - } -} - // --- Recount counter --- async function loadRecountProgress() {