encode sync-response statically; omit empty objects from sync-response

pull/2354/head
Krombel 2017-07-10 16:42:17 +02:00
parent 58dc1f2c78
commit 6e16aca8b0
1 changed files with 48 additions and 33 deletions

View File

@ -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
)
defer.returnValue((200, response_content))
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,
)
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
)