From 7d19098b61a1052da1777d8d781dca231ac6bb9e Mon Sep 17 00:00:00 2001 From: n07070 Date: Fri, 12 Jun 2026 17:19:53 +0200 Subject: [PATCH] Change management of state : we assume the printer is online. Otherwise, because this is a real-time command, we might not get the good answer and fail to print fast enough. See https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/realtime_commands.html --- src/printer.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/printer.py b/src/printer.py index 27acdb9..3a886b3 100644 --- a/src/printer.py +++ b/src/printer.py @@ -322,22 +322,29 @@ class EscPosPrinter(Printer): self.app.logger.info("Did a cut") self.ready = True - def _state(self): - self.app.logger.debug("Online : %s " , self.printer.is_online()) - self.app.logger.debug("Has paper : %s " , self._has_paper()) - self.app.logger.debug("Ready : %s " , self.ready) - return self.printer.is_online() and self.ready and self._has_paper() + def _state(self) -> bool: + has_paper = self._has_paper() + is_ready = self.ready + + self.app.logger.debug("Has paper : %s " , has_paper ) + self.app.logger.debug("Ready : %s " , is_ready ) + + return is_ready and has_paper # and is_online def print_task(self, task_type, data): """Execute actual print based on task type""" + + with self._lock: self.app.logger.debug("Acquired lock to start print") - while not self._state(): - self.app.logger.debug("Waiting for the printer to become ready..") + i_m_ready = self._state() + while not i_m_ready: + self.app.logger.debug("Waiting for the printer to become ready, current state %s ", str(i_m_ready)) + i_m_ready = self._state() time.sleep(0.3) - self.app.logger.debug("Checked state to start printing %s", self._state()) + self.app.logger.debug("Checked state to start printing : %s", self._state()) self.ready = False try: self.app.logger.debug("Checking task type")