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 %}