SendEventWithState writes an event with the specified kind to the roomserver with the state at the event as KindOutlier before it. Will not send any event that is marked as `true` in haveEventIDs.
( ctx context.Context, rsAPI InputRoomEventsAPI, kind Kind, state *gomatrixserverlib.RespState, event *gomatrixserverlib.HeaderedEvent, origin gomatrixserverlib.ServerName, haveEventIDs map[string]bool, async bool, )
| 46 | // with the state at the event as KindOutlier before it. Will not send any event that is |
| 47 | // marked as `true` in haveEventIDs. |
| 48 | func SendEventWithState( |
| 49 | ctx context.Context, rsAPI InputRoomEventsAPI, kind Kind, |
| 50 | state *gomatrixserverlib.RespState, event *gomatrixserverlib.HeaderedEvent, |
| 51 | origin gomatrixserverlib.ServerName, haveEventIDs map[string]bool, async bool, |
| 52 | ) error { |
| 53 | outliers := state.Events(event.RoomVersion) |
| 54 | ires := make([]InputRoomEvent, 0, len(outliers)) |
| 55 | for _, outlier := range outliers { |
| 56 | if haveEventIDs[outlier.EventID()] { |
| 57 | continue |
| 58 | } |
| 59 | ires = append(ires, InputRoomEvent{ |
| 60 | Kind: KindOutlier, |
| 61 | Event: outlier.Headered(event.RoomVersion), |
| 62 | Origin: origin, |
| 63 | }) |
| 64 | } |
| 65 | |
| 66 | stateEvents := state.StateEvents.UntrustedEvents(event.RoomVersion) |
| 67 | stateEventIDs := make([]string, len(stateEvents)) |
| 68 | for i := range stateEvents { |
| 69 | stateEventIDs[i] = stateEvents[i].EventID() |
| 70 | } |
| 71 | |
| 72 | ires = append(ires, InputRoomEvent{ |
| 73 | Kind: kind, |
| 74 | Event: event, |
| 75 | Origin: origin, |
| 76 | HasState: true, |
| 77 | StateEventIDs: stateEventIDs, |
| 78 | }) |
| 79 | |
| 80 | return SendInputRoomEvents(ctx, rsAPI, ires, async) |
| 81 | } |
| 82 | |
| 83 | // SendInputRoomEvents to the roomserver. |
| 84 | func SendInputRoomEvents( |
nothing calls this directly
no test coverage detected