all
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user