From 7e239ea0f94b80da1718445ecf441433e08d63d3 Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 10 Jun 2026 11:53:30 +0200 Subject: [PATCH] =?UTF-8?q?Camera=20d=C3=A9connect=C3=A9e=20:=20retour=20a?= =?UTF-8?q?ccueil=20automatique=20+=20abort=20capture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - camera_erreur pendant la capture : abort immédiat + afficherErreurCapture() → retour accueil en 4s (au lieu de rester bloqué sur "Reconnexion en cours...") - camera_ok : cache l'erreur et reset le flag captureAbortee - captureAbortee flag : permet à lancerCapture() de sortir proprement sans déclencher de capture fantôme après une déconnexion Co-Authored-By: Claude Sonnet 4.6 --- frontend/js/camera.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/frontend/js/camera.js b/frontend/js/camera.js index 87507e7..0d9272a 100644 --- a/frontend/js/camera.js +++ b/frontend/js/camera.js @@ -3,6 +3,7 @@ let previewActif = false; let previewTimeoutId = null; const PREVIEW_TIMEOUT_MS = 3000; +let captureAbortee = false; const EMOJI_CAR = { 3: '🤪', 2: '😱', 1: '🔥' }; @@ -71,18 +72,23 @@ wsOnMessage('preview', (msg) => { resetPreviewTimeout(); }); -// Erreur camera pendant la preview +// Erreur camera : abort capture en cours + retour accueil automatique wsOnMessage('camera_erreur', () => { - if (previewActif) afficherErreurPreview(true); + captureAbortee = true; + if (ecranActuel === 'capture') { + afficherErreurCapture('Appareil photo déconnecté', 'Retour dans 4 secondes...'); + } }); wsOnMessage('camera_ok', () => { + captureAbortee = false; afficherErreurPreview(false); }); // --- Capture --- async function lancerCapture() { + captureAbortee = false; photosSession = []; photoImpression = null; formatImpression = null; @@ -108,6 +114,8 @@ async function lancerCapture() { const compteurEl = document.getElementById('capture-compteur'); for (let i = 0; i < nbPhotos; i++) { + if (captureAbortee) return; + if (nbPhotos > 1) { compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`; } @@ -116,6 +124,8 @@ async function lancerCapture() { await compteARebours(); arreterPreview(); // Libère le bus USB gphoto2 pour la capture + if (captureAbortee) return; + afficherFlash(); const promesseCapture = apiPost('/api/capturer').catch(() => null);