mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-10 16:33:11 -06:00
Actually implement the API
This commit is contained in:
parent
a2853593c9
commit
80b6116431
|
|
@ -68,20 +68,12 @@ func (r *RoomserverQueryAPI) QueryLatestEventsAndState(
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
eventNIDs := make([]types.EventNID, len(stateEntries))
|
stateEvents, err := r.loadStateEvents(stateEntries)
|
||||||
for i := range stateEntries {
|
|
||||||
eventNIDs[i] = stateEntries[i].EventNID
|
|
||||||
}
|
|
||||||
|
|
||||||
stateEvents, err := r.DB.Events(eventNIDs)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
response.StateEvents = make([]gomatrixserverlib.Event, len(stateEvents))
|
response.StateEvents = stateEvents
|
||||||
for i := range stateEvents {
|
|
||||||
response.StateEvents[i] = stateEvents[i].Event
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,7 +92,7 @@ func (r *RoomserverQueryAPI) QueryStateAfterEvents(
|
||||||
}
|
}
|
||||||
response.RoomExists = true
|
response.RoomExists = true
|
||||||
|
|
||||||
_, err = r.DB.StateAtEventIDs(request.PrevEventIDs)
|
prevStates, err := r.DB.StateAtEventIDs(request.PrevEventIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: Check if the error was because we are missing events from the
|
// TODO: Check if the error was because we are missing events from the
|
||||||
// database or are missing state at events from the database.
|
// database or are missing state at events from the database.
|
||||||
|
|
@ -108,10 +100,39 @@ func (r *RoomserverQueryAPI) QueryStateAfterEvents(
|
||||||
}
|
}
|
||||||
response.PrevEventsExist = true
|
response.PrevEventsExist = true
|
||||||
|
|
||||||
// TODO: Calculate the state and return it.
|
// Lookup the currrent state for the requested tuples.
|
||||||
|
stateEntries, err := state.LoadStateAfterEventsForStringTuples(r.DB, prevStates, request.StateToFetch)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
stateEvents, err := r.loadStateEvents(stateEntries)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
response.StateEvents = stateEvents
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RoomserverQueryAPI) loadStateEvents(stateEntries []types.StateEntry) ([]gomatrixserverlib.Event, error) {
|
||||||
|
eventNIDs := make([]types.EventNID, len(stateEntries))
|
||||||
|
for i := range stateEntries {
|
||||||
|
eventNIDs[i] = stateEntries[i].EventNID
|
||||||
|
}
|
||||||
|
|
||||||
|
stateEvents, err := r.DB.Events(eventNIDs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]gomatrixserverlib.Event, len(stateEvents))
|
||||||
|
for i := range stateEvents {
|
||||||
|
result[i] = stateEvents[i].Event
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetupHTTP adds the RoomserverQueryAPI handlers to the http.ServeMux.
|
// SetupHTTP adds the RoomserverQueryAPI handlers to the http.ServeMux.
|
||||||
func (r *RoomserverQueryAPI) SetupHTTP(servMux *http.ServeMux) {
|
func (r *RoomserverQueryAPI) SetupHTTP(servMux *http.ServeMux) {
|
||||||
servMux.Handle(
|
servMux.Handle(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue