diff --git a/public/app.js b/public/app.js index 29ac02c..7820108 100644 --- a/public/app.js +++ b/public/app.js @@ -280,7 +280,16 @@ async function renderCameraCards() { - ` + cameras.map(c => ` +
+ + ${cameras.length} camera(s) +
+ ` + cameras.map((c, i) => ` +
+

📷 ${c.name || 'Unnamed'} ${c.ip} + ⚙️ Config + +

📷 ${c.name || 'Unnamed'} ${c.ip} ⚙️ Config @@ -302,7 +311,28 @@ async function renderCameraCards() { `).join(''); } -// ── Settings: Scan ── +// ── Settings: Add / Remove cameras ── +function addCamera() { + const ip = prompt('Camera IP address:', '192.168.1.'); + if (!ip) return; + const id = 'cam_' + ip.split('.').pop(); + cameras.push({ + id, name: 'Camera_' + ip.split('.').pop(), + ip, username: 'admin', password: '', + onvif_port: 80, rtsp_main: '', rtsp_sub: '', + description: '', enabled: true, record: true + }); + renderCameraCards(); + renderLiveGrid(); + renderPlaybackCameras(); +} +function removeCamera(idx) { + if (!confirm('Remove camera ' + (cameras[idx]?.name || '') + '?')) return; + cameras.splice(idx, 1); + renderCameraCards(); + renderLiveGrid(); + renderPlaybackCameras(); +} async function runWizard() { const from = document.getElementById('wiz-from')?.value || '192.168.1.200'; const to = document.getElementById('wiz-to')?.value || '192.168.1.210';