diff --git a/imptune/api/pages.py b/imptune/api/pages.py index 7d6de82..688d2fc 100644 --- a/imptune/api/pages.py +++ b/imptune/api/pages.py @@ -7,6 +7,7 @@ from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from peewee import JOIN + router = APIRouter() templates = Jinja2Templates(directory=str(Path(__file__).parent.parent / "templates")) @@ -73,6 +74,35 @@ def printers_page(request: Request): ) +@router.get("/printers/{printer_id}", response_class=HTMLResponse) +def printer_detail(request: Request, printer_id: int): + from imptune.db.models import Client, Driver, Printer + + printer = ( + Printer.select(Printer, Client, Driver) + .join(Client, JOIN.LEFT_OUTER) + .switch(Printer) + .join(Driver, JOIN.LEFT_OUTER) + .where(Printer.id == printer_id) + .first() + ) + if printer is None: + return HTMLResponse( + content="

404 Not Found

Printer not found.

", + status_code=404, + ) + + driver_names: list[str] = [] + if printer.driver_id and printer.driver.driver_desc: + driver_names = json.loads(printer.driver.driver_desc) + + return templates.TemplateResponse( + request=request, + name="printer_detail.html", + context={"printer": printer, "driver_names": driver_names}, + ) + + @router.get("/clients", response_class=HTMLResponse) def clients_page(request: Request): from imptune.db.models import Client diff --git a/imptune/templates/partials/printer_list.html b/imptune/templates/partials/printer_list.html index f9f6edf..8970497 100644 --- a/imptune/templates/partials/printer_list.html +++ b/imptune/templates/partials/printer_list.html @@ -22,7 +22,7 @@ {% for p in printers %} - {{ p.name }} + {{ p.name }} {{ p.ip_address }} {{ p.port_name }} {{ p.driver.original_filename if p.driver_id else '—' }} diff --git a/imptune/templates/printer_detail.html b/imptune/templates/printer_detail.html new file mode 100644 index 0000000..ecc2f78 --- /dev/null +++ b/imptune/templates/printer_detail.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% block content %} +

{{ printer.name }}

+
+

Configuration

+
+
IP Address
{{ printer.ip_address }}
+
Port Name
{{ printer.port_name }}
+
Duplex Mode
{{ printer.duplex_mode }}
+
Color Mode
{{ "Color" if printer.color_mode else "Grayscale" }}
+
Paper Size
{{ printer.paper_size }}
+
Collate
{{ "Yes" if printer.collate else "No" }}
+
Client
{{ printer.client.name if printer.client_id else "Unassigned" }}
+
+ +

Driver

+ {% if printer.driver_id %} +
+
Package
{{ printer.driver.original_filename }}
+
Driver Name(s)
{{ driver_names | join(", ") }}
+
Architecture
{{ printer.driver.architecture or "Unknown" }}
+
+ {% else %} +

No driver assigned

+ {% endif %} + +

Actions

+ + Back to Printers +
+{% endblock %}