mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-13 17:57:55 -06:00
Send progress update when failed
And update all of the printer statuses to make them appear failed, if we have a general failure in an earlier stage. Contributes to issue CURA-8609.
This commit is contained in:
parent
0fa6f650f6
commit
3ffffad1ed
1 changed files with 28 additions and 25 deletions
|
@ -26,6 +26,13 @@ if TYPE_CHECKING:
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
|
||||||
|
class UploadMaterialsError(Exception):
|
||||||
|
"""
|
||||||
|
Class to indicate something went wrong while uploading.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UploadMaterialsJob(Job):
|
class UploadMaterialsJob(Job):
|
||||||
"""
|
"""
|
||||||
Job that uploads a set of materials to the Digital Factory.
|
Job that uploads a set of materials to the Digital Factory.
|
||||||
|
@ -81,29 +88,21 @@ class UploadMaterialsJob(Job):
|
||||||
def onUploadRequestCompleted(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
def onUploadRequestCompleted(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
||||||
if error is not None:
|
if error is not None:
|
||||||
Logger.error(f"Could not request URL to upload material archive to: {error}")
|
Logger.error(f"Could not request URL to upload material archive to: {error}")
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
||||||
self.setResult(self.Result.FAILED)
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
return
|
return
|
||||||
|
|
||||||
response_data = HttpRequestManager.readJSON(reply)
|
response_data = HttpRequestManager.readJSON(reply)
|
||||||
if response_data is None:
|
if response_data is None:
|
||||||
Logger.error(f"Invalid response to material upload request. Could not parse JSON data.")
|
Logger.error(f"Invalid response to material upload request. Could not parse JSON data.")
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory appears to be corrupted.")))
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory appears to be corrupted.")))
|
||||||
self.setResult(self.Result.FAILED)
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
return
|
return
|
||||||
if "upload_url" not in response_data:
|
if "upload_url" not in response_data:
|
||||||
Logger.error(f"Invalid response to material upload request: Missing 'upload_url' field to upload archive to.")
|
Logger.error(f"Invalid response to material upload request: Missing 'upload_url' field to upload archive to.")
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
||||||
self.setResult(self.Result.FAILED)
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
return
|
return
|
||||||
if "material_profile_id" not in response_data:
|
if "material_profile_id" not in response_data:
|
||||||
Logger.error(f"Invalid response to material upload request: Missing 'material_profile_id' to communicate about the materials with the server.")
|
Logger.error(f"Invalid response to material upload request: Missing 'material_profile_id' to communicate about the materials with the server.")
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "The response from Digital Factory is missing important information.")))
|
||||||
self.setResult(self.Result.FAILED)
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
return
|
return
|
||||||
|
|
||||||
upload_url = response_data["upload_url"]
|
upload_url = response_data["upload_url"]
|
||||||
|
@ -121,9 +120,7 @@ class UploadMaterialsJob(Job):
|
||||||
def onUploadCompleted(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
def onUploadCompleted(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
||||||
if error is not None:
|
if error is not None:
|
||||||
Logger.error(f"Failed to upload material archive: {error}")
|
Logger.error(f"Failed to upload material archive: {error}")
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
||||||
self.setResult(self.Result.FAILED)
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for container_stack in self._printer_metadata:
|
for container_stack in self._printer_metadata:
|
||||||
|
@ -158,19 +155,25 @@ class UploadMaterialsJob(Job):
|
||||||
|
|
||||||
def onError(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
def onError(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"]):
|
||||||
Logger.error(f"Failed to upload material archive: {error}")
|
Logger.error(f"Failed to upload material archive: {error}")
|
||||||
self.setResult(self.Result.FAILED)
|
self.failed(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
||||||
self.setError(UploadMaterialsError(catalog.i18nc("@text:error", "Failed to connect to Digital Factory.")))
|
|
||||||
self.uploadCompleted.emit(self.getResult(), self.getError())
|
|
||||||
|
|
||||||
def getPrinterSyncStatus(self) -> Dict[str, str]:
|
def getPrinterSyncStatus(self) -> Dict[str, str]:
|
||||||
return self._printer_sync_status
|
return self._printer_sync_status
|
||||||
|
|
||||||
|
def failed(self, error: UploadMaterialsError) -> None:
|
||||||
|
"""
|
||||||
|
Helper function for when we have a general failure.
|
||||||
|
|
||||||
|
This sets the sync status for all printers to failed, sets the error on
|
||||||
|
the job and the result of the job to FAILED.
|
||||||
|
:param error: An error to show to the user.
|
||||||
|
"""
|
||||||
|
self.setResult(self.Result.FAILED)
|
||||||
|
self.setError(error)
|
||||||
|
for printer_id in self._printer_sync_status:
|
||||||
|
self._printer_sync_status[printer_id] = "failed"
|
||||||
|
self.uploadProgressChanged.emit(1.0, self.getPrinterSyncStatus())
|
||||||
|
self.uploadCompleted.emit(self.getResult(), self.getError())
|
||||||
|
|
||||||
def _onProcessProgressChanged(self, progress: float) -> None:
|
def _onProcessProgressChanged(self, progress: float) -> None:
|
||||||
self.uploadProgressChanged.emit(progress * 0.8, self.getPrinterSyncStatus()) # The processing is 80% of the progress bar.
|
self.uploadProgressChanged.emit(progress * 0.8, self.getPrinterSyncStatus()) # The processing is 80% of the progress bar.
|
||||||
|
|
||||||
|
|
||||||
class UploadMaterialsError(Exception):
|
|
||||||
"""
|
|
||||||
Class to indicate something went wrong while uploading.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue