diff options
author | Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> | 2022-08-17 11:42:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-17 09:42:01 +0000 |
commit | d75512d19ebea6c0f9e38e9f55474fdb6da02b46 (patch) | |
tree | 2a284edb7a9c16b1040c6ca3a8966716a81234e8 /synapse/storage/databases/main/roommember.py | |
parent | Add metrics to track rate limiter queue timing (#13544) (diff) | |
download | synapse-d75512d19ebea6c0f9e38e9f55474fdb6da02b46.tar.xz |
Add forgotten status to Room Details API (#13503)
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 5e5f607a14..827c1f1efd 100644 --- a/synapse/storage/databases/main/roommember.py +++ b/synapse/storage/databases/main/roommember.py @@ -1215,6 +1215,30 @@ class RoomMemberWorkerStore(EventsWorkerStore): "get_forgotten_rooms_for_user", _get_forgotten_rooms_for_user_txn ) + async def is_locally_forgotten_room(self, room_id: str) -> bool: + """Returns whether all local users have forgotten this room_id. + + Args: + room_id: The room ID to query. + + Returns: + Whether the room is forgotten. + """ + + sql = """ + SELECT count(*) > 0 FROM local_current_membership + INNER JOIN room_memberships USING (room_id, event_id) + WHERE + room_id = ? + AND forgotten = 0; + """ + + rows = await self.db_pool.execute("is_forgotten_room", None, sql, room_id) + + # `count(*)` returns always an integer + # If any rows still exist it means someone has not forgotten this room yet + return not rows[0][0] + async def get_rooms_user_has_been_in(self, user_id: str) -> Set[str]: """Get all rooms that the user has ever been in. |