summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-10-13 11:03:48 +0100
committerMark Haines <mark.haines@matrix.org>2015-10-13 11:03:48 +0100
commitab9cf732585244781ba67f4bb4c235ded3d4661a (patch)
tree5c4a2dd1289ee0906928ca66926d73ca230cc0e1
parentMerge branch 'develop' into markjh/v2_sync_api (diff)
downloadsynapse-ab9cf732585244781ba67f4bb4c235ded3d4661a.tar.xz
Include invited rooms in the initial sync
-rw-r--r--synapse/handlers/sync.py16
-rw-r--r--synapse/rest/client/v2_alpha/sync.py21
2 files changed, 26 insertions, 11 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index e693e7c80e..574412d6b5 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -63,16 +63,10 @@ class JoinedSyncResult(collections.namedtuple("JoinedSyncResult", [
 
 class InvitedSyncResult(collections.namedtuple("InvitedSyncResult", [
     "room_id",
-    "invite_state",
+    "invite",
 ])):
     __slots__ = []
 
-    def __nonzero__(self):
-        """Make the result appear empty if there are no updates. This is used
-        to tell if room needs to be part of the sync result.
-        """
-        return bool(self.invite_state)
-
 
 class SyncResult(collections.namedtuple("SyncResult", [
     "next_batch",  # Token for the next sync
@@ -166,6 +160,7 @@ class SyncHandler(BaseHandler):
         )
 
         joined = []
+        invited = []
         for event in room_list:
             if event.membership == Membership.JOIN:
                 room_sync = yield self.initial_sync_for_room(
@@ -173,15 +168,16 @@ class SyncHandler(BaseHandler):
                 )
                 joined.append(room_sync)
             elif event.membership == Membership.INVITE:
+                invite = yield self.store.get_event(event.event_id)
                 invited.append(InvitedSyncResult(
                     room_id=event.room_id,
-                    invited_state=[event],
-                )
+                    invite=invite,
+                ))
 
         defer.returnValue(SyncResult(
             presence=presence,
             joined=joined,
-            invited=[],
+            invited=invited,
             next_batch=now_token,
         ))
 
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index 9b87879f51..399df9e772 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -132,13 +132,17 @@ class SyncRestServlet(RestServlet):
             sync_result.joined, filter, time_now, token_id
         )
 
+        invited = self.encode_invited(
+            sync_result.invited, filter, time_now, token_id
+        )
+
         response_content = {
             "presence": self.encode_presence(
                 sync_result.presence, filter, time_now
             ),
             "rooms": {
                 "joined": joined,
-                "invited": {},
+                "invited": invited,
                 "archived": {},
             },
             "next_batch": sync_result.next_batch.to_string(),
@@ -163,6 +167,21 @@ class SyncRestServlet(RestServlet):
 
         return joined
 
+    def encode_invited(self, rooms, filter, time_now, token_id):
+        invited = {}
+        for room in rooms:
+            invite = serialize_event(
+                room.invite, time_now, token_id=token_id,
+                event_format=format_event_for_client_v2_without_event_id,
+            )
+            invited_state = invite.get("unsigned", {}).pop("invite_room_state", [])
+            invited_state.append(invite)
+            invited[room.room_id] = {
+                "invite_state": { "events": invited_state }
+            }
+
+        return invited
+
     @staticmethod
     def encode_room(room, filter, time_now, token_id):
         event_map = {}