(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string)
| 491 | } |
| 492 | |
| 493 | func (r *Queryer) loadStateAtEventIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]*gomatrixserverlib.Event, bool, error) { |
| 494 | roomState := state.NewStateResolution(r.DB, roomInfo) |
| 495 | prevStates, err := r.DB.StateAtEventIDs(ctx, eventIDs) |
| 496 | if err != nil { |
| 497 | switch err.(type) { |
| 498 | case types.MissingEventError: |
| 499 | return nil, false, nil |
| 500 | default: |
| 501 | return nil, false, err |
| 502 | } |
| 503 | } |
| 504 | // Currently only used on /state and /state_ids |
| 505 | rejected := false |
| 506 | for i := range prevStates { |
| 507 | if prevStates[i].IsRejected { |
| 508 | rejected = true |
| 509 | break |
| 510 | } |
| 511 | } |
| 512 | |
| 513 | // Look up the currrent state for the requested tuples. |
| 514 | stateEntries, err := roomState.LoadCombinedStateAfterEvents( |
| 515 | ctx, prevStates, |
| 516 | ) |
| 517 | if err != nil { |
| 518 | return nil, rejected, err |
| 519 | } |
| 520 | |
| 521 | events, err := helpers.LoadStateEvents(ctx, r.DB, stateEntries) |
| 522 | |
| 523 | return events, rejected, err |
| 524 | } |
| 525 | |
| 526 | type eventsFromIDs func(context.Context, []string) ([]types.Event, error) |
| 527 |
no test coverage detected