diff options
author | Jonathan de Jong <jonathan@automatia.nl> | 2022-05-30 11:05:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-30 10:05:31 +0100 |
commit | 6be4953b998e4e4b730192b40642d2ec7bb0d7ad (patch) | |
tree | a0f94bb0abc1fdd2510dba751994e77d3eb7c624 /synapse/storage/databases/main/roommember.py | |
parent | LockStore: fix acquiring a lock via `LockStore.try_acquire_lock` (#12832) (diff) | |
download | synapse-6be4953b998e4e4b730192b40642d2ec7bb0d7ad.tar.xz |
Mutual rooms: Remove dependency on user directory (#12836)
Diffstat (limited to 'synapse/storage/databases/main/roommember.py')
-rw-r--r-- | synapse/storage/databases/main/roommember.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/synapse/storage/databases/main/roommember.py b/synapse/storage/databases/main/roommember.py index cc528fcf2d..e222b7bd1f 100644 --- a/synapse/storage/databases/main/roommember.py +++ b/synapse/storage/databases/main/roommember.py @@ -670,6 +670,30 @@ class RoomMemberWorkerStore(EventsWorkerStore): return user_who_share_room + @cached(cache_context=True, iterable=True) + async def get_mutual_rooms_between_users( + self, user_ids: FrozenSet[str], cache_context: _CacheContext + ) -> FrozenSet[str]: + """ + Returns the set of rooms that all users in `user_ids` share. + + Args: + user_ids: A frozen set of all users to investigate and return + overlapping joined rooms for. + cache_context + """ + shared_room_ids: Optional[FrozenSet[str]] = None + for user_id in user_ids: + room_ids = await self.get_rooms_for_user( + user_id, on_invalidate=cache_context.invalidate + ) + if shared_room_ids is not None: + shared_room_ids &= room_ids + else: + shared_room_ids = room_ids + + return shared_room_ids or frozenset() + async def get_joined_users_from_context( self, event: EventBase, context: EventContext ) -> Dict[str, ProfileInfo]: |