summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
Diffstat (limited to 'synapse')
-rw-r--r--synapse/rest/client/v2_alpha/sync.py81
1 files changed, 48 insertions, 33 deletions
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index 83e209d18f..fc4d7d7dff 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -164,41 +164,53 @@ class SyncRestServlet(RestServlet):
             )
 
         time_now = self.clock.time_msec()
+        response_content = self.encode_response(time_now, sync_result, requester.access_token_id, filter)
 
-        joined = self.encode_joined(
-            sync_result.joined, time_now, requester.access_token_id, filter.event_fields
-        )
-
-        invited = self.encode_invited(
-            sync_result.invited, time_now, requester.access_token_id
-        )
-
-        archived = self.encode_archived(
-            sync_result.archived, time_now, requester.access_token_id,
-            filter.event_fields,
-        )
+        defer.returnValue((200, response_content))
 
-        response_content = {
-            "account_data": {"events": sync_result.account_data},
-            "to_device": {"events": sync_result.to_device},
-            "device_lists": {
-                "changed": list(sync_result.device_lists),
-            },
-            "presence": self.encode_presence(
-                sync_result.presence, time_now
-            ),
-            "rooms": {
-                "join": joined,
-                "invite": invited,
-                "leave": archived,
-            },
+    @staticmethod
+    def encode_response(time_now, sync_result, access_token_id, filter):
+        response = {
             "device_one_time_keys_count": sync_result.device_one_time_keys_count,
             "next_batch": sync_result.next_batch.to_string(),
         }
 
-        defer.returnValue((200, response_content))
+        if sync_result.account_data:
+            response["account_data"] = {"events": sync_result.account_data}
+        if sync_result.to_device:
+            response["to_device"] = {"events": sync_result.to_device}
+        if sync_result.device_lists:
+            response["device_lists"] = {
+                "changed": list(sync_result.device_lists),
+            }
 
-    def encode_presence(self, events, time_now):
+        if sync_result.presence:
+            response["presence"] = SyncRestServlet.encode_presence(
+                sync_result.presence, time_now
+            )
+
+        rooms = {}
+        if sync_result.joined:
+            rooms["join"] = SyncRestServlet.encode_joined(
+                sync_result.joined, time_now, access_token_id, filter.event_fields
+            )
+        if sync_result.invited:
+            rooms["invite"] = SyncRestServlet.encode_invited(
+                sync_result.invited, time_now, access_token_id
+            )
+        if sync_result.archived:
+            rooms["leave"] = SyncRestServlet.encode_archived(
+                sync_result.archived, time_now, access_token_id,
+                filter.event_fields,
+            )
+
+        if rooms:
+            response["rooms"] = rooms
+
+        return response
+
+    @staticmethod
+    def encode_presence(events, time_now):
         return {
             "events": [
                 {
@@ -212,7 +224,8 @@ class SyncRestServlet(RestServlet):
             ]
         }
 
-    def encode_joined(self, rooms, time_now, token_id, event_fields):
+    @staticmethod
+    def encode_joined(rooms, time_now, token_id, event_fields):
         """
         Encode the joined rooms in a sync result
 
@@ -231,13 +244,14 @@ class SyncRestServlet(RestServlet):
         """
         joined = {}
         for room in rooms:
-            joined[room.room_id] = self.encode_room(
+            joined[room.room_id] = SyncRestServlet.encode_room(
                 room, time_now, token_id, only_fields=event_fields
             )
 
         return joined
 
-    def encode_invited(self, rooms, time_now, token_id):
+    @staticmethod
+    def encode_invited(rooms, time_now, token_id):
         """
         Encode the invited rooms in a sync result
 
@@ -270,7 +284,8 @@ class SyncRestServlet(RestServlet):
 
         return invited
 
-    def encode_archived(self, rooms, time_now, token_id, event_fields):
+    @staticmethod
+    def encode_archived(rooms, time_now, token_id, event_fields):
         """
         Encode the archived rooms in a sync result
 
@@ -289,7 +304,7 @@ class SyncRestServlet(RestServlet):
         """
         joined = {}
         for room in rooms:
-            joined[room.room_id] = self.encode_room(
+            joined[room.room_id] = SyncRestServlet.encode_room(
                 room, time_now, token_id, joined=False, only_fields=event_fields
             )