feat: progression on user matadata handling

This commit is contained in:
Swann Martinez
2020-01-22 11:20:04 +01:00
parent 73a2bb56e2
commit da5406952c
3 changed files with 40 additions and 43 deletions

View File

@ -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

View File

@ -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())