Browse Source

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.
Ghostkeeper 3 years ago
parent
commit
43f1df1723
1 changed files with 12 additions and 1 deletions
  1. 12 1
      cura/Machines/Models/MaterialManagementModel.py

+ 12 - 1
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