diff --git a/multi_user/bl_types/bl_material.py b/multi_user/bl_types/bl_material.py index bac300d..b142907 100644 --- a/multi_user/bl_types/bl_material.py +++ b/multi_user/bl_types/bl_material.py @@ -404,6 +404,7 @@ class BlMaterial(ReplicatedDatablock): bl_check_common = False bl_icon = 'MATERIAL_DATA' bl_reload_parent = False + bl_reload_child = True @staticmethod def construct(data: dict) -> object: @@ -426,8 +427,9 @@ class BlMaterial(ReplicatedDatablock): if datablock.node_tree is None: datablock.use_nodes = True - load_animation_data(data.get('animation_data'), datablock.node_tree) load_node_tree(data['node_tree'], datablock.node_tree) + load_animation_data(data.get('nodes_animation_data'), datablock.node_tree) + load_animation_data(data.get('animation_data'), datablock) @staticmethod def dump(datablock: object) -> dict: @@ -495,8 +497,10 @@ class BlMaterial(ReplicatedDatablock): data['grease_pencil'] = gp_mat_dumper.dump(datablock.grease_pencil) elif datablock.use_nodes: data['node_tree'] = dump_node_tree(datablock.node_tree) + data['nodes_animation_data'] = dump_animation_data(datablock.node_tree) + + data['animation_data'] = dump_animation_data(datablock) - data['animation_data'] = dump_animation_data(datablock.node_tree) return data @staticmethod @@ -510,8 +514,8 @@ class BlMaterial(ReplicatedDatablock): if datablock.use_nodes: deps.extend(get_node_tree_dependencies(datablock.node_tree)) - - deps.extend(resolve_animation_dependencies(datablock.node_tree)) + deps.extend(resolve_animation_dependencies(datablock.node_tree)) + deps.extend(resolve_animation_dependencies(datablock)) return deps diff --git a/multi_user/libs/replication b/multi_user/libs/replication index cb4cdd0..ce3a7b4 160000 --- a/multi_user/libs/replication +++ b/multi_user/libs/replication @@ -1 +1 @@ -Subproject commit cb4cdd044464cbc138fbbaad68c787a6c9b9355d +Subproject commit ce3a7b4363ec9fa879925d57c8555decbc92158a diff --git a/multi_user/operators.py b/multi_user/operators.py index b4fcb49..cb69753 100644 --- a/multi_user/operators.py +++ b/multi_user/operators.py @@ -604,9 +604,9 @@ class SessionApply(bpy.types.Operator): node_ref = session.repository.graph.get(self.target) porcelain.apply(session.repository, self.target, - force=True, - force_dependencies=self.reset_dependencies) + force=True) impl = session.repository.rdp.get_implementation(node_ref.instance) + # NOTE: find another way to handle child and parent automatic reloading if impl.bl_reload_parent: for parent in session.repository.graph.get_parents(self.target): logging.debug(f"Refresh parent {parent}") @@ -614,6 +614,11 @@ class SessionApply(bpy.types.Operator): porcelain.apply(session.repository, parent.uuid, force=True) + if hasattr(impl, 'bl_reload_child') and impl.bl_reload_child: + for dep in node_ref.dependencies: + porcelain.apply(session.repository, + dep, + force=True) except Exception as e: self.report({'ERROR'}, repr(e)) traceback.print_exc() @@ -637,7 +642,7 @@ class SessionCommit(bpy.types.Operator): def execute(self, context): try: porcelain.commit(session.repository, self.target) - porcelain.push(session.repository, 'origin', self.target) + porcelain.push(session.repository, 'origin', self.target, force=True) return {"FINISHED"} except Exception as e: self.report({'ERROR'}, repr(e)) diff --git a/multi_user/timers.py b/multi_user/timers.py index dafbf08..a4502e4 100644 --- a/multi_user/timers.py +++ b/multi_user/timers.py @@ -129,6 +129,11 @@ class ApplyTimer(Timer): porcelain.apply(session.repository, parent.uuid, force=True) + if hasattr(impl, 'bl_reload_child') and impl.bl_reload_child: + for dep in node_ref.dependencies: + porcelain.apply(session.repository, + dep, + force=True) class DynamicRightSelectTimer(Timer):