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.
This commit is contained in:
Ghostkeeper 2021-09-23 15:31:33 +02:00
parent 5266cbb950
commit 43f1df1723
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A

View file

@ -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