mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 14:53:10 -06:00
support returning current state from QueryStateAndAuthChain
This commit is contained in:
parent
fff18454b1
commit
c6a2604edc
|
|
@ -177,7 +177,7 @@ type QueryStateAndAuthChainRequest struct {
|
||||||
// The room ID to query the state in.
|
// The room ID to query the state in.
|
||||||
RoomID string `json:"room_id"`
|
RoomID string `json:"room_id"`
|
||||||
// The list of prev events for the event. Used to calculate the state at
|
// The list of prev events for the event. Used to calculate the state at
|
||||||
// the event
|
// the event. If empty, assumes current state.
|
||||||
PrevEventIDs []string `json:"prev_event_ids"`
|
PrevEventIDs []string `json:"prev_event_ids"`
|
||||||
// The list of auth events for the event. Used to calculate the auth chain
|
// The list of auth events for the event. Used to calculate the auth chain
|
||||||
AuthEventIDs []string `json:"auth_event_ids"`
|
AuthEventIDs []string `json:"auth_event_ids"`
|
||||||
|
|
|
||||||
|
|
@ -334,10 +334,41 @@ func (r *Queryer) QueryStateAndAuthChain(
|
||||||
response.RoomExists = true
|
response.RoomExists = true
|
||||||
response.RoomVersion = info.RoomVersion
|
response.RoomVersion = info.RoomVersion
|
||||||
|
|
||||||
stateEvents, err := r.loadStateAtEventIDs(ctx, *info, request.PrevEventIDs)
|
var stateEvents []gomatrixserverlib.Event
|
||||||
if err != nil {
|
if len(request.PrevEventIDs) > 0 {
|
||||||
return err
|
stateEvents, err = r.loadStateAtEventIDs(ctx, *info, request.PrevEventIDs)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no PrevEventIDs or AuthEventIDs were provided, so return current state instead.
|
||||||
|
|
||||||
|
// XXX: is this right?
|
||||||
|
roomState := state.NewStateResolution(r.DB, *info)
|
||||||
|
// no need to resolve state again later
|
||||||
|
request.ResolveState = false
|
||||||
|
|
||||||
|
var currentStateSnapshotNID types.StateSnapshotNID
|
||||||
|
_, currentStateSnapshotNID, _, err =
|
||||||
|
r.DB.LatestEventIDs(ctx, info.RoomNID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var stateEntries []types.StateEntry
|
||||||
|
stateEntries, err = roomState.LoadStateAtSnapshot(
|
||||||
|
ctx, currentStateSnapshotNID,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
stateEvents, err = helpers.LoadStateEvents(ctx, r.DB, stateEntries)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
response.PrevEventsExist = true
|
response.PrevEventsExist = true
|
||||||
|
|
||||||
// add the auth event IDs for the current state events too
|
// add the auth event IDs for the current state events too
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue