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...
-
-
-
- Selected Batch Result
-
-
-
--
+ no file selected
@@ -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() {