diff options
author | Neil Johnson <neil@matrix.org> | 2018-08-16 15:10:16 +0100 |
---|---|---|
committer | Neil Johnson <neil@matrix.org> | 2018-08-16 15:10:16 +0100 |
commit | bfb6c586249069ccec46437536607fec3b2e4031 (patch) | |
tree | 41dcc4a5be007ec0ed7e3c4c271893eae022eb46 /synapse/handlers | |
parent | check for room state before deciding on action (diff) | |
parent | Add GET media/v1/config (#3184) (diff) | |
download | synapse-bfb6c586249069ccec46437536607fec3b2e4031.tar.xz |
Merge branch 'develop' of github.com:matrix-org/synapse into neilj/server_notices_on_blocking
Diffstat (limited to '')
-rw-r--r-- | synapse/handlers/pagination.py | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py index a97d43550f..5170d093e3 100644 --- a/synapse/handlers/pagination.py +++ b/synapse/handlers/pagination.py @@ -18,7 +18,7 @@ import logging from twisted.internet import defer from twisted.python.failure import Failure -from synapse.api.constants import Membership +from synapse.api.constants import EventTypes, Membership from synapse.api.errors import SynapseError from synapse.events.utils import serialize_event from synapse.types import RoomStreamToken @@ -251,6 +251,33 @@ class PaginationHandler(object): is_peeking=(member_event_id is None), ) + state = None + if event_filter and event_filter.lazy_load_members(): + # TODO: remove redundant members + + types = [ + (EventTypes.Member, state_key) + for state_key in set( + event.sender # FIXME: we also care about invite targets etc. + for event in events + ) + ] + + state_ids = yield self.store.get_state_ids_for_event( + events[0].event_id, types=types, + ) + + if state_ids: + state = yield self.store.get_events(list(state_ids.values())) + + if state: + state = yield filter_events_for_client( + self.store, + user_id, + state.values(), + is_peeking=(member_event_id is None), + ) + time_now = self.clock.time_msec() chunk = { @@ -262,4 +289,10 @@ class PaginationHandler(object): "end": next_token.to_string(), } + if state: + chunk["state"] = [ + serialize_event(e, time_now, as_client_event) + for e in state + ] + defer.returnValue(chunk) |