summary refs log tree commit diff
path: root/synapse/handlers/sync.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-01-25 14:27:27 +0000
committerErik Johnston <erik@matrix.org>2017-01-25 14:27:27 +0000
commit2367c5568c01bc65aacc955b76ba707918b37f1e (patch)
tree0f07606420d5f64ba3e186ce69876fc6301082a3 /synapse/handlers/sync.py
parentMerge branch 'erikj/current_state_fix' into develop (diff)
downloadsynapse-2367c5568c01bc65aacc955b76ba707918b37f1e.tar.xz
Add basic implementation of local device list changes
Diffstat (limited to 'synapse/handlers/sync.py')
-rw-r--r--synapse/handlers/sync.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index c880f61685..06bf626367 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -115,6 +115,7 @@ class SyncResult(collections.namedtuple("SyncResult", [
     "invited",  # InvitedSyncResult for each invited room.
     "archived",  # ArchivedSyncResult for each archived room.
     "to_device",  # List of direct messages for the device.
+    "device_lists",  # List of user_ids whose devices have chanegd
 ])):
     __slots__ = []
 
@@ -143,6 +144,7 @@ class SyncHandler(object):
         self.clock = hs.get_clock()
         self.response_cache = ResponseCache(hs)
         self.state = hs.get_state_handler()
+        self.device_handler = hs.get_device_handler()
 
     def wait_for_sync_for_user(self, sync_config, since_token=None, timeout=0,
                                full_state=False):
@@ -544,6 +546,16 @@ class SyncHandler(object):
 
         yield self._generate_sync_entry_for_to_device(sync_result_builder)
 
+        if since_token and since_token.device_list_key:
+            user_id = sync_config.user.to_string()
+            rooms = yield self.store.get_rooms_for_user(user_id)
+            joined_room_ids = set(r.room_id for r in rooms)
+            device_lists = yield self.device_handler.get_device_list_changes(
+                user_id, joined_room_ids, since_token.device_list_key
+            )
+        else:
+            device_lists = []
+
         defer.returnValue(SyncResult(
             presence=sync_result_builder.presence,
             account_data=sync_result_builder.account_data,
@@ -551,6 +563,7 @@ class SyncHandler(object):
             invited=sync_result_builder.invited,
             archived=sync_result_builder.archived,
             to_device=sync_result_builder.to_device,
+            device_lists=device_lists,
             next_batch=sync_result_builder.now_token,
         ))