Fix reset print job after new file selected.

This commit is contained in:
Anton Skrypnyk
2024-07-24 17:15:47 +03:00
parent f35f456eb2
commit 55b78cea05
8 changed files with 166 additions and 110 deletions

View File

@ -25,6 +25,9 @@ class APrinterState:
def handle_gcode(self, gcode):
self._log.debug(f"{self.__class__.__name__} gcode execution disabled")
def update_print_job_info(self):
self._log_skip_state_transition("start_new_print")
def start_new_print(self):
self._log_skip_state_transition("start_new_print")

View File

@ -1,15 +1,19 @@
from __future__ import annotations
from octoprint_bambu_printer.printer.print_job import PrintJob
from octoprint_bambu_printer.printer.states.a_printer_state import APrinterState
class IdleState(APrinterState):
def init(self):
if self._printer.file_system.has_selected_file:
self.update_print_job_info()
def start_new_print(self):
selected_file = self._printer.file_system.selected_file
if selected_file is None:
self._log.warn("Cannot start print job if file was not selected")
self._printer.change_state(self._printer._state_idle)
return
print_command = self._get_print_command_for_file(selected_file)
@ -51,3 +55,9 @@ class IdleState(APrinterState):
}
return print_command
def update_print_job_info(self):
if self._printer.file_system.selected_file is not None:
self._printer.current_print_job = PrintJob(
self._printer.file_system.selected_file, 0
)

View File

@ -23,16 +23,12 @@ class PrintingState(APrinterState):
def __init__(self, printer: BambuVirtualPrinter) -> None:
super().__init__(printer)
self._is_printing = False
self._print_job: PrintJob | None = None
self._sd_printing_thread = None
@property
def print_job(self):
return self._print_job
def init(self):
self._is_printing = True
self._printer.update_print_job_info()
self._printer.file_system.remove_file_selection()
self.update_print_job_info()
self._start_worker_thread()
def finalize(self):
@ -51,10 +47,9 @@ class PrintingState(APrinterState):
while (
self._is_printing
and self._printer.current_print_job is not None
and self._printer.current_print_job.file_position
< self._printer.current_print_job.file_info.size
and self._printer.current_print_job.progress < 100
):
self._printer.update_print_job_info()
self.update_print_job_info()
self._printer.report_print_job_status()
time.sleep(3)
@ -63,12 +58,23 @@ class PrintingState(APrinterState):
self._log.warn("Printing state was triggered with empty print job")
return
if (
self._printer.current_print_job.file_position
>= self._printer.current_print_job.file_info.size
):
if self._printer.current_print_job.progress >= 100:
self._finish_print()
def update_print_job_info(self):
print_job_info = self._printer.bambu_client.get_device().print_job
task_name: str = print_job_info.subtask_name
project_file_info = self._printer.file_system.get_data_by_suffix(
task_name, [".3mf", ".gcode.3mf"]
)
if project_file_info is None:
self._log.debug(f"No 3mf file found for {print_job_info}")
self._current_print_job = None
return
progress = print_job_info.print_percentage
self._printer.current_print_job = PrintJob(project_file_info, progress)
def pause_print(self):
if self._printer.bambu_client.connected:
if self._printer.bambu_client.publish(pybambu.commands.PAUSE):