diff --git a/multi_user/__init__.py b/multi_user/__init__.py index ac3f243..3f38e91 100644 --- a/multi_user/__init__.py +++ b/multi_user/__init__.py @@ -45,7 +45,7 @@ from . import environment, utils # TODO: remove dependency as soon as replication will be installed as a module DEPENDENCIES = { - ("replication", '0.0.17'), + ("replication", '0.0.18'), ("deepdiff", '5.0.1'), } diff --git a/multi_user/delayable.py b/multi_user/delayable.py index d57d317..171ddba 100644 --- a/multi_user/delayable.py +++ b/multi_user/delayable.py @@ -314,15 +314,11 @@ class ClientUpdate(Timer): new_key = ui_users.add() new_key.name = user new_key.username = user - elif session.state['STATE'] == STATE_QUITTING: - presence.refresh_sidebar_view() - self.handle_quit = True - elif session.state['STATE'] == STATE_INITIAL and self.handle_quit: - self.handle_quit = False - presence.refresh_sidebar_view() - operators.unregister_delayables() - presence.renderer.stop() +class SessionStatusUpdate(Timer): + def __init__(self, timout=.1): + super().__init__(timout) - presence.refresh_sidebar_view() + def execute(self): + presence.refresh_sidebar_view() \ No newline at end of file diff --git a/multi_user/operators.py b/multi_user/operators.py index 94279b4..56dd6eb 100644 --- a/multi_user/operators.py +++ b/multi_user/operators.py @@ -46,17 +46,6 @@ delayables = [] stop_modal_executor = False -def unregister_delayables(): - global delayables, stop_modal_executor - - for d in delayables: - try: - d.unregister() - except: - continue - - stop_modal_executor = True - # OPERATORS @@ -161,13 +150,39 @@ class SessionStartOperator(bpy.types.Operator): delayables.append(delayable.DrawClient()) delayables.append(delayable.DynamicRightSelectTimer()) - # Launch drawing module - if runtime_settings.enable_presence: - presence.renderer.run() + session_update = delayable.SessionStatusUpdate() + session_update.register() - # Register blender main thread tools - for d in delayables: - d.register() + delayables.append(session_update) + + @client.register('on_connection') + def initialize_session(): + for node in client._graph.list_ordered(): + node_ref = client.get(node) + if node_ref.state == FETCHED: + node_ref.resolve() + node_ref.apply() + + # Launch drawing module + if runtime_settings.enable_presence: + presence.renderer.run() + + # Register blender main thread tools + for d in delayables: + d.register() + + @client.register('on_exit') + def desinitialize_session(): + global delayables, stop_modal_executor + + for d in delayables: + try: + d.unregister() + except: + continue + + stop_modal_executor = True + presence.renderer.stop() bpy.ops.session.apply_armature_operator()