Don't get apservice interested rooms in RoomHandler.get_joined_rooms_for_users
3 files changed, 32 insertions, 12 deletions
diff --git a/synapse/handlers/events.py b/synapse/handlers/events.py
index 993d33ba47..f9ca2f8634 100644
--- a/synapse/handlers/events.py
+++ b/synapse/handlers/events.py
@@ -70,7 +70,15 @@ class EventStreamHandler(BaseHandler):
self._streams_per_user[auth_user] += 1
rm_handler = self.hs.get_handlers().room_member_handler
- room_ids = yield rm_handler.get_joined_rooms_for_user(auth_user)
+
+ app_service = yield self.store.get_app_service_by_user_id(
+ auth_user.to_string()
+ )
+ if app_service:
+ rooms = yield self.store.get_app_service_rooms(app_service)
+ room_ids = set(r.room_id for r in rooms)
+ else:
+ room_ids = yield rm_handler.get_joined_rooms_for_user(auth_user)
if timeout:
# If they've set a timeout set a minimum limit.
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 7511d294f3..82c16013a3 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -557,15 +557,9 @@ class RoomMemberHandler(BaseHandler):
"""Returns a list of roomids that the user has any of the given
membership states in."""
- app_service = yield self.store.get_app_service_by_user_id(
- user.to_string()
+ rooms = yield self.store.get_rooms_for_user(
+ user.to_string(),
)
- if app_service:
- rooms = yield self.store.get_app_service_rooms(app_service)
- else:
- rooms = yield self.store.get_rooms_for_user(
- user.to_string(),
- )
# For some reason the list of events contains duplicates
# TODO(paul): work out why because I really don't think it should
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 7206ae23d7..353a416054 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -96,9 +96,18 @@ class SyncHandler(BaseHandler):
return self.current_sync_for_user(sync_config, since_token)
rm_handler = self.hs.get_handlers().room_member_handler
- room_ids = yield rm_handler.get_joined_rooms_for_user(
- sync_config.user
+
+ app_service = yield self.store.get_app_service_by_user_id(
+ sync_config.user.to_string()
)
+ if app_service:
+ rooms = yield self.store.get_app_service_rooms(app_service)
+ room_ids = set(r.room_id for r in rooms)
+ else:
+ room_ids = yield rm_handler.get_joined_rooms_for_user(
+ sync_config.user
+ )
+
result = yield self.notifier.wait_for_events(
sync_config.user, room_ids,
sync_config.filter, timeout, current_sync_callback
@@ -229,7 +238,16 @@ class SyncHandler(BaseHandler):
logger.debug("Typing %r", typing_by_room)
rm_handler = self.hs.get_handlers().room_member_handler
- room_ids = yield rm_handler.get_joined_rooms_for_user(sync_config.user)
+ app_service = yield self.store.get_app_service_by_user_id(
+ sync_config.user.to_string()
+ )
+ if app_service:
+ rooms = yield self.store.get_app_service_rooms(app_service)
+ room_ids = set(r.room_id for r in rooms)
+ else:
+ room_ids = yield rm_handler.get_joined_rooms_for_user(
+ sync_config.user
+ )
# TODO (mjark): Does public mean "published"?
published_rooms = yield self.store.get_rooms(is_public=True)
|