diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index 84ef69df67..e5967c995e 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -306,7 +306,6 @@ def format_event_for_client_v2_without_room_id(d: JsonDict) -> JsonDict:
def serialize_event(
e: Union[JsonDict, EventBase],
time_now_ms: int,
- *,
as_client_event: bool = True,
event_format: Callable[[JsonDict], JsonDict] = format_event_for_client_v1,
token_id: Optional[str] = None,
@@ -394,8 +393,7 @@ class EventClientSerializer:
self,
event: Union[JsonDict, EventBase],
time_now: int,
- *,
- bundle_aggregations: bool = True,
+ bundle_relations: bool = True,
**kwargs: Any,
) -> JsonDict:
"""Serializes a single event.
@@ -403,9 +401,8 @@ class EventClientSerializer:
Args:
event: The event being serialized.
time_now: The current time in milliseconds
- bundle_aggregations: Whether to include the bundled aggregations for this
- event. Only applies to non-state events. (State events never include
- bundled aggregations.)
+ bundle_relations: Whether to include the bundled relations for this
+ event.
**kwargs: Arguments to pass to `serialize_event`
Returns:
@@ -417,27 +414,20 @@ class EventClientSerializer:
serialized_event = serialize_event(event, time_now, **kwargs)
- # Check if there are any bundled aggregations to include with the event.
- #
- # Do not bundle aggregations if any of the following at true:
- #
- # * Support is disabled via the configuration or the caller.
- # * The event is a state event.
- # * The event has been redacted.
- if (
- self._msc1849_enabled
- and bundle_aggregations
- and not event.is_state()
- and not event.internal_metadata.is_redacted()
+ # If MSC1849 is enabled then we need to look if there are any relations
+ # we need to bundle in with the event.
+ # Do not bundle relations if the event has been redacted
+ if not event.internal_metadata.is_redacted() and (
+ self._msc1849_enabled and bundle_relations
):
- await self._injected_bundled_aggregations(event, time_now, serialized_event)
+ await self._injected_bundled_relations(event, time_now, serialized_event)
return serialized_event
- async def _injected_bundled_aggregations(
+ async def _injected_bundled_relations(
self, event: EventBase, time_now: int, serialized_event: JsonDict
) -> None:
- """Potentially injects bundled aggregations into the unsigned portion of the serialized event.
+ """Potentially injects bundled relations into the unsigned portion of the serialized event.
Args:
event: The event being serialized.
@@ -445,28 +435,20 @@ class EventClientSerializer:
serialized_event: The serialized event which may be modified.
"""
- # Do not bundle aggregations for an event which represents an edit or an
- # annotation. It does not make sense for them to have related events.
- relates_to = event.content.get("m.relates_to")
- if isinstance(relates_to, (dict, frozendict)):
- relation_type = relates_to.get("rel_type")
- if relation_type in (RelationTypes.ANNOTATION, RelationTypes.REPLACE):
- return
-
event_id = event.event_id
- # The bundled aggregations to include.
- aggregations = {}
+ # The bundled relations to include.
+ relations = {}
annotations = await self.store.get_aggregation_groups_for_event(event_id)
if annotations.chunk:
- aggregations[RelationTypes.ANNOTATION] = annotations.to_dict()
+ relations[RelationTypes.ANNOTATION] = annotations.to_dict()
references = await self.store.get_relations_for_event(
event_id, RelationTypes.REFERENCE, direction="f"
)
if references.chunk:
- aggregations[RelationTypes.REFERENCE] = references.to_dict()
+ relations[RelationTypes.REFERENCE] = references.to_dict()
edit = None
if event.type == EventTypes.Message:
@@ -492,7 +474,7 @@ class EventClientSerializer:
else:
serialized_event["content"].pop("m.relates_to", None)
- aggregations[RelationTypes.REPLACE] = {
+ relations[RelationTypes.REPLACE] = {
"event_id": edit.event_id,
"origin_server_ts": edit.origin_server_ts,
"sender": edit.sender,
@@ -505,19 +487,17 @@ class EventClientSerializer:
latest_thread_event,
) = await self.store.get_thread_summary(event_id)
if latest_thread_event:
- aggregations[RelationTypes.THREAD] = {
- # Don't bundle aggregations as this could recurse forever.
+ relations[RelationTypes.THREAD] = {
+ # Don't bundle relations as this could recurse forever.
"latest_event": await self.serialize_event(
- latest_thread_event, time_now, bundle_aggregations=False
+ latest_thread_event, time_now, bundle_relations=False
),
"count": thread_count,
}
- # If any bundled aggregations were found, include them.
- if aggregations:
- serialized_event["unsigned"].setdefault("m.relations", {}).update(
- aggregations
- )
+ # If any bundled relations were found, include them.
+ if relations:
+ serialized_event["unsigned"].setdefault("m.relations", {}).update(relations)
async def serialize_events(
self, events: Iterable[Union[JsonDict, EventBase]], time_now: int, **kwargs: Any
|