Canon: fiabilite veille/reveil + detection PTP freeze + UX countdown + fix copies impression

- Canon PTP freeze: 5 keepalive FAIL consecutifs → deconnexion forcee
- Canon veille: reset timestamps reconnexion (pas de boucle de mort)
- Canon reveil: guard _reveil_en_cours dans thread preview + surveiller_dslr
- Canon capture: attente auto reveil (60s max) au lieu de 503 immediat
- Canon reconnexion quand _echecs_connexion == 0
- UX: sequence "Attention!" → "Preparez-vous!" → 3 → 2 → 1
- UX: pre-messages uniquement photo simple + 1ere photo pellicule
- UX: pas de compteur "Photo 1/1" en mode simple
- UX: pas de cadre propose pour pellicule
- UX: taille texte countdown reduite pour Surface (scale-factor 3)
- Impression: N jobs lp separes au lieu de lp -n (Mitsubishi ignore -n)
- Bouton Terminer grise pendant impression

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-09-02 18:54:10 +02:00
parent 4e267492c2
commit 583b89f0bd
8 changed files with 179 additions and 85 deletions

View File

@@ -9,6 +9,11 @@ async function ouvrirImpression() {
document.getElementById('nb-exemplaires').textContent = nbExemplaires;
cadreChoisi = null;
if (modeActuel === 'multi') {
document.getElementById('form-impression').classList.remove('cache');
return;
}
const hasCadres = await chargerCadresChoixImpression();
if (hasCadres) {
document.getElementById('popup-cadre-impression').classList.remove('cache');
@@ -101,6 +106,8 @@ function changerExemplaires(delta) {
async function lancerImpression() {
if (!photoFinale) return;
fermerImpression();
const btnTerminer = document.getElementById('btn-terminer');
if (btnTerminer) { btnTerminer.disabled = true; btnTerminer.style.opacity = '0.4'; }
// Pour les strips, imprimer la version 2 bandes sur 10x15
const fichierImpression = photoImpression || photoFinale;
afficherStatut(`Impression de ${nbExemplaires} exemplaire(s)...`, 'succes');
@@ -110,6 +117,7 @@ async function lancerImpression() {
cadre: cadreChoisi || undefined,
format_papier: formatImpression || undefined,
});
if (btnTerminer) { btnTerminer.disabled = false; btnTerminer.style.opacity = ''; }
if (resultat.attente) {
afficherStatutEco('⏳', resultat.message || 'Votre photo sortira avec la suivante !', 'attente-eco');
} else if (resultat.jumeau && resultat.succes) {