mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-04-10 13:53:40 +00:00
Make a very determinate end to /messages if we hit the create event in back-pagination
This commit is contained in:
parent
e4add4bbb6
commit
6640ce6693
1 changed files with 21 additions and 15 deletions
|
@ -158,6 +158,7 @@ func OnIncomingMessagesRequest(
|
||||||
util.GetLogger(req.Context()).WithError(err).Error("mreq.retrieveEvents failed")
|
util.GetLogger(req.Context()).WithError(err).Error("mreq.retrieveEvents failed")
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
|
|
||||||
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
util.GetLogger(req.Context()).WithFields(logrus.Fields{
|
||||||
"from": from.String(),
|
"from": from.String(),
|
||||||
"to": to.String(),
|
"to": to.String(),
|
||||||
|
@ -253,21 +254,26 @@ func (r *messagesReq) retrieveEvents() (
|
||||||
err = fmt.Errorf("EventPositionInTopology: for start event %s: %w", events[0].EventID(), err)
|
err = fmt.Errorf("EventPositionInTopology: for start event %s: %w", events[0].EventID(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
end, err = r.db.EventPositionInTopology(
|
if r.backwardOrdering && events[len(events)-1].Type() == gomatrixserverlib.MRoomCreate {
|
||||||
r.ctx, events[len(events)-1].EventID(),
|
// We've hit the beginning of the room so there's really nowhere else
|
||||||
)
|
// to go. This seems to fix Riot iOS from looping on /messages endlessly.
|
||||||
if err != nil {
|
end = types.NewTopologyToken(0, 0)
|
||||||
err = fmt.Errorf("EventPositionInTopology: for end event %s: %w", events[len(events)-1].EventID(), err)
|
} else {
|
||||||
return
|
end, err = r.db.EventPositionInTopology(
|
||||||
}
|
r.ctx, events[len(events)-1].EventID(),
|
||||||
|
)
|
||||||
if r.backwardOrdering {
|
if err != nil {
|
||||||
// A stream/topological position is a cursor located between two events.
|
err = fmt.Errorf("EventPositionInTopology: for end event %s: %w", events[len(events)-1].EventID(), err)
|
||||||
// While they are identified in the code by the event on their right (if
|
return
|
||||||
// we consider a left to right chronological order), tokens need to refer
|
}
|
||||||
// to them by the event on their left, therefore we need to decrement the
|
if r.backwardOrdering {
|
||||||
// end position we send in the response if we're going backward.
|
// A stream/topological position is a cursor located between two events.
|
||||||
end.Decrement()
|
// While they are identified in the code by the event on their right (if
|
||||||
|
// we consider a left to right chronological order), tokens need to refer
|
||||||
|
// to them by the event on their left, therefore we need to decrement the
|
||||||
|
// end position we send in the response if we're going backward.
|
||||||
|
end.Decrement()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientEvents, start, end, err
|
return clientEvents, start, end, err
|
||||||
|
|
Loading…
Reference in a new issue