diff --git a/src/printer.py b/src/printer.py index 127c1ae..dd50584 100644 --- a/src/printer.py +++ b/src/printer.py @@ -1,5 +1,6 @@ # Importing the module to manage the connection to the printer. import escpos.printer as escp +import brother-ql-inventree from time import sleep, gmtime, strftime import os.path 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) 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 \ No newline at end of file