diff --git a/octoprint_bambu_printer/printer/printer_serial_io.py b/octoprint_bambu_printer/printer/printer_serial_io.py index 35324a2..0a9e877 100644 --- a/octoprint_bambu_printer/printer/printer_serial_io.py +++ b/octoprint_bambu_printer/printer/printer_serial_io.py @@ -64,24 +64,25 @@ class PrinterSerialIO(threading.Thread): data = to_bytes(data, encoding="ascii", errors="replace") self.input_bytes.task_done() - line, buffer = self._read_next_line_buffered(data, buffer) + buffer += data + line, buffer = self._read_next_line(buffer) while line is not None: self._received_lines += 1 self._process_input_gcode_line(line) - line, buffer = self._read_next_line_buffered(data, buffer) + line, buffer = self._read_next_line(buffer) except queue.Empty: continue self._log.debug("Closing IO read loop") - def _read_next_line_buffered(self, additional: bytes, buffer: bytes): - buffer += additional + def _read_next_line(self, buffer: bytes): new_line_pos = buffer.find(b"\n") + 1 if new_line_pos > 0: - additional = buffer[:new_line_pos] + line = buffer[:new_line_pos] buffer = buffer[new_line_pos:] - - return additional, buffer + return line, buffer + else: + return None, buffer def close(self): self.flush() diff --git a/test/test_gcode_execution.py b/test/test_gcode_execution.py index e686234..c56affd 100644 --- a/test/test_gcode_execution.py +++ b/test/test_gcode_execution.py @@ -96,6 +96,7 @@ def ftps_session_mock(files_info_ftp): ftps_session.size.side_effect = DictGetter( {file: info[0] for file, info in files_info_ftp.items()} ) + ftps_session.sendcmd.side_effect = DictGetter( {f"MDTM {file}": info[1] for file, info in files_info_ftp.items()} ) @@ -141,7 +142,7 @@ def test_initial_state(printer: BambuVirtualPrinter): def test_list_sd_card(printer: BambuVirtualPrinter): printer.write(b"M20\n") # GCode for listing SD card - printer.flush() + printer.close() result = printer.readlines() assert result == "" # Replace with the actual expected result