mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 02:01:03 +01:00 
			
		
		
		
	encode sync-response statically; omit empty objects from sync-response
This commit is contained in:
		
							parent
							
								
									58dc1f2c78
								
							
						
					
					
						commit
						6e16aca8b0
					
				@ -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
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user