From 74cafe1c4b84a7be6321e6fd4197de18aa97afae Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 24 Sep 2024 08:55:29 +0200 Subject: [PATCH] Handle message too big error when sending model data to engine CURA-11103 --- plugins/CuraEngineBackend/CuraEngineBackend.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index dd7987bc42f..a7126af14e8 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -197,7 +197,8 @@ def __init__(self) -> None: self._slicing_error_message.actionTriggered.connect(self._reportBackendError) self._resetLastSliceTimeStats() - self._snapshot: Optional[QImage] = None + self._snapshot: Optional[QImage] = None + self._last_socket_error: Optional[Arcus.Error] = None application.initializationFinished.connect(self.initialize) @@ -569,7 +570,19 @@ def _onStartSliceCompleted(self, job: StartSliceJob) -> None: return # Preparation completed, send it to the backend. - self._socket.sendMessage(job.getSliceMessage()) + if not self._socket.sendMessage(job.getSliceMessage()): + if self._last_socket_error is not None and self._last_socket_error.getErrorCode() == Arcus.ErrorCode.MessageTooBigError: + error_txt = catalog.i18nc("@info:status", "Unable to send the model data to the engine. Please try to use a less detailed model, or reduce the number of instances.") + else: + error_txt = catalog.i18nc("@info:status", "Unable to send the model data to the engine. Please try again, or contact support.") + + self._error_message = Message(error_txt, + title=catalog.i18nc("@info:title", "Unable to slice"), + message_type=Message.MessageType.WARNING) + self._error_message.show() + self.setState(BackendState.Error) + self.backendError.emit(job) + return # Notify the user that it's now up to the backend to do its job self.setState(BackendState.Processing) @@ -691,6 +704,7 @@ def _onSocketError(self, error: Arcus.Error) -> None: if error.getErrorCode() == Arcus.ErrorCode.Debug: return + self._last_socket_error = error self._terminate() self._createSocket()