fix(sync/v3): Do not include the last membership event when syncing left rooms

This commit is contained in:
Ginger committed 2025-12-07 19:58:24 +00:00
1 parent 8ffc6d4f15
commit ee51d4357f
2 files changed
+7 -5

No files matched your search

+1
View File
@@ -39,6 +39,7 @@ impl TimelinePdus {
}
}
/// Load up to `limit` PDUs in the range (starting_count, ending_count].
async fn load_timeline(
services: &Services,
sender_user: &UserId,
+6 -5
View File
@@ -137,19 +137,20 @@ pub(super) async fn load_left_room(
// if the user went from `join` to `leave`, they should be able to view the
// timeline.
let timeline_start_count = if let Some(last_sync_end_count) =
last_sync_end_count
{
let timeline_start_count =
if let Some(last_sync_end_count) = last_sync_end_count {
// for incremental syncs, start the timeline after `since`
PduCount::Normal(last_sync_end_count)
} else {
// for initial syncs, start the timeline at the previous membership event
// for initial syncs, start the timeline after the previous membership
// event. we don't want to include the membership event itself
// because clients get confused when they see a `join`
// membership event in a `leave` room.
services
.rooms
.timeline
.get_pdu_count(&prev_member_event.event_id)
.await?
.saturating_sub(1)
};
// end the timeline at the user's leave event