Просмотр исходного кода

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 лет назад
Родитель
Сommit
43f1df1723
1 измененных файлов с 12 добавлено и 1 удалено
  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