From 43f1df17238a244c1d7dafb4e75d4205115ed2e2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Sep 2021 15:31:33 +0200 Subject: [PATCH] Show error when failing to save archive It could be that you don't have permission to save the archive. Instead of crashing Cura, show an error to the user. Fixes Sentry issue CURA-2VS. --- cura/Machines/Models/MaterialManagementModel.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index 40d81004fe..c75e16cd63 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -9,6 +9,7 @@ import zipfile # To export all materials in a .zip archive. from UM.i18n import i18nCatalog from UM.Logger import Logger +from UM.Message import Message from UM.Signal import postponeSignals, CompressTechnique import cura.CuraApplication # Imported like this to prevent circular imports. @@ -287,7 +288,17 @@ class MaterialManagementModel(QObject): """ registry = CuraContainerRegistry.getInstance() - archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED) + try: + archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED) + except OSError as e: + Logger.log("e", f"Can't write to destination {file_path.toLocalFile()}: {type(e)} - {str(e)}") + error_message = Message( + text = catalog.i18nc("@message:text", "Could not save material archive to {}:").format(file_path.toLocalFile()) + " " + str(e), + title = catalog.i18nc("@message:title", "Failed to save material archive"), + message_type = Message.MessageType.ERROR + ) + error_message.show() + return for metadata in registry.findInstanceContainersMetadata(type = "material"): if metadata["base_file"] != metadata["id"]: # Only process base files. continue