Changes to be committed:
🚀 Deploy — JH Photomaton / 🔍 Vérification (push) Has been cancelled
🚀 Deploy — JH Photomaton / 🍓 Deploy sur le Pi (push) Has been cancelled

modified:   Opencode/scripts/script_print.sh
	modified:   backend/services/printer_service.py
	modified:   frontend/templates/admin/actions.html
	modified:   frontend/templates/admin/events.html
	modified:   frontend/templates/admin/gallery.html
	modified:   frontend/templates/admin/settings.html
	modified:   frontend/templates/base.html
	modified:   frontend/templates/public/gallery.html
 Untracked files:
	photobooth-app/script/
	photobooth-app/userdata/
This commit is contained in:
2026-07-17 17:02:57 +02:00
parent c32b3ba345
commit 68b0a36031
8 changed files with 92 additions and 68 deletions
+61 -20
View File
@@ -113,26 +113,67 @@ fi
# --- Impression ---
log_info "Impression x${copies} sur $SELECTED_PRINTER: $FILE_TO_PRINT"
if lp -n "$copies" -d "$SELECTED_PRINTER" $PRINT_OPTIONS "$FILE_TO_PRINT"; then
log_info "Job d'impression envoye avec succes"
# Sortie parsable par Node-RED pour les compteurs
echo "PRINTED:${SELECTED_PRINTER}:${copies}"
# Nettoyage du fichier temporaire (apres que CUPS l'ait lu)
if [ "$FILE_TO_PRINT" = "$filename_print" ] && [ -f "$filename_print" ]; then
(sleep 30 && rm -f "$filename_print" 2>/dev/null) &
fi
exit 0
else
log_error "Echec de l'envoi du job d'impression"
echo "PRINT_ERROR:${SELECTED_PRINTER}"
# Nettoyage meme en cas d'erreur
if [ -f "$filename_print" ]; then
rm -f "$filename_print" 2>/dev/null
fi
# Envoi du job CUPS et capture du job ID
job_output=$(lp -n "$copies" -d "$SELECTED_PRINTER" $PRINT_OPTIONS "$FILE_TO_PRINT" 2>&1)
lp_exit=$?
if [ $lp_exit -ne 0 ]; then
log_error "lp a echoue (exit $lp_exit): $job_output"
echo "PRINT_ERROR:${SELECTED_PRINTER}:lp_failed"
[ -f "$filename_print" ] && rm -f "$filename_print" 2>/dev/null
exit 1
fi
# Extraction du job ID (ex: "request id is Selphy_Blanche_WiFi-42 (1 file(s))")
JOB_ID=$(echo "$job_output" | grep -oE '[A-Za-z0-9_-]+-[0-9]+' | head -1)
log_info "Job CUPS accepte: ${JOB_ID:-inconnu}"
# Si le job ID est introuvable, comportement legacy (retour immediat)
if [ -z "$JOB_ID" ]; then
log_info "Job ID non extrait impression reputee reussie"
echo "PRINTED:${SELECTED_PRINTER}:${copies}"
[ "$FILE_TO_PRINT" = "$filename_print" ] && (sleep 30 && rm -f "$filename_print" 2>/dev/null) &
exit 0
fi
# --- Suivi du job CUPS (attend la completion physique) ---
MAX_WAIT=90 # secondes max (Selphy CP1300 ~ 60s)
POLL_INTERVAL=3
elapsed=0
log_info "Suivi du job CUPS (max ${MAX_WAIT}s)..."
while [ $elapsed -lt $MAX_WAIT ]; do
sleep $POLL_INTERVAL
elapsed=$((elapsed + POLL_INTERVAL))
# Succes : job dans la liste des jobs termines
if lpstat -W completed 2>/dev/null | grep -q "^${JOB_ID} "; then
log_info "Job $JOB_ID termine avec succes (${elapsed}s)"
echo "PRINTED:${SELECTED_PRINTER}:${copies}"
[ "$FILE_TO_PRINT" = "$filename_print" ] && rm -f "$filename_print" 2>/dev/null
exit 0
fi
# Erreur : imprimante stoppee (papier absent, capot ouvert, etc.)
printer_state=$(lpstat -p "$SELECTED_PRINTER" 2>/dev/null || true)
if echo "$printer_state" | grep -qiE "stopped|disabled"; then
reason=$(lpstat -l -p "$SELECTED_PRINTER" 2>/dev/null \
| grep -i "Reason:" | head -1 \
| sed 's/.*Reason:[[:space:]]*//' | xargs)
log_error "Imprimante $SELECTED_PRINTER en erreur: ${reason:-stopped} (apres ${elapsed}s)"
cancel "$JOB_ID" 2>/dev/null || true
echo "PRINT_ERROR:${SELECTED_PRINTER}:${reason:-stopped}"
[ -f "$filename_print" ] && rm -f "$filename_print" 2>/dev/null
exit 1
fi
log_info "Impression en cours... (${elapsed}s / ${MAX_WAIT}s)"
done
# Timeout : annule le job CUPS
log_error "Timeout impression apres ${MAX_WAIT}s (job: $JOB_ID)"
cancel "$JOB_ID" 2>/dev/null || true
echo "PRINT_ERROR:${SELECTED_PRINTER}:timeout_${MAX_WAIT}s"
[ -f "$filename_print" ] && rm -f "$filename_print" 2>/dev/null
exit 1