diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index a1a818e264..497744b9af 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -662,29 +662,28 @@ class SyncHandler(BaseHandler): limit=timeline_limit + 1, ) - p_room_token = room_pagination_config.get("t", None) - if p_room_token: - needing_full_state = yield self._get_rooms_that_need_full_state( - joined_room_ids, - since_token, - room_pagination_config.get("ts", 0), - ) - else: - needing_full_state = set() - joined = [] # We loop through all room ids, even if there are no new events, in case # there are non room events taht we need to notify about. for room_id in joined_room_ids: room_entry = room_to_events.get(room_id, None) - need_full_state = room_id in needing_full_state - if room_entry: events, start_key = room_entry prev_batch_token = now_token.copy_and_replace("room_key", start_key) + p_room_token = room_pagination_config.get("t", None) + if p_room_token: + needing_full_state = yield self._get_rooms_that_need_full_state( + [room_id], + since_token, + room_pagination_config.get("ts", 0), + ) + need_full_state = room_id in needing_full_state + else: + need_full_state = False + newly_joined_room = (room_id in newly_joined_rooms) or need_full_state full_state = newly_joined_room @@ -695,9 +694,6 @@ class SyncHandler(BaseHandler): newly_joined_room=newly_joined_room, ) else: - if need_full_state: - continue - batch = TimelineBatch( events=[], prev_batch=since_token, @@ -717,6 +713,16 @@ class SyncHandler(BaseHandler): full_state=full_state, ) if room_sync: + if not room_sync.timeline: + p_room_token = room_pagination_config.get("t", None) + if p_room_token: + needing_full_state = yield self._get_rooms_that_need_full_state( + [room_id], + since_token, + room_pagination_config.get("ts", 0), + ) + if room_id in needing_full_state: + continue joined.append(room_sync) # For each newly joined room, we want to send down presence of