feat: mimic blender undo handling

This commit is contained in:
Swann
2020-10-15 17:21:14 +02:00
parent 9f8222afa7
commit f151c61d7b
2 changed files with 19 additions and 11 deletions

View File

@ -128,9 +128,9 @@ class BlDatablock(ReplicatedDatablock):
if instance and hasattr(instance, 'uuid'): if instance and hasattr(instance, 'uuid'):
instance.uuid = self.uuid instance.uuid = self.uuid
self.diff_method = DIFF_BINARY # self.diff_method = DIFF_BINARY
def resolve(self): def resolve(self, construct = True):
datablock_ref = None datablock_ref = None
datablock_root = getattr(bpy.data, self.bl_id) datablock_root = getattr(bpy.data, self.bl_id)
datablock_ref = utils.find_from_attr('uuid', self.uuid, datablock_root) datablock_ref = utils.find_from_attr('uuid', self.uuid, datablock_root)
@ -139,14 +139,18 @@ class BlDatablock(ReplicatedDatablock):
try: try:
datablock_ref = datablock_root[self.data['name']] datablock_ref = datablock_root[self.data['name']]
except Exception: except Exception:
if construct:
name = self.data.get('name') name = self.data.get('name')
logging.debug(f"Constructing {name}") logging.debug(f"Constructing {name}")
datablock_ref = self._construct(data=self.data) datablock_ref = self._construct(data=self.data)
if datablock_ref: if datablock_ref is not None:
setattr(datablock_ref, 'uuid', self.uuid) setattr(datablock_ref, 'uuid', self.uuid)
self.instance = datablock_ref self.instance = datablock_ref
return True
else:
return False
def remove_instance(self): def remove_instance(self):
""" """

View File

@ -686,10 +686,14 @@ def sanitize_deps_graph(dummy):
A future solution should be to avoid storing dataclock reference... A future solution should be to avoid storing dataclock reference...
""" """
if session and session.state['STATE'] == STATE_ACTIVE:
for node_key in session.list():
session.get(node_key).resolve()
if session and session.state['STATE'] == STATE_ACTIVE:
session.lock()
for node_key in session.list():
node = session.get(node_key)
if node and not node.resolve(construct=False):
session.remove(node_key)
session.unlock()
@persistent @persistent
def load_pre_handler(dummy): def load_pre_handler(dummy):