diff options
author | Erik Johnston <erik@matrix.org> | 2016-12-08 13:32:05 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-12-08 13:32:07 +0000 |
commit | 52d12ca78232d54f5be516f82e2cebdd8b498516 (patch) | |
tree | 04323eb64c45cbb92da01ee26f21773f5f8f37cf /synapse/storage/roommember.py | |
parent | Add profile data to the room_membership table for joins (diff) | |
download | synapse-52d12ca78232d54f5be516f82e2cebdd8b498516.tar.xz |
Add /room/<room_id>/joined_members API
This returns the currently joined members in the room with their display names and avatar urls. This is more efficient than /members for large rooms where you don't need the full events.
Diffstat (limited to 'synapse/storage/roommember.py')
-rw-r--r-- | synapse/storage/roommember.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py index 7bf9040c0a..b2a45a38c1 100644 --- a/synapse/storage/roommember.py +++ b/synapse/storage/roommember.py @@ -409,7 +409,7 @@ class RoomMemberStore(SQLBaseStore): table="room_memberships", column="event_id", iterable=member_event_ids, - retcols=['user_id'], + retcols=['user_id', 'display_name', 'avatar_url'], keyvalues={ "membership": Membership.JOIN, }, @@ -417,11 +417,21 @@ class RoomMemberStore(SQLBaseStore): desc="_get_joined_users_from_context", ) - users_in_room = set(row["user_id"] for row in rows) + users_in_room = { + row["user_id"]: { + "display_name": row["display_name"], + "avatar_url": row["avatar_url"], + } + for row in rows + } + if event is not None and event.type == EventTypes.Member: if event.membership == Membership.JOIN: if event.event_id in member_event_ids: - users_in_room.add(event.state_key) + users_in_room[event.state_key] = { + "display_name": event.content.get("displayname", None), + "avatar_url": event.content.get("avatar_url", None), + } defer.returnValue(users_in_room) |