From e5ae13f5416169cb57440223a7e1fac6cc20914e Mon Sep 17 00:00:00 2001 From: Tak Wai Wong Date: Fri, 28 Oct 2022 12:58:28 -0700 Subject: [PATCH] fix issue where newly joined room state is not returned to the client --- syncapi/streams/stream_pdu.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/syncapi/streams/stream_pdu.go b/syncapi/streams/stream_pdu.go index 3ab0f4ed4..d5def30dd 100644 --- a/syncapi/streams/stream_pdu.go +++ b/syncapi/streams/stream_pdu.go @@ -252,7 +252,13 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse( return r.From, fmt.Errorf("p.DB.RecentEvents: %w", err) } recentEvents := snapshot.StreamEventsToEvents(device, recentStreamEvents) - delta.StateEvents = removeDuplicates(delta.StateEvents, recentEvents) // roll back + // Don't remove the state events if this is a newly joined room. The member + // needs the full room state. For example, to figure out if the room is a space + // or not, it needs the m.room.create event which may be chronologically outside + // the filter limit. + if !delta.NewlyJoined { + delta.StateEvents = removeDuplicates(delta.StateEvents, recentEvents) // roll back + } prevBatch, err := snapshot.GetBackwardTopologyPos(ctx, recentStreamEvents) if err != nil { return r.From, fmt.Errorf("p.DB.GetBackwardTopologyPos: %w", err)