diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py index edbc509d84..aed38a3949 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -58,7 +58,6 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): # The minimum version of firmware that support print job actions over cloud. PRINT_JOB_ACTIONS_MIN_VERSION = Version("5.2.12") - PRINT_JOB_ACTIONS_MIN_VERSION_METHOD = Version("2.700") # Notify can only use signals that are defined by the class that they are in, not inherited ones. # Therefore, we create a private signal used to trigger the printersChanged signal. @@ -214,7 +213,12 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): return # Export the scene to the correct file type. - job = ExportFileJob(file_handler=file_handler, nodes=nodes, firmware_version=self.firmwareVersion) + job = ExportFileJob( + file_handler=file_handler, + nodes=nodes, + firmware_version=self.firmwareVersion, + print_type=self.printerType, + ) job.finished.connect(self._onPrintJobCreated) job.start() @@ -319,19 +323,29 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): PrintJobUploadErrorMessage(message).show() self.writeError.emit() + @pyqtProperty(bool, notify=_cloudClusterPrintersChanged) + def isMethod(self) -> bool: + """Whether the printer that this output device represents is a Method series printer.""" + + if not self._printers: + return False + + [printer, *_] = self._printers + return printer.pinterType in ("ultimaker_methodx", "ultimaker_methodxl") + @pyqtProperty(bool, notify=_cloudClusterPrintersChanged) def supportsPrintJobActions(self) -> bool: """Whether the printer that this output device represents supports print job actions via the cloud.""" if not self._printers: return False + + if self.isMethod: + return True + version_number = self.printers[0].firmwareVersion.split(".") - if len(version_number)> 2: - firmware_version = Version([version_number[0], version_number[1], version_number[2]]) - return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION - else: - firmware_version = Version([version_number[0], version_number[1]]) - return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION_METHOD + firmware_version = Version([version_number[0], version_number[1], version_number[2]]) + return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION @pyqtProperty(bool, constant = True) diff --git a/plugins/UM3NetworkPrinting/src/ExportFileJob.py b/plugins/UM3NetworkPrinting/src/ExportFileJob.py index 953b167a6e..ac3da65719 100644 --- a/plugins/UM3NetworkPrinting/src/ExportFileJob.py +++ b/plugins/UM3NetworkPrinting/src/ExportFileJob.py @@ -16,9 +16,9 @@ from .MeshFormatHandler import MeshFormatHandler class ExportFileJob(WriteFileJob): """Job that exports the build plate to the correct file format for the target cluster.""" - def __init__(self, file_handler: Optional[FileHandler], nodes: List[SceneNode], firmware_version: str) -> None: - - self._mesh_format_handler = MeshFormatHandler(file_handler, firmware_version) + def __init__(self, file_handler: Optional[FileHandler], nodes: List[SceneNode], firmware_version: str, + print_type: str) -> None: + self._mesh_format_handler = MeshFormatHandler(file_handler, firmware_version, print_type) if not self._mesh_format_handler.is_valid: Logger.log("e", "Missing file or mesh writer!") return diff --git a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py index e6054773d8..2ca8f9f3ce 100644 --- a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py +++ b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py @@ -19,10 +19,9 @@ I18N_CATALOG = i18nCatalog("cura") class MeshFormatHandler: """This class is responsible for choosing the formats used by the connected clusters.""" - - def __init__(self, file_handler: Optional[FileHandler], firmware_version: str) -> None: + def __init__(self, file_handler: Optional[FileHandler], firmware_version: str, printer_type: str) -> None: self._file_handler = file_handler or CuraApplication.getInstance().getMeshFileHandler() - self._preferred_format = self._getPreferredFormat(firmware_version) + self._preferred_format = self._getPreferredFormat(firmware_version, printer_type) self._writer = self._getWriter(self.mime_type) if self._preferred_format else None @property @@ -82,7 +81,7 @@ class MeshFormatHandler: value = value.encode() return value - def _getPreferredFormat(self, firmware_version: str) -> Dict[str, Union[str, int, bool]]: + def _getPreferredFormat(self, firmware_version: str, printer_type: str) -> Dict[str, Union[str, int, bool]]: """Chooses the preferred file format for the given file handler. :param firmware_version: The version of the firmware. @@ -103,13 +102,11 @@ class MeshFormatHandler: machine_file_formats = [file_type.strip() for file_type in machine_file_formats] # Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. - if "application/x-ufp" not in machine_file_formats and Version(firmware_version) >= Version("4.4"): + if printer_type in ( + "ultimaker3", "ultimaker3_extended") and "application/x-ufp" not in machine_file_formats and Version( + firmware_version) >= Version("4.4"): machine_file_formats = ["application/x-ufp"] + machine_file_formats - # Exception for makerbot firmware version >=2.700: makerbot is supported - elif "application/x-makerbot" not in machine_file_formats and Version(firmware_version >= Version("2.700")): - machine_file_formats = ["application/x-makerbot"] + machine_file_formats - # Take the intersection between file_formats and machine_file_formats. format_by_mimetype = {f["mime_type"]: f for f in file_formats} diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py index 2ef18e76e4..2a57bd0321 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -146,7 +146,12 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): self.writeStarted.emit(self) # Export the scene to the correct file type. - job = ExportFileJob(file_handler=file_handler, nodes=nodes, firmware_version=self.firmwareVersion) + job = ExportFileJob( + file_handler=file_handler, + nodes=nodes, + firmware_version=self.firmwareVersion, + print_type=self.printerType, + ) job.finished.connect(self._onPrintJobCreated) job.start()