Always send the user updates to their own device list

This will allow clients to notify users about new devices even if
the user isn't in any rooms (yet).
pull/7160/head
David Baker 2020-03-27 12:26:47 +00:00
parent 7496d3d2f6
commit 09cc058a4c
2 changed files with 20 additions and 6 deletions

View File

@ -122,11 +122,22 @@ class DeviceWorkerHandler(BaseHandler):
# First we check if any devices have changed for users that we share
# rooms with.
users_who_share_room = yield self.store.get_users_who_share_room_with_user(
tracked_users = yield self.store.get_users_who_share_room_with_user(
user_id
)
# always tell the user about their own devices
tracked_users.add(user_id)
logger.info(
"tracked users ids: %r", tracked_users,
)
changed = yield self.store.get_users_whose_devices_changed(
from_token.device_list_key, users_who_share_room
from_token.device_list_key, tracked_users
)
logger.info(
"changed users IDs: %r", changed,
)
# Then work out if any users have since joined
@ -456,7 +467,9 @@ class DeviceHandler(DeviceWorkerHandler):
room_ids = yield self.store.get_rooms_for_user(user_id)
yield self.notifier.on_new_event("device_list_key", position, rooms=room_ids)
# specify the user ID too since the user should always get their own device list
# updates, even if they aren't in any rooms.
yield self.notifier.on_new_event("device_list_key", position, users=[user_id], rooms=room_ids)
if hosts:
logger.info(

View File

@ -1139,13 +1139,14 @@ class SyncHandler(object):
# room with by looking at all users that have left a room plus users
# that were in a room we've left.
users_who_share_room = await self.store.get_users_who_share_room_with_user(
users_we_track = await self.store.get_users_who_share_room_with_user(
user_id
)
users_we_track.add(user_id)
# Step 1a, check for changes in devices of users we share a room with
users_that_have_changed = await self.store.get_users_whose_devices_changed(
since_token.device_list_key, users_who_share_room
since_token.device_list_key, users_we_track
)
# Step 1b, check for newly joined rooms
@ -1168,7 +1169,7 @@ class SyncHandler(object):
newly_left_users.update(left_users)
# Remove any users that we still share a room with.
newly_left_users -= users_who_share_room
newly_left_users -= users_we_track
return DeviceLists(changed=users_that_have_changed, left=newly_left_users)
else: