Requiring a name broke the simple 'just print this' API/CI use case --
now that only applies to explicit save/save_and_print, an omitted commit
param (or any other value) just prints, matching how these endpoints
behaved before the Save/Save & Print buttons were added.
Reads a Gitea API token from .gitea_token (gitignored, not present yet --
needs creating on the server), fetches open issues via the API, and prints
number/title/labels per issue with a running total. Button on the home page.
Name is now required (it's the only thing identifying what got saved),
and printing is an explicit separate choice instead of an implicit
side-effect of naming something.
- Saved labels/receipts now show on one page instead of split across
Shipping labels and Receipts, each with a badge for its type/printer,
Edit (name+content, in place), Print, and Delete.
- ZPL labels get a real visual preview via Labelary's public render API;
ESC/POS ones show their raw content (no good general preview for that).
- The Receipts free-text field only ever encoded whatever was typed as
literal printable characters -- pasting mnemonic ESC/POS notation
(ESC/GS/LF as command names, 0xNN as raw bytes) just printed as text
instead of being interpreted. Added a small line-based parser for that
notation (ReceiptBuilder#raw appends already-resolved bytes verbatim),
verified byte-for-byte against an example with align/bold/barcode/cut.
- Home page is now just the print server overview, no more unrelated
network links (3D printers, Cockpit) left over from when this was a
general landing page.
- Navbar shows which section is active; Brother's per-printer buttons
now live under a dedicated Brother nav item instead of always-visible.
- Shipping labels: paste raw ZPL directly (no need to save to a file
first), with a Labelary preview link alongside it.
- Receipts: paste already-formatted ESC/POS text directly, printed as-is.
- Both can save what they just printed into a shared label repository
(lib/label_repository.rb, one JSON file per label under data/labels/)
for reprinting later -- saving happens independently of whether the
print itself succeeds, so a failed/offline printer doesn't lose the
content.
Custom ReceiptBuilder instead of the escpos gem -- its diacritics handling
needed the same manual UTF-8->CP852 encode call anyway, based on earlier
experiments in ~/test/epson/.
Drops /brother/select and the session-based "active printer" state:
the printer key now lives in the path (/brother/<printer>/*), so the
proxy is stateless and any path under it -- including brother_ql_web's
API, not just its UI -- is reachable without a prior "activation" step.