mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-09 23:23:10 -06:00
Tweaks
This commit is contained in:
parent
bb3566a649
commit
1bc7faf63c
|
|
@ -336,7 +336,15 @@ func (r *messagesReq) retrieveEvents(ctx context.Context, rsAPI api.SyncRoomserv
|
|||
// removed all of them. This means there are no events for this user
|
||||
// anymore. Let them know.
|
||||
if errors.Is(err, shared.ErrNoEventsForFilter) {
|
||||
return []synctypes.ClientEvent{}, *r.from, emptyToken, nil
|
||||
if len(streamEvents) == 0 {
|
||||
return []synctypes.ClientEvent{}, *r.from, emptyToken, nil
|
||||
}
|
||||
// We possibly received events, try to get start/end from them
|
||||
start, end, err = r.getStartEnd(r.snapshot.StreamEventsToEvents(ctx, r.device, streamEvents, rsAPI))
|
||||
if err != nil {
|
||||
return []synctypes.ClientEvent{}, *r.from, *r.to, err
|
||||
}
|
||||
return []synctypes.ClientEvent{}, start, end, nil
|
||||
}
|
||||
err = fmt.Errorf("GetEventsInRange: %w", err)
|
||||
return []synctypes.ClientEvent{}, *r.from, emptyToken, err
|
||||
|
|
|
|||
|
|
@ -81,7 +81,10 @@ type DatabaseTransaction interface {
|
|||
// If no data is retrieved, returns an empty map
|
||||
// If there was an issue with the retrieval, returns an error
|
||||
GetAccountDataInRange(ctx context.Context, userID string, r types.Range, accountDataFilterPart *synctypes.EventFilter) (map[string][]string, types.StreamPosition, error)
|
||||
// GetEventsInTopologicalRange retrieves all of the events on a given ordering using the given extremities and limit. If backwardsOrdering is true, the most recent event must be first, else last.
|
||||
// GetEventsInTopologicalRange retrieves all of the events on a given ordering using the given extremities and limit.
|
||||
// If backwardsOrdering is true, the most recent event must be first, else last.
|
||||
// Returns the filtered StreamEvents on success. Returns **unfiltered** StreamEvents and ErrNoEventsForFilter if
|
||||
// the provided filter removed all events, this can be used to still calculate the start/end position. (e.g for `/messages`)
|
||||
GetEventsInTopologicalRange(ctx context.Context, from, to *types.TopologyToken, roomID string, filter *synctypes.RoomEventFilter, backwardOrdering bool) (events []types.StreamEvent, err error)
|
||||
// EventPositionInTopology returns the depth and stream position of the given event.
|
||||
EventPositionInTopology(ctx context.Context, eventID string) (types.TopologyToken, error)
|
||||
|
|
|
|||
|
|
@ -273,7 +273,13 @@ func (d *DatabaseTransaction) GetEventsInTopologicalRange(
|
|||
// Check if we should be able to return events.
|
||||
// If we received 0 events, this most likely means that the provided filter removed them.
|
||||
if len(eIDs) > 0 && len(events) == 0 {
|
||||
return nil, ErrNoEventsForFilter
|
||||
// We try to fetch the events without a filter, so we can tell the client if there
|
||||
// are more events earlier than the requested and filtered.
|
||||
events, err = d.OutputEvents.SelectEvents(ctx, d.txn, eIDs, nil, true)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return events, ErrNoEventsForFilter
|
||||
}
|
||||
|
||||
return
|
||||
|
|
|
|||
|
|
@ -250,7 +250,8 @@ func TestGetEventsInRangeWithTopologyTokenNoEventsForFilter(t *testing.T) {
|
|||
filter := &synctypes.RoomEventFilter{Limit: 20, NotTypes: ¬Types, Senders: &senders}
|
||||
paginatedEvents, err := snapshot.GetEventsInTopologicalRange(ctx, &from, &to, r.ID, filter, true)
|
||||
assert.Equal(t, shared.ErrNoEventsForFilter, err)
|
||||
assert.Nil(t, paginatedEvents)
|
||||
gots := snapshot.StreamEventsToEvents(context.Background(), nil, paginatedEvents, nil)
|
||||
test.AssertEventsEqual(t, gots, test.Reversed(events[len(events)-15:]))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue