diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2021-10-21 14:39:16 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-21 14:39:16 -0400 |
commit | ba00e20234eadae66f105f8bda64e39beed9a92d (patch) | |
tree | a828912312bbc6ecbdf9d3a5d2bfe27b7296fb3f /synapse/events | |
parent | Fix adding excluded users to the private room sharing tables when joining a r... (diff) | |
download | synapse-ba00e20234eadae66f105f8bda64e39beed9a92d.tar.xz |
Add a thread relation type per MSC3440. (#11088)
Adds experimental support for MSC3440's `io.element.thread` relation type (and the aggregation for it).
Diffstat (limited to 'synapse/events')
-rw-r--r-- | synapse/events/utils.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/synapse/events/utils.py b/synapse/events/utils.py index 3f3eba86a8..6fa631aa1d 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -386,6 +386,7 @@ class EventClientSerializer: def __init__(self, hs: "HomeServer"): self.store = hs.get_datastore() self._msc1849_enabled = hs.config.experimental.msc1849_enabled + self._msc3440_enabled = hs.config.experimental.msc3440_enabled async def serialize_event( self, @@ -462,6 +463,22 @@ class EventClientSerializer: "sender": edit.sender, } + # If this event is the start of a thread, include a summary of the replies. + if self._msc3440_enabled: + ( + thread_count, + latest_thread_event, + ) = await self.store.get_thread_summary(event_id) + if latest_thread_event: + r = serialized_event["unsigned"].setdefault("m.relations", {}) + r[RelationTypes.THREAD] = { + # Don't bundle aggregations as this could recurse forever. + "latest_event": await self.serialize_event( + latest_thread_event, time_now, bundle_aggregations=False + ), + "count": thread_count, + } + return serialized_event async def serialize_events( |