mirror of
https://github.com/element-hq/synapse.git
synced 2025-03-31 03:45:13 +00:00
Merge 65d8bea060
into 3c188231c7
This commit is contained in:
commit
d54ba2a89d
5 changed files with 17 additions and 17 deletions
changelog.d
synapse
tests/rest/client
1
changelog.d/17782.misc
Normal file
1
changelog.d/17782.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Improve event filtering for Simplified Sliding Sync.
|
|
@ -748,8 +748,6 @@ class SlidingSyncHandler:
|
|||
!= Membership.JOIN,
|
||||
filter_send_to_client=True,
|
||||
)
|
||||
# TODO: Filter out `EventTypes.CallInvite` in public rooms,
|
||||
# see https://github.com/element-hq/synapse/issues/17359
|
||||
|
||||
# TODO: Handle timeline gaps (`get_timeline_gaps()`)
|
||||
|
||||
|
|
|
@ -46,7 +46,6 @@ from synapse.api.constants import (
|
|||
Direction,
|
||||
EventContentFields,
|
||||
EventTypes,
|
||||
JoinRules,
|
||||
Membership,
|
||||
)
|
||||
from synapse.api.filtering import FilterCollection
|
||||
|
@ -949,22 +948,13 @@ class SyncHandler:
|
|||
)
|
||||
)
|
||||
|
||||
filtered_recents = await filter_events_for_client(
|
||||
loaded_recents = await filter_events_for_client(
|
||||
self._storage_controllers,
|
||||
sync_config.user.to_string(),
|
||||
loaded_recents,
|
||||
always_include_ids=current_state_ids,
|
||||
)
|
||||
|
||||
loaded_recents = []
|
||||
for event in filtered_recents:
|
||||
if event.type == EventTypes.CallInvite:
|
||||
room_info = await self.store.get_room_with_stats(event.room_id)
|
||||
assert room_info is not None
|
||||
if room_info.join_rules == JoinRules.PUBLIC:
|
||||
continue
|
||||
loaded_recents.append(event)
|
||||
|
||||
log_kv({"loaded_recents_after_client_filtering": len(loaded_recents)})
|
||||
|
||||
loaded_recents.extend(recents)
|
||||
|
|
|
@ -39,6 +39,7 @@ from synapse.api.constants import (
|
|||
EventTypes,
|
||||
EventUnsignedContentFields,
|
||||
HistoryVisibility,
|
||||
JoinRules,
|
||||
Membership,
|
||||
)
|
||||
from synapse.events import EventBase
|
||||
|
@ -117,7 +118,7 @@ async def filter_events_for_client(
|
|||
[event.event_id for event in events],
|
||||
)
|
||||
|
||||
types = (_HISTORY_VIS_KEY, (EventTypes.Member, user_id))
|
||||
types = (_HISTORY_VIS_KEY, (EventTypes.Member, user_id), (EventTypes.JoinRules, ""))
|
||||
|
||||
# we exclude outliers at this point, and then handle them separately later
|
||||
event_id_to_state = await storage.state.get_state_for_events(
|
||||
|
@ -156,6 +157,16 @@ async def filter_events_for_client(
|
|||
if filtered is None:
|
||||
return None
|
||||
|
||||
# Filter out call invites in public rooms, as this would potentially
|
||||
# ring a lot of users.
|
||||
if state_after_event is not None and event.type == EventTypes.CallInvite:
|
||||
room_join_rules = state_after_event.get((EventTypes.JoinRules, ""))
|
||||
if (
|
||||
room_join_rules is not None
|
||||
and room_join_rules.content.get("join_rule") == JoinRules.PUBLIC
|
||||
):
|
||||
return None
|
||||
|
||||
# Annotate the event with the user's membership after the event.
|
||||
#
|
||||
# Normally we just look in `state_after_event`, but if the event is an outlier
|
||||
|
|
|
@ -1181,7 +1181,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
|
|||
bundled_aggregations,
|
||||
)
|
||||
|
||||
self._test_bundled_aggregations(RelationTypes.REFERENCE, assert_annotations, 6)
|
||||
self._test_bundled_aggregations(RelationTypes.REFERENCE, assert_annotations, 7)
|
||||
|
||||
def test_thread(self) -> None:
|
||||
"""
|
||||
|
@ -1226,7 +1226,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
|
|||
|
||||
# The "user" sent the root event and is making queries for the bundled
|
||||
# aggregations: they have participated.
|
||||
self._test_bundled_aggregations(RelationTypes.THREAD, _gen_assert(True), 6)
|
||||
self._test_bundled_aggregations(RelationTypes.THREAD, _gen_assert(True), 7)
|
||||
# The "user2" sent replies in the thread and is making queries for the
|
||||
# bundled aggregations: they have participated.
|
||||
#
|
||||
|
@ -1287,7 +1287,7 @@ class BundledAggregationsTestCase(BaseRelationsTestCase):
|
|||
bundled_aggregations["latest_event"].get("unsigned"),
|
||||
)
|
||||
|
||||
self._test_bundled_aggregations(RelationTypes.THREAD, assert_thread, 6)
|
||||
self._test_bundled_aggregations(RelationTypes.THREAD, assert_thread, 7)
|
||||
|
||||
def test_nested_thread(self) -> None:
|
||||
"""
|
||||
|
|
Loading…
Add table
Reference in a new issue