mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-06 07:15:04 -04:00
Add /user/{user_id}/shared_rooms/ api (#7785)
* Add shared_rooms api * Add changelog * Add . * Wrap response in {"rooms": } * linting * Add unstable_features key * Remove options from isort that aren't part of 5.x `-y` and `-rc` are now default behaviour and no longer exist. `dont-skip` is no longer required https://timothycrosley.github.io/isort/CHANGELOG/#500-penny-july-4-2020 * Update imports to make isort happy * Add changelog * Update tox.ini file with correct invocation * fix linting again for isort * Vendor prefix unstable API * Fix to match spec * import Codes * import Codes * Use FORBIDDEN * Update changelog.d/7785.feature Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> * Implement get_shared_rooms_for_users * a comma * trailing whitespace * Handle the easy feedback * Switch to using runInteraction * Add tests * Feedback * Seperate unstable endpoint from v2 * Add upgrade node * a line * Fix style by adding a blank line at EOF. * Update synapse/storage/databases/main/user_directory.py Co-authored-by: Tulir Asokan <tulir@maunium.net> * Update synapse/storage/databases/main/user_directory.py Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> * Update UPGRADE.rst Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> * Fix UPGRADE/CHANGELOG unstable paths unstable unstable unstable Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> Co-authored-by: Tulir Asokan <tulir@maunium.net> Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> Co-authored-by: Tulir Asokan <tulir@maunium.net>
This commit is contained in:
parent
9356656e67
commit
b257c788c0
8 changed files with 270 additions and 1 deletions
|
@ -15,7 +15,7 @@
|
|||
|
||||
import logging
|
||||
import re
|
||||
from typing import Any, Dict, Iterable, Optional, Tuple
|
||||
from typing import Any, Dict, Iterable, Optional, Set, Tuple
|
||||
|
||||
from synapse.api.constants import EventTypes, JoinRules
|
||||
from synapse.storage.database import DatabasePool
|
||||
|
@ -675,6 +675,48 @@ class UserDirectoryStore(UserDirectoryBackgroundUpdateStore):
|
|||
users.update(rows)
|
||||
return list(users)
|
||||
|
||||
@cached()
|
||||
async def get_shared_rooms_for_users(
|
||||
self, user_id: str, other_user_id: str
|
||||
) -> Set[str]:
|
||||
"""
|
||||
Returns the rooms that a local user shares with another local or remote user.
|
||||
|
||||
Args:
|
||||
user_id: The MXID of a local user
|
||||
other_user_id: The MXID of the other user
|
||||
|
||||
Returns:
|
||||
A set of room ID's that the users share.
|
||||
"""
|
||||
|
||||
def _get_shared_rooms_for_users_txn(txn):
|
||||
txn.execute(
|
||||
"""
|
||||
SELECT p1.room_id
|
||||
FROM users_in_public_rooms as p1
|
||||
INNER JOIN users_in_public_rooms as p2
|
||||
ON p1.room_id = p2.room_id
|
||||
AND p1.user_id = ?
|
||||
AND p2.user_id = ?
|
||||
UNION
|
||||
SELECT room_id
|
||||
FROM users_who_share_private_rooms
|
||||
WHERE
|
||||
user_id = ?
|
||||
AND other_user_id = ?
|
||||
""",
|
||||
(user_id, other_user_id, user_id, other_user_id),
|
||||
)
|
||||
rows = self.db_pool.cursor_to_dict(txn)
|
||||
return rows
|
||||
|
||||
rows = await self.db_pool.runInteraction(
|
||||
"get_shared_rooms_for_users", _get_shared_rooms_for_users_txn
|
||||
)
|
||||
|
||||
return {row["room_id"] for row in rows}
|
||||
|
||||
async def get_user_directory_stream_pos(self) -> int:
|
||||
return await self.db_pool.simple_select_one_onecol(
|
||||
table="user_directory_stream_pos",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue