2024-07-24 17:15:46 +03:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2024-07-24 17:15:47 +03:00
|
|
|
from octoprint_bambu_printer.printer.print_job import PrintJob
|
2024-07-24 17:15:46 +03:00
|
|
|
from octoprint_bambu_printer.printer.states.a_printer_state import APrinterState
|
|
|
|
|
|
|
|
|
|
|
|
class IdleState(APrinterState):
|
2024-07-24 17:15:46 +03:00
|
|
|
|
2024-07-24 17:15:47 +03:00
|
|
|
def init(self):
|
|
|
|
if self._printer.file_system.has_selected_file:
|
|
|
|
self.update_print_job_info()
|
|
|
|
|
2024-07-24 17:15:46 +03:00
|
|
|
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")
|
|
|
|
return
|
|
|
|
|
|
|
|
print_command = self._get_print_command_for_file(selected_file)
|
|
|
|
if self._printer.bambu_client.publish(print_command):
|
|
|
|
self._log.info(f"Started print for {selected_file.file_name}")
|
|
|
|
self._printer.change_state(self._printer._state_printing)
|
|
|
|
else:
|
|
|
|
self._log.warn(f"Failed to start print for {selected_file.file_name}")
|
|
|
|
self._printer.change_state(self._printer._state_idle)
|
|
|
|
|
|
|
|
def _get_print_command_for_file(self, selected_file):
|
|
|
|
print_command = {
|
|
|
|
"print": {
|
|
|
|
"sequence_id": 0,
|
|
|
|
"command": "project_file",
|
|
|
|
"param": "Metadata/plate_1.gcode",
|
|
|
|
"md5": "",
|
|
|
|
"profile_id": "0",
|
|
|
|
"project_id": "0",
|
|
|
|
"subtask_id": "0",
|
|
|
|
"task_id": "0",
|
|
|
|
"subtask_name": f"{selected_file}",
|
|
|
|
"file": f"{selected_file}",
|
|
|
|
"url": (
|
|
|
|
f"file:///mnt/sdcard/{selected_file}"
|
|
|
|
if self._printer._settings.get_boolean(["device_type"])
|
|
|
|
in ["X1", "X1C"]
|
|
|
|
else f"file:///sdcard/{selected_file}"
|
|
|
|
),
|
|
|
|
"timelapse": self._printer._settings.get_boolean(["timelapse"]),
|
|
|
|
"bed_leveling": self._printer._settings.get_boolean(["bed_leveling"]),
|
|
|
|
"flow_cali": self._printer._settings.get_boolean(["flow_cali"]),
|
|
|
|
"vibration_cali": self._printer._settings.get_boolean(
|
|
|
|
["vibration_cali"]
|
|
|
|
),
|
|
|
|
"layer_inspect": self._printer._settings.get_boolean(["layer_inspect"]),
|
|
|
|
"use_ams": self._printer._settings.get_boolean(["use_ams"]),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return print_command
|
2024-07-24 17:15:47 +03:00
|
|
|
|
|
|
|
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
|
|
|
|
)
|