feat: progression on user matadata handling
This commit is contained in:
@ -83,26 +83,21 @@ class DynamicRightSelectTimer(Timer):
|
|||||||
super().__init__(timout)
|
super().__init__(timout)
|
||||||
self._last_selection = []
|
self._last_selection = []
|
||||||
self._user = None
|
self._user = None
|
||||||
self._user_node = None
|
self._user_metadata = None
|
||||||
self._right_strategy = RP_COMMON
|
self._right_strategy = RP_COMMON
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
repo = operators.client
|
session = operators.client
|
||||||
if repo:
|
settings = bpy.context.window_manager.session
|
||||||
settings = bpy.context.window_manager.session
|
|
||||||
|
|
||||||
|
if session:
|
||||||
# Find user
|
# Find user
|
||||||
if self._user is None:
|
if self._user is None:
|
||||||
users = repo.list(filter=BlUser)
|
self._user = session.online_users.get(settings.username)
|
||||||
|
self._user_metadata = self._user.get('metadata')
|
||||||
for user in users:
|
|
||||||
user_node = repo.get(uuid=user)
|
|
||||||
if user_node.pointer:
|
|
||||||
self._user = user_node.pointer
|
|
||||||
self._user_node = user_node
|
|
||||||
|
|
||||||
if self._right_strategy is None:
|
if self._right_strategy is None:
|
||||||
self._right_strategy = repo.get_config()[
|
self._right_strategy = session.get_config()[
|
||||||
'right_strategy']
|
'right_strategy']
|
||||||
|
|
||||||
if self._user:
|
if self._user:
|
||||||
@ -117,27 +112,27 @@ class DynamicRightSelectTimer(Timer):
|
|||||||
|
|
||||||
# change old selection right to common
|
# change old selection right to common
|
||||||
for obj in obj_common:
|
for obj in obj_common:
|
||||||
node = repo.get(uuid=obj)
|
node = session.get(uuid=obj)
|
||||||
|
|
||||||
if node and (node.owner == settings.username or node.owner == RP_COMMON):
|
if node and (node.owner == settings.username or node.owner == RP_COMMON):
|
||||||
recursive = True
|
recursive = True
|
||||||
if node.data and 'instance_type' in node.data.keys():
|
if node.data and 'instance_type' in node.data.keys():
|
||||||
recursive = node.data['instance_type'] != 'COLLECTION'
|
recursive = node.data['instance_type'] != 'COLLECTION'
|
||||||
repo.change_owner(
|
session.change_owner(
|
||||||
node.uuid,
|
node.uuid,
|
||||||
RP_COMMON,
|
RP_COMMON,
|
||||||
recursive=recursive)
|
recursive=recursive)
|
||||||
|
|
||||||
# change new selection to our
|
# change new selection to our
|
||||||
for obj in obj_ours:
|
for obj in obj_ours:
|
||||||
node = repo.get(uuid=obj)
|
node = session.get(uuid=obj)
|
||||||
|
|
||||||
if node and node.owner == RP_COMMON:
|
if node and node.owner == RP_COMMON:
|
||||||
recursive = True
|
recursive = True
|
||||||
if node.data and 'instance_type' in node.data.keys():
|
if node.data and 'instance_type' in node.data.keys():
|
||||||
recursive = node.data['instance_type'] != 'COLLECTION'
|
recursive = node.data['instance_type'] != 'COLLECTION'
|
||||||
|
|
||||||
repo.change_owner(
|
session.change_owner(
|
||||||
node.uuid,
|
node.uuid,
|
||||||
settings.username,
|
settings.username,
|
||||||
recursive=recursive)
|
recursive=recursive)
|
||||||
@ -145,22 +140,34 @@ class DynamicRightSelectTimer(Timer):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._last_selection = current_selection
|
self._last_selection = current_selection
|
||||||
self._user.update_selected_objects(
|
self._user_metadata['selected_objects'] = current_selection
|
||||||
bpy.context)
|
|
||||||
repo.push(self._user_node.uuid)
|
|
||||||
|
|
||||||
|
session.update_user_metadata(self._user_metadata)
|
||||||
|
logger.info("Update selection")
|
||||||
# Fix deselection until right managment refactoring (with Roles concepts)
|
# Fix deselection until right managment refactoring (with Roles concepts)
|
||||||
if len(current_selection) == 0 and self._right_strategy == RP_COMMON:
|
if len(current_selection) == 0 and self._right_strategy == RP_COMMON:
|
||||||
owned_keys = repo.list(
|
owned_keys = session.list(
|
||||||
filter_owner=settings.username)
|
filter_owner=settings.username)
|
||||||
for key in owned_keys:
|
for key in owned_keys:
|
||||||
node = repo.get(uuid=key)
|
node = session.get(uuid=key)
|
||||||
if not isinstance(node, BlUser):
|
if not isinstance(node, BlUser):
|
||||||
repo.change_owner(
|
session.change_owner(
|
||||||
key,
|
key,
|
||||||
RP_COMMON,
|
RP_COMMON,
|
||||||
recursive=recursive)
|
recursive=recursive)
|
||||||
|
|
||||||
|
for user, user_info in session.online_users.items():
|
||||||
|
if user != settings.username:
|
||||||
|
metadata = user_info.get('metadata')
|
||||||
|
|
||||||
|
if 'selected_objects' in metadata:
|
||||||
|
# Update selectionnable objects
|
||||||
|
for obj in bpy.data.objects:
|
||||||
|
if obj.hide_select and obj.uuid not in metadata['selected_objects']:
|
||||||
|
obj.hide_select = False
|
||||||
|
elif not obj.hide_select and obj.uuid in metadata['selected_objects']:
|
||||||
|
obj.hide_select = True
|
||||||
|
|
||||||
|
|
||||||
class Draw(Delayable):
|
class Draw(Delayable):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -191,27 +198,25 @@ class DrawClient(Draw):
|
|||||||
for user in users.values():
|
for user in users.values():
|
||||||
metadata = user.get('metadata')
|
metadata = user.get('metadata')
|
||||||
|
|
||||||
# if settings.presence_show_selected:
|
if settings.presence_show_selected and 'selected_objects' in metadata.keys():
|
||||||
# presence.renderer.draw_client_selection(
|
presence.renderer.draw_client_selection(
|
||||||
# cli_ref.data['name'], cli_ref.data['color'], cli_ref.data['selected_objects'])
|
user['id'], metadata['color'], metadata['selected_objects'])
|
||||||
if settings.presence_show_user:
|
if settings.presence_show_user and 'view_corners' in metadata:
|
||||||
presence.renderer.draw_client_camera(
|
presence.renderer.draw_client_camera(
|
||||||
user['id'], metadata['view_corners'], metadata['color'])
|
user['id'], metadata['view_corners'], metadata['color'])
|
||||||
|
|
||||||
|
|
||||||
class ClientUpdate(Timer):
|
class ClientUpdate(Timer):
|
||||||
def __init__(self, timout=1, client_uuid=None):
|
def __init__(self, timout=1):
|
||||||
assert(client_uuid)
|
|
||||||
self._client_uuid = client_uuid
|
|
||||||
super().__init__(timout)
|
super().__init__(timout)
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
settings = bpy.context.window_manager.session
|
settings = bpy.context.window_manager.session
|
||||||
session_info = bpy.context.window_manager.session
|
session_info = bpy.context.window_manager.session
|
||||||
session = operators.client
|
session = operators.client
|
||||||
if self._client_uuid and operators.client:
|
if session:
|
||||||
client = operators.client.get(uuid=self._client_uuid)
|
local_user = operators.client.online_users.get(
|
||||||
local_user = operators.client.online_users[session_info.username]
|
session_info.username)
|
||||||
|
|
||||||
metadata = {
|
metadata = {
|
||||||
'view_corners': presence.get_view_corners(),
|
'view_corners': presence.get_view_corners(),
|
||||||
@ -220,14 +225,11 @@ class ClientUpdate(Timer):
|
|||||||
settings.client_color.g,
|
settings.client_color.g,
|
||||||
settings.client_color.b,
|
settings.client_color.b,
|
||||||
1),
|
1),
|
||||||
'selected_objects':utils.get_selected_objects(bpy.context.scene)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
session.update_user_metadata(metadata)
|
session.update_user_metadata(metadata)
|
||||||
|
|
||||||
logger.info("{}".format(local_user))
|
logger.info("{}".format(local_user))
|
||||||
if client:
|
|
||||||
client.pointer.update_location()
|
|
||||||
|
|
||||||
# sync online users
|
# sync online users
|
||||||
session_users = operators.client.online_users
|
session_users = operators.client.online_users
|
||||||
|
Submodule multi_user/libs/replication updated: d5a24da5fc...20c122a522
@ -57,11 +57,6 @@ class SessionStartOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
users.clear()
|
users.clear()
|
||||||
|
|
||||||
# #load our infos into the local user list
|
|
||||||
# local_user = users.add()
|
|
||||||
# local_user.name = 'localhost'
|
|
||||||
# local_user.username = settings.username
|
|
||||||
# local_user.current_frame = context.scene.frame_current
|
|
||||||
|
|
||||||
# save config
|
# save config
|
||||||
settings.save(context)
|
settings.save(context)
|
||||||
@ -141,8 +136,8 @@ class SessionStartOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
# for node in client.list():
|
# for node in client.list():
|
||||||
client.commit(scene_uuid)
|
client.commit(scene_uuid)
|
||||||
delayables.append(delayable.ClientUpdate(
|
|
||||||
client_uuid=settings.user_uuid))
|
delayables.append(delayable.ClientUpdate())
|
||||||
delayables.append(delayable.DrawClient())
|
delayables.append(delayable.DrawClient())
|
||||||
delayables.append(delayable.DynamicRightSelectTimer())
|
delayables.append(delayable.DynamicRightSelectTimer())
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user