all
🚀 Deploy — JH Photomaton / 🔍 Vérification (push) Has been cancelled
🚀 Deploy — JH Photomaton / 🍓 Deploy sur le Pi (push) Has been cancelled

This commit is contained in:
2026-07-17 00:44:22 +02:00
parent 209f81aa3d
commit 9a006f1457
23 changed files with 3712 additions and 484 deletions
+48
View File
@@ -1,5 +1,6 @@
"""API gestion de la file d'attente d'impression."""
import asyncio
import logging
from pathlib import Path
@@ -33,6 +34,12 @@ async def print_request(
await ws.broadcast({"type": "print_request", "entry": entry})
# Compteur statistiques événement
event_svc = getattr(request.app.state, "event_service", None)
if event_svc:
slug = request.app.state.config.event.slug
asyncio.create_task(event_svc.increment(slug, "print_requests"))
# Feedback LED si impression directe
if request.app.state.config.print.mode == "direct":
led.play("printing")
@@ -71,6 +78,10 @@ async def execute_print(
if result["success"]:
led.play("finished")
event_svc = getattr(request.app.state, "event_service", None)
if event_svc:
slug = request.app.state.config.event.slug
asyncio.create_task(event_svc.increment(slug, "prints_done"))
else:
led.play("error")
@@ -112,3 +123,40 @@ async def set_print_mode(request: Request, mode: str = Query(...)):
config_svc.save_print_mode(mode)
request.app.state.config.print.mode = mode
return {"ok": True, "mode": mode}
# ── Gestion avancée des imprimantes CUPS ──────────────────────────────────────
@router.post("/print/printers/{printer_name}/enable")
async def printer_enable(request: Request, printer_name: str):
"""Active une imprimante CUPS (cupsenable + cupsaccept)."""
ok = await request.app.state.printer_service.enable_printer(printer_name)
return {"ok": ok, "printer": printer_name, "action": "enable"}
@router.post("/print/printers/{printer_name}/disable")
async def printer_disable(request: Request, printer_name: str):
"""Désactive une imprimante CUPS (cupsdisable)."""
ok = await request.app.state.printer_service.disable_printer(printer_name)
return {"ok": ok, "printer": printer_name, "action": "disable"}
@router.post("/print/printers/{printer_name}/reject")
async def printer_reject(request: Request, printer_name: str):
"""Refuse les nouveaux jobs sans stopper l'impression en cours."""
ok = await request.app.state.printer_service.reject_jobs(printer_name)
return {"ok": ok, "printer": printer_name, "action": "reject"}
@router.get("/print/printers/{printer_name}/jobs")
async def printer_jobs(request: Request, printer_name: str):
"""Liste les jobs CUPS en cours pour une imprimante."""
jobs = await request.app.state.printer_service.get_cups_jobs(printer_name)
return {"printer": printer_name, "jobs": jobs}
@router.delete("/print/printers/jobs/{job_id}")
async def cancel_one_job(request: Request, job_id: str):
"""Annule un job CUPS précis par son ID."""
ok = await request.app.state.printer_service.cancel_cups_job(job_id)
return {"ok": ok, "job_id": job_id}