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
)
|