diff options
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/pagination.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py index 6f4820c240..35afe6b855 100644 --- a/synapse/handlers/pagination.py +++ b/synapse/handlers/pagination.py @@ -515,14 +515,25 @@ class PaginationHandler: next_token = from_token.copy_and_replace(StreamKeyType.ROOM, next_key) - if events: - if event_filter: - events = await event_filter.filter(events) + # if no events are returned from pagination, that implies + # we have reached the end of the available events. + # In that case we do not return end, to tell the client + # there is no need for further queries. + if not events: + return { + "chunk": [], + "start": await from_token.to_string(self.store), + } - events = await filter_events_for_client( - self.storage, user_id, events, is_peeking=(member_event_id is None) - ) + if event_filter: + events = await event_filter.filter(events) + + events = await filter_events_for_client( + self.storage, user_id, events, is_peeking=(member_event_id is None) + ) + # if after the filter applied there are no more events + # return immediately - but there might be more in next_token batch if not events: return { "chunk": [], |