diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index deefc3c11e..5e5d95add1 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -245,14 +245,12 @@ class RoomMemberHandler(BaseHandler):
self.distributor.declare("user_left_room")
@defer.inlineCallbacks
- def get_room_members(self, room_id, membership=Membership.JOIN):
+ def get_room_members(self, room_id):
hs = self.hs
- memberships = yield self.store.get_room_members(
- room_id=room_id, membership=membership
- )
+ users = yield self.store.get_users_in_room(room_id)
- defer.returnValue([hs.parse_userid(m.user_id) for m in memberships])
+ defer.returnValue([hs.parse_userid(u) for u in users])
@defer.inlineCallbacks
def fetch_room_distributions_into(self, room_id, localusers=None,
@@ -531,11 +529,10 @@ class RoomListHandler(BaseHandler):
def get_public_room_list(self):
chunk = yield self.store.get_rooms(is_public=True)
for room in chunk:
- joined_members = yield self.store.get_room_members(
+ joined_users = yield self.store.get_users_in_room(
room_id=room["room_id"],
- membership=Membership.JOIN
)
- room["num_joined_members"] = len(joined_members)
+ room["num_joined_members"] = len(joined_users)
# FIXME (erikj): START is no longer a valid value
defer.returnValue({"start": "START", "end": "END", "chunk": chunk})
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index 4e416c50b1..4921561fc3 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -123,6 +123,19 @@ class RoomMemberStore(SQLBaseStore):
else:
return None
+ def get_users_in_room(self, room_id):
+ def f(txn):
+ sql = (
+ "SELECT m.user_id FROM room_memberships as m"
+ " INNER JOIN current_state_events as c"
+ " ON m.event_id = c.event_id"
+ " WHERE m.membership = ? AND m.room_id = ?"
+ )
+
+ txn.execute(sql, (Membership.JOIN, room_id))
+ return [r[0] for r in txn.fetchall()]
+ return self.runInteraction("get_users_in_room", f)
+
def get_room_members(self, room_id, membership=None):
"""Retrieve the current room member list for a room.
|