MCPcopy Create free account
hub / github.com/daodst/chat / QueryStateAfterEvents

Method QueryStateAfterEvents

roomserver/internal/query/query.go:55–128  ·  view source on GitHub ↗

QueryStateAfterEvents implements api.RoomserverInternalAPI

(
	ctx context.Context,
	request *api.QueryStateAfterEventsRequest,
	response *api.QueryStateAfterEventsResponse,
)

Source from the content-addressed store, hash-verified

53
54// QueryStateAfterEvents implements api.RoomserverInternalAPI
55func (r *Queryer) QueryStateAfterEvents(
56 ctx context.Context,
57 request *api.QueryStateAfterEventsRequest,
58 response *api.QueryStateAfterEventsResponse,
59) error {
60 info, err := r.DB.RoomInfo(ctx, request.RoomID)
61 if err != nil {
62 return err
63 }
64 if info == nil || info.IsStub() {
65 return nil
66 }
67
68 roomState := state.NewStateResolution(r.DB, info)
69 response.RoomExists = true
70 response.RoomVersion = info.RoomVersion
71
72 prevStates, err := r.DB.StateAtEventIDs(ctx, request.PrevEventIDs)
73 if err != nil {
74 switch err.(type) {
75 case types.MissingEventError:
76 util.GetLogger(ctx).Errorf("QueryStateAfterEvents: MissingEventError: %s", err)
77 return nil
78 default:
79 return err
80 }
81 }
82 response.PrevEventsExist = true
83
84 var stateEntries []types.StateEntry
85 if len(request.StateToFetch) == 0 {
86 // Look up all of the current room state.
87 stateEntries, err = roomState.LoadCombinedStateAfterEvents(
88 ctx, prevStates,
89 )
90 } else {
91 // Look up the current state for the requested tuples.
92 stateEntries, err = roomState.LoadStateAfterEventsForStringTuples(
93 ctx, prevStates, request.StateToFetch,
94 )
95 }
96 if err != nil {
97 return err
98 }
99
100 stateEvents, err := helpers.LoadStateEvents(ctx, r.DB, stateEntries)
101 if err != nil {
102 return err
103 }
104
105 if len(request.PrevEventIDs) > 1 && len(request.StateToFetch) == 0 {
106 var authEventIDs []string
107 for _, e := range stateEvents {
108 authEventIDs = append(authEventIDs, e.AuthEventIDs()...)
109 }
110 authEventIDs = util.UniqueStrings(authEventIDs)
111
112 authEvents, err := GetAuthChain(ctx, r.DB.EventsFromIDs, authEventIDs)

Callers

nothing calls this directly

Calls 6

GetAuthChainFunction · 0.85
IsStubMethod · 0.80
RoomInfoMethod · 0.65
StateAtEventIDsMethod · 0.65

Tested by

no test coverage detected