Camera déconnectée : retour accueil automatique + abort capture
- 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 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
let previewActif = false;
|
let previewActif = false;
|
||||||
let previewTimeoutId = null;
|
let previewTimeoutId = null;
|
||||||
const PREVIEW_TIMEOUT_MS = 3000;
|
const PREVIEW_TIMEOUT_MS = 3000;
|
||||||
|
let captureAbortee = false;
|
||||||
|
|
||||||
const EMOJI_CAR = { 3: '🤪', 2: '😱', 1: '🔥' };
|
const EMOJI_CAR = { 3: '🤪', 2: '😱', 1: '🔥' };
|
||||||
|
|
||||||
@@ -71,18 +72,23 @@ wsOnMessage('preview', (msg) => {
|
|||||||
resetPreviewTimeout();
|
resetPreviewTimeout();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Erreur camera pendant la preview
|
// Erreur camera : abort capture en cours + retour accueil automatique
|
||||||
wsOnMessage('camera_erreur', () => {
|
wsOnMessage('camera_erreur', () => {
|
||||||
if (previewActif) afficherErreurPreview(true);
|
captureAbortee = true;
|
||||||
|
if (ecranActuel === 'capture') {
|
||||||
|
afficherErreurCapture('Appareil photo déconnecté', 'Retour dans 4 secondes...');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
wsOnMessage('camera_ok', () => {
|
wsOnMessage('camera_ok', () => {
|
||||||
|
captureAbortee = false;
|
||||||
afficherErreurPreview(false);
|
afficherErreurPreview(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
// --- Capture ---
|
// --- Capture ---
|
||||||
|
|
||||||
async function lancerCapture() {
|
async function lancerCapture() {
|
||||||
|
captureAbortee = false;
|
||||||
photosSession = [];
|
photosSession = [];
|
||||||
photoImpression = null;
|
photoImpression = null;
|
||||||
formatImpression = null;
|
formatImpression = null;
|
||||||
@@ -108,6 +114,8 @@ async function lancerCapture() {
|
|||||||
const compteurEl = document.getElementById('capture-compteur');
|
const compteurEl = document.getElementById('capture-compteur');
|
||||||
|
|
||||||
for (let i = 0; i < nbPhotos; i++) {
|
for (let i = 0; i < nbPhotos; i++) {
|
||||||
|
if (captureAbortee) return;
|
||||||
|
|
||||||
if (nbPhotos > 1) {
|
if (nbPhotos > 1) {
|
||||||
compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`;
|
compteurEl.textContent = `Photo ${i + 1} / ${nbPhotos}`;
|
||||||
}
|
}
|
||||||
@@ -116,6 +124,8 @@ async function lancerCapture() {
|
|||||||
await compteARebours();
|
await compteARebours();
|
||||||
arreterPreview(); // Libère le bus USB gphoto2 pour la capture
|
arreterPreview(); // Libère le bus USB gphoto2 pour la capture
|
||||||
|
|
||||||
|
if (captureAbortee) return;
|
||||||
|
|
||||||
afficherFlash();
|
afficherFlash();
|
||||||
|
|
||||||
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
const promesseCapture = apiPost('/api/capturer').catch(() => null);
|
||||||
|
|||||||
Reference in New Issue
Block a user