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

Commit 282b229

Browse files
author
David Robertson
committed
SyncResultBuilder: remove excluded rooms
1 parent e1e0703 commit 282b229

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

synapse/handlers/sync.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,15 +1387,6 @@ async def generate_sync_result(
13871387
if await self.store.is_partial_state_room(room_id)
13881388
)
13891389

1390-
# Now we have our list of joined room IDs, exclude as configured and freeze
1391-
joined_room_ids = frozenset(
1392-
(
1393-
room_id
1394-
for room_id in mutable_joined_room_ids
1395-
if room_id not in mutable_rooms_to_exclude
1396-
)
1397-
)
1398-
13991390
logger.debug(
14001391
"Calculating sync response for %r between %s and %s",
14011392
sync_config.user,
@@ -1408,7 +1399,7 @@ async def generate_sync_result(
14081399
full_state,
14091400
since_token=since_token,
14101401
now_token=now_token,
1411-
joined_room_ids=joined_room_ids,
1402+
joined_room_ids=frozenset(mutable_joined_room_ids),
14121403
excluded_room_ids=frozenset(mutable_rooms_to_exclude),
14131404
membership_change_events=membership_change_events,
14141405
)
@@ -2561,7 +2552,8 @@ class SyncResultBuilder:
25612552
full_state: The full_state flag as specified by user
25622553
since_token: The token supplied by user, or None.
25632554
now_token: The token to sync up to.
2564-
joined_room_ids: List of rooms the user is joined to
2555+
joined_room_ids: Set of rooms the user is joined to. The excluded_room_ids
2556+
are automatically discarded from this set.
25652557
excluded_room_ids: Set of room ids we should omit from the /sync response.
25662558
25672559
# The following mirror the fields in a sync response
@@ -2590,6 +2582,9 @@ class SyncResultBuilder:
25902582
archived: List[ArchivedSyncResult] = attr.Factory(list)
25912583
to_device: List[JsonDict] = attr.Factory(list)
25922584

2585+
def __attrs_post_init__(self) -> None:
2586+
self.joined_room_ids = self.joined_room_ids - self.excluded_room_ids
2587+
25932588
def calculate_user_changes(self) -> Tuple[AbstractSet[str], AbstractSet[str]]:
25942589
"""Work out which other users have joined or left rooms we are joined to.
25952590

tests/handlers/test_sync.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14+
import unittest as stdlib_unittest
1415
from typing import Optional
1516
from unittest.mock import MagicMock, Mock, patch
1617

@@ -20,18 +21,34 @@
2021
from synapse.api.errors import Codes, ResourceLimitError
2122
from synapse.api.filtering import Filtering
2223
from synapse.api.room_versions import RoomVersions
23-
from synapse.handlers.sync import SyncConfig, SyncResult
24+
from synapse.handlers.sync import SyncConfig, SyncResult, SyncResultBuilder
2425
from synapse.rest import admin
2526
from synapse.rest.client import knock, login, room
2627
from synapse.server import HomeServer
27-
from synapse.types import UserID, create_requester
28+
from synapse.types import StreamToken, UserID, create_requester
2829
from synapse.util import Clock
2930

3031
import tests.unittest
3132
import tests.utils
3233
from tests.test_utils import make_awaitable
3334

3435

36+
class TestSyncResultBuilder(stdlib_unittest.TestCase):
37+
def test_excluded_rooms_set_is_discard_from_joined_rooms_set(self) -> None:
38+
builder = SyncResultBuilder(
39+
sync_config=generate_sync_config("@alice:wonderland"),
40+
full_state=False,
41+
since_token=None,
42+
now_token=StreamToken.START,
43+
joined_room_ids=frozenset(["a", "b", "c"]),
44+
excluded_room_ids=frozenset(["c", "d"]),
45+
membership_change_events=[],
46+
)
47+
48+
self.assertEqual(builder.joined_room_ids, {"a", "b"})
49+
self.assertEqual(builder.excluded_room_ids, {"c", "d"})
50+
51+
3552
class SyncTestCase(tests.unittest.HomeserverTestCase):
3653
"""Tests Sync Handler."""
3754

0 commit comments

Comments
 (0)