Don't crash if CuraStackBuilder failed to create a stack

If it failed to create a global stack, the extruder_stack_dict variable would not be defined, and Cura crashes. It may fail to create a stack because of an indexerror in a malformed project file.

Fixes Sentry issue CURA-137.
This commit is contained in:
Ghostkeeper 2020-08-10 11:16:07 +02:00
parent ba0efb82bc
commit fc6ea28352
No known key found for this signature in database
GPG Key ID: D2A8871EE34EC59A

View File

@ -758,21 +758,22 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
Job.yieldThread()
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
# Handle quality changes if any
self._processQualityChanges(global_stack)
if global_stack:
# Handle quality changes if any
self._processQualityChanges(global_stack)
# Prepare the machine
self._applyChangesToMachine(global_stack, extruder_stack_dict)
# Prepare the machine
self._applyChangesToMachine(global_stack, extruder_stack_dict)
Logger.log("d", "Workspace loading is notifying rest of the code of changes...")
# Actually change the active machine.
#
# This is scheduled for later is because it depends on the Variant/Material/Qualitiy Managers to have the latest
# data, but those managers will only update upon a container/container metadata changed signal. Because this
# function is running on the main thread (Qt thread), although those "changed" signals have been emitted, but
# they won't take effect until this function is done.
# To solve this, we schedule _updateActiveMachine() for later so it will have the latest data.
self._updateActiveMachine(global_stack)
Logger.log("d", "Workspace loading is notifying rest of the code of changes...")
# Actually change the active machine.
#
# This is scheduled for later is because it depends on the Variant/Material/Qualitiy Managers to have the latest
# data, but those managers will only update upon a container/container metadata changed signal. Because this
# function is running on the main thread (Qt thread), although those "changed" signals have been emitted, but
# they won't take effect until this function is done.
# To solve this, we schedule _updateActiveMachine() for later so it will have the latest data.
self._updateActiveMachine(global_stack)
# Load all the nodes / mesh data of the workspace
nodes = self._3mf_mesh_reader.read(file_name)