summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-09-08 14:44:36 +0100
committerErik Johnston <erik@matrix.org>2017-09-08 14:44:36 +0100
commit69ef4987a68d66093007ca11886e25139ea0c970 (patch)
tree9794dea29cadedb4f8ec5ab1fded01df274dde22
parentSend down device list change notif when member leaves/rejoins room (diff)
downloadsynapse-69ef4987a68d66093007ca11886e25139ea0c970.tar.xz
Add left section to /keys/changes
-rw-r--r--synapse/handlers/device.py22
-rw-r--r--synapse/handlers/sync.py2
-rw-r--r--synapse/rest/client/v2_alpha/keys.py6
3 files changed, 19 insertions, 11 deletions
diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py
index be120b2f34..ef8753b1ff 100644
--- a/synapse/handlers/device.py
+++ b/synapse/handlers/device.py
@@ -326,13 +326,23 @@ class DeviceHandler(BaseHandler):
                         possibly_changed.add(state_key)
                         break
 
-        users_who_share_room = yield self.store.get_users_who_share_room_with_user(
-            user_id
-        )
+        if possibly_changed:
+            users_who_share_room = yield self.store.get_users_who_share_room_with_user(
+                user_id
+            )
 
-        # Take the intersection of the users whose devices may have changed
-        # and those that actually still share a room with the user
-        defer.returnValue(users_who_share_room & possibly_changed)
+            # Take the intersection of the users whose devices may have changed
+            # and those that actually still share a room with the user
+            possibly_joined = possibly_changed & users_who_share_room
+            possibly_left = possibly_changed - users_who_share_room
+        else:
+            possibly_joined = []
+            possibly_left = []
+
+        defer.returnValue({
+            "changed": list(possibly_joined),
+            "left": list(possibly_left),
+        })
 
     @defer.inlineCallbacks
     def on_federation_query_user_devices(self, user_id):
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 4ee6109cf8..9ae7fbc797 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -949,7 +949,7 @@ class SyncHandler(object):
         newly_joined_rooms = []
         room_entries = []
         invited = []
-        for room_id, events in mem_change_events_by_room_id.items():
+        for room_id, events in mem_change_events_by_room_id.iteritems():
             non_joins = [e for e in events if e.membership != Membership.JOIN]
             has_join = len(non_joins) != len(events)
 
diff --git a/synapse/rest/client/v2_alpha/keys.py b/synapse/rest/client/v2_alpha/keys.py
index 6a3cfe84f8..943e87e7fd 100644
--- a/synapse/rest/client/v2_alpha/keys.py
+++ b/synapse/rest/client/v2_alpha/keys.py
@@ -188,13 +188,11 @@ class KeyChangesServlet(RestServlet):
 
         user_id = requester.user.to_string()
 
-        changed = yield self.device_handler.get_user_ids_changed(
+        results = yield self.device_handler.get_user_ids_changed(
             user_id, from_token,
         )
 
-        defer.returnValue((200, {
-            "changed": list(changed),
-        }))
+        defer.returnValue((200, results))
 
 
 class OneTimeKeyServlet(RestServlet):