Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Include bundled aggregations in /sync and related fixes #11478

Merged
merged 14 commits into from
Dec 6, 2021
Merged
17 changes: 11 additions & 6 deletions synapse/rest/client/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -516,13 +516,13 @@ async def encode_room(
The room, encoded in our response format
"""

def serialize(events: Iterable[EventBase]) -> Awaitable[List[JsonDict]]:
def serialize(
events: Iterable[EventBase], bundle_aggregations: bool
) -> Awaitable[List[JsonDict]]:
return self._event_serializer.serialize_events(
events,
time_now=time_now,
# We don't bundle "live" events, as otherwise clients
# will end up double counting annotations.
bundle_aggregations=False,
bundle_aggregations=bundle_aggregations,
token_id=token_id,
event_format=event_formatter,
only_event_fields=only_fields,
Expand All @@ -544,8 +544,13 @@ def serialize(events: Iterable[EventBase]) -> Awaitable[List[JsonDict]]:
event.room_id,
)

serialized_state = await serialize(state_events)
serialized_timeline = await serialize(timeline_events)
# No need to bundle aggregations for state events.
serialized_state = await serialize(state_events, bundle_aggregations=False)
# Only bundle aggregations if the room is limited, as clients could be
# missing events.
serialized_timeline = await serialize(
timeline_events, bundle_aggregations=not room.timeline.limited
)

account_data = room.account_data

Expand Down