diff options
author | Erik Johnston <erikj@jki.re> | 2017-09-22 14:44:17 +0100 |
---|---|---|
committer | Richard van der Hoff <github@rvanderhoff.org.uk> | 2017-09-22 14:44:17 +0100 |
commit | 3166ed55b23d0939f08337336439d9222117c9e6 (patch) | |
tree | 89150124108d187b502b9fd68285456683327562 /synapse | |
parent | Merge pull request #2459 from matrix-org/rav/keyring_cleanups (diff) | |
download | synapse-3166ed55b23d0939f08337336439d9222117c9e6.tar.xz |
Fix device list when rejoining room (#2461)
Diffstat (limited to '')
-rw-r--r-- | synapse/handlers/sync.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index bb78c25ee5..af1b527840 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -980,7 +980,18 @@ class SyncHandler(object): # We want to figure out if we joined the room at some point since # the last sync (even if we have since left). This is to make sure # we do send down the room, and with full state, where necessary + old_state_ids = None + if room_id in joined_room_ids and non_joins: + # Always include if the user (re)joined the room, especially + # important so that device list changes are calculated correctly. + # If there are non join member events, but we are still in the room, + # then the user must have left and joined + newly_joined_rooms.append(room_id) + + # User is in the room so we don't need to do the invite/leave checks + continue + if room_id in joined_room_ids or has_join: old_state_ids = yield self.get_state_at(room_id, since_token) old_mem_ev_id = old_state_ids.get((EventTypes.Member, user_id), None) @@ -992,8 +1003,9 @@ class SyncHandler(object): if not old_mem_ev or old_mem_ev.membership != Membership.JOIN: newly_joined_rooms.append(room_id) - if room_id in joined_room_ids: - continue + # If user is in the room then we don't need to do the invite/leave checks + if room_id in joined_room_ids: + continue if not non_joins: continue |