Restructure the code and implement a printing queue #29

Merged
n07070 merged 21 commits from restructure-printing-queue into master 2026-05-27 00:00:56 +02:00
Showing only changes of commit ee27c62d0f - Show all commits

View File

@@ -1,5 +1,6 @@
# Importing the module to manage the connection to the printer. # Importing the module to manage the connection to the printer.
import escpos.printer as escp import escpos.printer as escp
import brother-ql-inventree
from time import sleep, gmtime, strftime from time import sleep, gmtime, strftime
import os.path import os.path
from PIL import Image, ImageEnhance, ImageOps from PIL import Image, ImageEnhance, ImageOps
@@ -286,3 +287,93 @@ def process_image(self, path):
original_img.save(jpeg_path, format="JPEG", quality=95, optimize=True) original_img.save(jpeg_path, format="JPEG", quality=95, optimize=True)
return jpeg_path return jpeg_path
def discover_printers():
"""
We try to find all the connected printers ( 0 or n ) to this system.
For every type of supported printer, we try to autodiscover them.
http://www.linux-usb.org/usb.ids A list of USB vendor IDs
04b8 Seiko Epson Corp.
04f9 Brother Industries, Ltd
"""
def find_and_parse_borther_ql_printer():
## We might be able to no use this because there is a `discover` command in https://github.com/pklaus/brother_ql#usage
## Code stolen from https://framagit.org/stickoeur/diagnostickoeur/-/blob/no-masters/printit.py?ref_type=heads
"""Find and parse Brother QL printer information."""
model_manager = ModelsManager()
# Debug print to show we're searching
# print("Searching for Brother QL printer...")
for backend_name in ["pyusb", "linux_kernel"]:
try:
#print(f"Trying backend: {backend_name}")
backend = backend_factory(backend_name)
available_devices = backend["list_available_devices"]()
#print(f"Found {len(available_devices)} devices with {backend_name} backend")
for printer in available_devices:
#print(f"Found device: {printer}")
identifier = printer["identifier"]
parts = identifier.split("/")
if len(parts) < 4:
#print(f"Skipping device with invalid identifier format: {identifier}")
continue
protocol = parts[0]
device_info = parts[2]
serial_number = parts[3]
try:
vendor_id, product_id = device_info.split(":")
except ValueError:
#print(f"Invalid device info format: {device_info}")
continue
# Default model
model = "QL-570"
# Try to match product ID to determine actual model
try:
product_id_int = int(product_id, 16)
for m in model_manager.iter_elements():
if m.product_id == product_id_int:
model = m.identifier
break
#print(f"Matched printer model: {model}")
except ValueError:
#print(f"Invalid product ID format: {product_id}")
continue
printer_info = {
"identifier": identifier,
"backend": backend_name,
"model": model,
"protocol": protocol,
"vendor_id": vendor_id,
"product_id": product_id,
"serial_number": serial_number,
}
#print(f"Found printer: {printer_info}")
return printer_info
except Exception as e:
#print(f"Error with backend {backend_name}: {str(e)}")
continue
print("No Brother QL printer found")
return None
def fint_and_parse_epson_printer():
pass