What
Make the app aware of live printer state and capabilities, rather than treating every connected printer as an opaque "print here" target. This is the runtime-query counterpart to the persistence work in #20 — different code path (querying the printer / labelle library at runtime vs. saving user choices to the state file).
Scope
Backend (runtime query):
- Printer status / health checks — online/offline, and tape level where the device exposes it
- Printer-list caching to reduce repeated USB scans (scans are slow; cache + invalidate on change)
- Printer capability detection — supported tape sizes and colors per printer
Frontend (surfaces that depend on the above):
- Printer status indicators in the UI (online/offline, "powering up" state)
- Display detected tape type / color / width per printer
- Constrain the tape-size / color selectors to what the selected printer actually supports
Why
- Capability detection is the prerequisite for the nicer printer UI: you can't display or constrain to supported tape widths/colors until you can query them.
- USB scans are slow on the Pi; caching the printer list cuts latency on every page load.
- Status indicators make the kiosk/appliance use case far less confusing when a printer is offline or initializing.
Relationship to other issues
Notes
Source: distilled from the "Future Improvements → Printer status" bullets in docs/ARCHITECTURE.md. The idle-timeout USB auto-power-off from that same doc section is already implemented (power_save.py / usb_power.py) and is not part of this issue.
What
Make the app aware of live printer state and capabilities, rather than treating every connected printer as an opaque "print here" target. This is the runtime-query counterpart to the persistence work in #20 — different code path (querying the printer / labelle library at runtime vs. saving user choices to the state file).
Scope
Backend (runtime query):
Frontend (surfaces that depend on the above):
Why
Relationship to other issues
Notes
Source: distilled from the "Future Improvements → Printer status" bullets in
docs/ARCHITECTURE.md. The idle-timeout USB auto-power-off from that same doc section is already implemented (power_save.py/usb_power.py) and is not part of this issue.