summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2024-07-17 10:32:31 +0100
committerErik Johnston <erik@matrix.org>2024-07-17 13:59:34 +0100
commit185831754ead63f1728674497b0dcb91059091ee (patch)
treee4dbbccfbb392b0fd92725ff4224869178b3451a
parentUse new room store to track if we've sent a room down (diff)
downloadsynapse-185831754ead63f1728674497b0dcb91059091ee.tar.xz
Handle initial flag correctly
-rw-r--r--synapse/handlers/sliding_sync.py66
1 files changed, 31 insertions, 35 deletions
diff --git a/synapse/handlers/sliding_sync.py b/synapse/handlers/sliding_sync.py
index 618c69d5fe..32686036b4 100644
--- a/synapse/handlers/sliding_sync.py
+++ b/synapse/handlers/sliding_sync.py
@@ -1391,6 +1391,37 @@ class SlidingSyncHandler:
         """
         user = sync_config.user
 
+        # Determine whether we should limit the timeline to the token range.
+        #
+        # We should return historical messages (before token range) in the
+        # following cases because we want clients to be able to show a basic
+        # screen of information:
+        #  - Initial sync (because no `from_token` to limit us anyway)
+        #  - When users `newly_joined`
+        #  - For an incremental sync where we haven't sent it down this
+        #    connection before
+        to_bound = None
+        initial = True
+        if from_token and not room_membership_for_user_at_to_token.newly_joined:
+            room_status = await self.connection_store.have_sent_room(
+                user_id=user.to_string(),
+                conn_id=sync_config.connection_id(),
+                connection_token=from_token.connection_token,
+                room_id=room_id,
+            )
+            if room_status.status == HaveSentRoomFlag.LIVE:
+                to_bound = from_token.stream_token.room_key
+                initial = False
+            elif room_status.status == HaveSentRoomFlag.PREVIOUSLY:
+                assert room_status.last_token is not None
+                to_bound = room_status.last_token
+                initial = False
+            elif room_status.status == HaveSentRoomFlag.NEVER:
+                to_bound = None
+                initial = True
+            else:
+                assert_never(room_status.status)
+
         # Assemble the list of timeline events
         #
         # FIXME: It would be nice to make the `rooms` response more uniform regardless of
@@ -1426,35 +1457,6 @@ class SlidingSyncHandler:
                     room_membership_for_user_at_to_token.event_pos.to_room_stream_token()
                 )
 
-            # Determine whether we should limit the timeline to the token range.
-            #
-            # We should return historical messages (before token range) in the
-            # following cases because we want clients to be able to show a basic
-            # screen of information:
-            #  - Initial sync (because no `from_token` to limit us anyway)
-            #  - When users `newly_joined`
-            #  - For an incremental sync where we haven't sent it down this
-            #    connection before
-
-            if from_token and not room_membership_for_user_at_to_token.newly_joined:
-                room_status = await self.connection_store.have_sent_room(
-                    user_id=user.to_string(),
-                    conn_id=sync_config.connection_id(),
-                    connection_token=from_token.connection_token,
-                    room_id=room_id,
-                )
-                if room_status.status == HaveSentRoomFlag.LIVE:
-                    to_bound = from_token.stream_token.room_key
-                elif room_status.status == HaveSentRoomFlag.PREVIOUSLY:
-                    assert room_status.last_token is not None
-                    to_bound = room_status.last_token
-                elif room_status.status == HaveSentRoomFlag.NEVER:
-                    to_bound = None
-                else:
-                    assert_never(room_status.status)
-            else:
-                to_bound = None
-
             timeline_events, new_room_key = await self.store.paginate_room_events(
                 room_id=room_id,
                 from_key=from_bound,
@@ -1575,12 +1577,6 @@ class SlidingSyncHandler:
         # indicate to the client that a state reset happened. Perhaps we should indicate
         # this by setting `initial: True` and empty `required_state`.
 
-        # TODO: Since we can't determine whether we've already sent a room down this
-        # Sliding Sync connection before (we plan to add this optimization in the
-        # future), we're always returning the requested room state instead of
-        # updates.
-        initial = True
-
         # Check whether the room has a name set
         name_state_ids = await self.get_current_state_ids_at(
             room_id=room_id,