Added a bunch of thread yields

CURA-1263
This commit is contained in:
Jaime van Kessel 2016-11-25 16:25:24 +01:00
parent ef7004fb72
commit 484c7df5bc

View file

@ -8,7 +8,7 @@ from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.MimeTypeDatabase import MimeTypeDatabase from UM.MimeTypeDatabase import MimeTypeDatabase
from UM.Job import Job
from UM.Preferences import Preferences from UM.Preferences import Preferences
from .WorkspaceDialog import WorkspaceDialog from .WorkspaceDialog import WorkspaceDialog
@ -70,6 +70,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if stacks[0].getContainer(index).getId() != container_id: if stacks[0].getContainer(index).getId() != container_id:
machine_conflict = True machine_conflict = True
break break
Job.yieldThread()
material_conflict = False material_conflict = False
xml_material_profile = self._getXmlProfileClass() xml_material_profile = self._getXmlProfileClass()
@ -82,6 +83,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
materials = self._container_registry.findInstanceContainers(id=container_id) materials = self._container_registry.findInstanceContainers(id=container_id)
if materials and not materials[0].isReadOnly(): # Only non readonly materials can be in conflict if materials and not materials[0].isReadOnly(): # Only non readonly materials can be in conflict
material_conflict = True material_conflict = True
Job.yieldThread()
# Check if any quality_changes instance container is in conflict. # Check if any quality_changes instance container is in conflict.
instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)] instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)]
@ -100,6 +102,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if quality_changes[0] != instance_container: if quality_changes[0] != instance_container:
quality_changes_conflict = True quality_changes_conflict = True
break break
Job.yieldThread()
try: try:
archive.open("Cura/preferences.cfg") archive.open("Cura/preferences.cfg")
except KeyError: except KeyError:
@ -164,6 +167,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
definition_container = DefinitionContainer(container_id) definition_container = DefinitionContainer(container_id)
definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8")) definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"))
self._container_registry.addContainer(definition_container) self._container_registry.addContainer(definition_container)
Job.yieldThread()
Logger.log("d", "Workspace loading is checking materials...") Logger.log("d", "Workspace loading is checking materials...")
material_containers = [] material_containers = []
@ -191,6 +195,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
material_container.deserialize(archive.open(material_container_file).read().decode("utf-8")) material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"))
containers_to_add.append(material_container) containers_to_add.append(material_container)
material_containers.append(material_container) material_containers.append(material_container)
Job.yieldThread()
Logger.log("d", "Workspace loading is checking instance containers...") Logger.log("d", "Workspace loading is checking instance containers...")
# Get quality_changes and user profiles saved in the workspace # Get quality_changes and user profiles saved in the workspace
@ -204,6 +209,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
# Deserialize InstanceContainer by converting read data from bytes to string # Deserialize InstanceContainer by converting read data from bytes to string
instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8"))
container_type = instance_container.getMetaDataEntry("type") container_type = instance_container.getMetaDataEntry("type")
Job.yieldThread()
if container_type == "user": if container_type == "user":
# Check if quality changes already exists. # Check if quality changes already exists.
user_containers = self._container_registry.findInstanceContainers(id=container_id) user_containers = self._container_registry.findInstanceContainers(id=container_id)
@ -296,6 +302,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
extruder_stacks.append(stack) extruder_stacks.append(stack)
else: else:
global_stack = stack global_stack = stack
Job.yieldThread()
except: except:
Logger.log("W", "We failed to serialize the stack. Trying to clean up.") Logger.log("W", "We failed to serialize the stack. Trying to clean up.")
# Something went really wrong. Try to remove any data that we added. # Something went really wrong. Try to remove any data that we added.
@ -372,10 +379,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
for container in global_stack.getContainers(): for container in global_stack.getContainers():
global_stack.containersChanged.emit(container) global_stack.containersChanged.emit(container)
Job.yieldThread()
for stack in extruder_stacks: for stack in extruder_stacks:
stack.setNextStack(global_stack) stack.setNextStack(global_stack)
for container in stack.getContainers(): for container in stack.getContainers():
stack.containersChanged.emit(container) stack.containersChanged.emit(container)
Job.yieldThread()
# Actually change the active machine. # Actually change the active machine.
Application.getInstance().setGlobalContainerStack(global_stack) Application.getInstance().setGlobalContainerStack(global_stack)