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

Method QueryMissingEvents

roomserver/internal/query/query.go:364–420  ·  view source on GitHub ↗

QueryMissingEvents implements api.RoomserverInternalAPI

(
	ctx context.Context,
	request *api.QueryMissingEventsRequest,
	response *api.QueryMissingEventsResponse,
)

Source from the content-addressed store, hash-verified

362
363// QueryMissingEvents implements api.RoomserverInternalAPI
364func (r *Queryer) QueryMissingEvents(
365 ctx context.Context,
366 request *api.QueryMissingEventsRequest,
367 response *api.QueryMissingEventsResponse,
368) error {
369 var front []string
370 eventsToFilter := make(map[string]bool, len(request.LatestEvents))
371 visited := make(map[string]bool, request.Limit) // request.Limit acts as a hint to size.
372 for _, id := range request.EarliestEvents {
373 visited[id] = true
374 }
375
376 for _, id := range request.LatestEvents {
377 if !visited[id] {
378 front = append(front, id)
379 eventsToFilter[id] = true
380 }
381 }
382 events, err := r.DB.EventsFromIDs(ctx, front)
383 if err != nil {
384 return err
385 }
386 if len(events) == 0 {
387 return nil // we are missing the events being asked to search from, give up.
388 }
389 info, err := r.DB.RoomInfo(ctx, events[0].RoomID())
390 if err != nil {
391 return err
392 }
393 if info == nil || info.IsStub() {
394 return fmt.Errorf("missing RoomInfo for room %s", events[0].RoomID())
395 }
396
397 resultNIDs, err := helpers.ScanEventTree(ctx, r.DB, info, front, visited, request.Limit, request.ServerName)
398 if err != nil {
399 return err
400 }
401
402 loadedEvents, err := helpers.LoadEvents(ctx, r.DB, resultNIDs)
403 if err != nil {
404 return err
405 }
406
407 response.Events = make([]*gomatrixserverlib.HeaderedEvent, 0, len(loadedEvents)-len(eventsToFilter))
408 for _, event := range loadedEvents {
409 if !eventsToFilter[event.EventID()] {
410 roomVersion, verr := r.roomVersion(event.RoomID())
411 if verr != nil {
412 return verr
413 }
414
415 response.Events = append(response.Events, event.Headered(roomVersion))
416 }
417 }
418
419 return err
420}
421

Callers

nothing calls this directly

Calls 4

roomVersionMethod · 0.95
IsStubMethod · 0.80
EventsFromIDsMethod · 0.65
RoomInfoMethod · 0.65

Tested by

no test coverage detected