diff --git a/multi_user/bl_types/bl_datablock.py b/multi_user/bl_types/bl_datablock.py index 78a9844..7cdb2d1 100644 --- a/multi_user/bl_types/bl_datablock.py +++ b/multi_user/bl_types/bl_datablock.py @@ -133,17 +133,21 @@ class BlDatablock(ReplicatedDatablock): if not datablock_ref: try: datablock_ref = datablock_root[self.data['name']] - except KeyError as e: - if construct: - name = self.data.get('name') - logging.debug(f"Constructing {name}") - datablock_ref = self._construct(data=self.data) - setattr(datablock_ref, 'uuid', self.uuid) - else: - return False - self.instance = datablock_ref - return True + except Exception: + pass + if construct and not datablock_ref: + name = self.data.get('name') + logging.debug(f"Constructing {name}") + datablock_ref = self._construct(data=self.data) + + if datablock_ref is not None: + setattr(datablock_ref, 'uuid', self.uuid) + self.instance = datablock_ref + return True + else: + return False + def remove_instance(self): """ diff --git a/multi_user/operators.py b/multi_user/operators.py index b624676..f49b94a 100644 --- a/multi_user/operators.py +++ b/multi_user/operators.py @@ -946,8 +946,7 @@ def sanitize_deps_graph(remove_nodes: bool = False): rm_cpt += 1 except NonAuthorizedOperationError: continue - if rm_cpt: - logging.info(f"Sanitize took { utils.current_milli_time()-start} ms, removed {rm_cpt} nodes") + logging.info(f"Sanitize took { utils.current_milli_time()-start} ms, removed {rm_cpt} nodes") @persistent @@ -1014,15 +1013,14 @@ def depsgraph_evaluation(scene): # A new scene is created elif isinstance(update.id, bpy.types.Scene): ref = session.repository.get_node_by_datablock(update.id) - if ref and ref.resolve(construct=False): - sanitize_deps_graph(remove_nodes=True) + if ref: + ref.resolve() else: scn_uuid = porcelain.add(session.repository, update.id) porcelain.commit(session.node_id, scn_uuid) session.push(scn_uuid, check_data=False) - if isinstance(update.id, bpy.types.Collection): - sanitize_deps_graph(remove_nodes=True) - + elif isinstance(update.id, bpy.types.Collection): + sanitize_deps_graph() def register(): from bpy.utils import register_class diff --git a/multi_user/timers.py b/multi_user/timers.py index d088a77..f414a2e 100644 --- a/multi_user/timers.py +++ b/multi_user/timers.py @@ -248,7 +248,7 @@ class DynamicRightSelectTimer(Timer): key, RP_COMMON, ignore_warnings=True, - affect_dependencies=True) + affect_dependencies=recursive) except NonAuthorizedOperationError: logging.warning( f"Not authorized to change {key} owner")