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);