Skip to content
Snippets Groups Projects
Commit a664ec20 authored by Erik Johnston's avatar Erik Johnston
Browse files

Add a do_users_share_a_room method and use that in the presence handler.

parent f6daa9f1
No related branches found
No related tags found
No related merge requests found
......@@ -159,12 +159,11 @@ class PresenceHandler(BaseHandler):
if allowed_by_subscription:
defer.returnValue(True)
rm_handler = self.homeserver.get_handlers().room_member_handler
for room_id in (yield rm_handler.get_rooms_for_user(observer_user)):
if observed_user in (yield rm_handler.get_room_members(room_id)):
defer.returnValue(True)
share_room = yield self.store.do_users_share_a_room(
[observer_user, observed_user]
)
defer.returnValue(False)
defer.returnValue(share_room)
@defer.inlineCallbacks
def get_state(self, target_user, auth_user):
......
......@@ -150,3 +150,24 @@ class RoomMemberStore(SQLBaseStore):
results = [self._parse_event_from_row(r) for r in rows]
defer.returnValue(results)
@defer.inlineCallbacks
def do_users_share_a_room(self, user_list):
""" Checks whether a list of users share a room.
"""
user_list_clause = " OR ".join(["m.user_id = ?"] * len(user_list))
sql = (
"SELECT m.room_id FROM room_memberships as m "
"INNER JOIN current_state_events as c "
"ON m.event_id = c.event_id "
"WHERE m.membership = 'join' "
"AND (%(clause)s) "
"GROUP BY m.room_id HAVING COUNT(m.room_id) = ?"
) % {"clause": user_list_clause}
args = user_list
args.append(len(user_list))
rows = yield self._execute(None, sql, *args)
defer.returnValue(len(rows) > 0)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment