@@ -1536,15 +1536,13 @@ async def _generate_sync_entry_for_rooms(
1536
1536
ignored_users = await self .store .ignored_users (user_id )
1537
1537
if since_token :
1538
1538
room_changes = await self ._get_rooms_changed (
1539
- sync_result_builder , ignored_users , self . rooms_to_exclude
1539
+ sync_result_builder , ignored_users
1540
1540
)
1541
1541
tags_by_room = await self .store .get_updated_tags (
1542
1542
user_id , since_token .account_data_key
1543
1543
)
1544
1544
else :
1545
- room_changes = await self ._get_all_rooms (
1546
- sync_result_builder , ignored_users , self .rooms_to_exclude
1547
- )
1545
+ room_changes = await self ._get_all_rooms (sync_result_builder , ignored_users )
1548
1546
tags_by_room = await self .store .get_tags_for_user (user_id )
1549
1547
1550
1548
log_kv ({"rooms_changed" : len (room_changes .room_entries )})
@@ -1623,13 +1621,14 @@ async def _get_rooms_changed(
1623
1621
self ,
1624
1622
sync_result_builder : "SyncResultBuilder" ,
1625
1623
ignored_users : FrozenSet [str ],
1626
- excluded_rooms : List [str ],
1627
1624
) -> _RoomChanges :
1628
1625
"""Determine the changes in rooms to report to the user.
1629
1626
1630
1627
This function is a first pass at generating the rooms part of the sync response.
1631
1628
It determines which rooms have changed during the sync period, and categorises
1632
- them into four buckets: "knock", "invite", "join" and "leave".
1629
+ them into four buckets: "knock", "invite", "join" and "leave". It also excludes
1630
+ from that list any room that appears in the list of rooms to exclude from sync
1631
+ results in the server configuration.
1633
1632
1634
1633
1. Finds all membership changes for the user in the sync period (from
1635
1634
`since_token` up to `now_token`).
@@ -1655,7 +1654,7 @@ async def _get_rooms_changed(
1655
1654
# _have_rooms_changed. We could keep the results in memory to avoid a
1656
1655
# second query, at the cost of more complicated source code.
1657
1656
membership_change_events = await self .store .get_membership_changes_for_user (
1658
- user_id , since_token .room_key , now_token .room_key , excluded_rooms
1657
+ user_id , since_token .room_key , now_token .room_key , self . rooms_to_exclude
1659
1658
)
1660
1659
1661
1660
mem_change_events_by_room_id : Dict [str , List [EventBase ]] = {}
@@ -1862,7 +1861,6 @@ async def _get_all_rooms(
1862
1861
self ,
1863
1862
sync_result_builder : "SyncResultBuilder" ,
1864
1863
ignored_users : FrozenSet [str ],
1865
- ignored_rooms : List [str ],
1866
1864
) -> _RoomChanges :
1867
1865
"""Returns entries for all rooms for the user.
1868
1866
@@ -1884,7 +1882,7 @@ async def _get_all_rooms(
1884
1882
room_list = await self .store .get_rooms_for_local_user_where_membership_is (
1885
1883
user_id = user_id ,
1886
1884
membership_list = Membership .LIST ,
1887
- excluded_rooms = ignored_rooms ,
1885
+ excluded_rooms = self . rooms_to_exclude ,
1888
1886
)
1889
1887
1890
1888
room_entries = []
@@ -2150,7 +2148,9 @@ async def _generate_room_entry(
2150
2148
raise Exception ("Unrecognized rtype: %r" , room_builder .rtype )
2151
2149
2152
2150
async def get_rooms_for_user_at (
2153
- self , user_id : str , room_key : RoomStreamToken
2151
+ self ,
2152
+ user_id : str ,
2153
+ room_key : RoomStreamToken ,
2154
2154
) -> FrozenSet [str ]:
2155
2155
"""Get set of joined rooms for a user at the given stream ordering.
2156
2156
@@ -2176,7 +2176,12 @@ async def get_rooms_for_user_at(
2176
2176
# If the membership's stream ordering is after the given stream
2177
2177
# ordering, we need to go and work out if the user was in the room
2178
2178
# before.
2179
+ # We also need to check whether the room should be excluded from sync
2180
+ # responses as per the homeserver config.
2179
2181
for joined_room in joined_rooms :
2182
+ if joined_room .room_id in self .rooms_to_exclude :
2183
+ continue
2184
+
2180
2185
if not joined_room .event_pos .persisted_after (room_key ):
2181
2186
joined_room_ids .add (joined_room .room_id )
2182
2187
continue
0 commit comments