summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/handlers/_base.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py
index 5c7617de44..46abb8ec51 100644
--- a/synapse/handlers/_base.py
+++ b/synapse/handlers/_base.py
@@ -53,16 +53,23 @@ class BaseHandler(object):
         self.event_builder_factory = hs.get_event_builder_factory()
 
     @defer.inlineCallbacks
-    def _filter_events_for_clients(self, users, events):
+    def _filter_events_for_clients(self, user_tuples, events):
         """ Returns dict of user_id -> list of events that user is allowed to
         see.
         """
-        event_id_to_state = yield self.store.get_state_for_events(
-            frozenset(e.event_id for e in events),
-            types=(
+        # If there is only one user, just get the state for that one user,
+        # otherwise just get all the state.
+        if len(user_tuples) == 1:
+            types = (
                 (EventTypes.RoomHistoryVisibility, ""),
-                (EventTypes.Member, None),
+                (EventTypes.Member, user_tuples[0][0]),
             )
+        else:
+            types = None
+
+        event_id_to_state = yield self.store.get_state_for_events(
+            frozenset(e.event_id for e in events),
+            types=types
         )
 
         forgotten = yield defer.gatherResults([
@@ -122,7 +129,7 @@ class BaseHandler(object):
                 for event in events
                 if allowed(event, user_id, is_guest)
             ]
-            for user_id, is_guest in users
+            for user_id, is_guest in user_tuples
         })
 
     @defer.inlineCallbacks