From 8b0f60a47099f9259c83410ef6729ea26811126c Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Thu, 8 Nov 2018 15:11:11 +0000 Subject: [PATCH] Fill the prev_batch property in responses from /sync (#589) * Fill the prev_batch property in responses from /sync * Set prev_batch to 1 (first possible value in the sequence) if it's about to hit 0 --- .../dendrite/syncapi/storage/syncserver.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/github.com/matrix-org/dendrite/syncapi/storage/syncserver.go b/src/github.com/matrix-org/dendrite/syncapi/storage/syncserver.go index 84417a34..ec973e2c 100644 --- a/src/github.com/matrix-org/dendrite/syncapi/storage/syncserver.go +++ b/src/github.com/matrix-org/dendrite/syncapi/storage/syncserver.go @@ -310,6 +310,11 @@ func (d *SyncServerDatabase) CompleteSync( stateEvents = removeDuplicates(stateEvents, recentEvents) jr := types.NewJoinResponse() + if prevBatch := recentStreamEvents[0].streamPosition - 1; prevBatch > 0 { + jr.Timeline.PrevBatch = types.StreamPosition(prevBatch).String() + } else { + jr.Timeline.PrevBatch = types.StreamPosition(1).String() + } jr.Timeline.Events = gomatrixserverlib.ToClientEvents(recentEvents, gomatrixserverlib.FormatSync) jr.Timeline.Limited = true jr.State.Events = gomatrixserverlib.ToClientEvents(stateEvents, gomatrixserverlib.FormatSync) @@ -439,6 +444,11 @@ func (d *SyncServerDatabase) addRoomDeltaToResponse( switch delta.membership { case "join": jr := types.NewJoinResponse() + if prevBatch := recentStreamEvents[0].streamPosition - 1; prevBatch > 0 { + jr.Timeline.PrevBatch = types.StreamPosition(prevBatch).String() + } else { + jr.Timeline.PrevBatch = types.StreamPosition(1).String() + } jr.Timeline.Events = gomatrixserverlib.ToClientEvents(recentEvents, gomatrixserverlib.FormatSync) jr.Timeline.Limited = false // TODO: if len(events) >= numRecents + 1 and then set limited:true jr.State.Events = gomatrixserverlib.ToClientEvents(delta.stateEvents, gomatrixserverlib.FormatSync) @@ -449,6 +459,11 @@ func (d *SyncServerDatabase) addRoomDeltaToResponse( // TODO: recentEvents may contain events that this user is not allowed to see because they are // no longer in the room. lr := types.NewLeaveResponse() + if prevBatch := recentStreamEvents[0].streamPosition - 1; prevBatch > 0 { + lr.Timeline.PrevBatch = types.StreamPosition(prevBatch).String() + } else { + lr.Timeline.PrevBatch = types.StreamPosition(1).String() + } lr.Timeline.Events = gomatrixserverlib.ToClientEvents(recentEvents, gomatrixserverlib.FormatSync) lr.Timeline.Limited = false // TODO: if len(events) >= numRecents + 1 and then set limited:true lr.State.Events = gomatrixserverlib.ToClientEvents(delta.stateEvents, gomatrixserverlib.FormatSync)