@@ -120,6 +120,7 @@ def __init__(self, hs: "HomeServer"):
120
120
self ._event_auth_handler = hs .get_event_auth_handler ()
121
121
self .config = hs .config
122
122
self .request_ratelimiter = hs .get_request_ratelimiter ()
123
+ self .builder = hs .get_event_builder_factory ()
123
124
124
125
# Room state based off defined presets
125
126
self ._presets_dict : Dict [str , Dict [str , Any ]] = {
@@ -1043,10 +1044,14 @@ async def _send_events_for_new_room(
1043
1044
creator_id = creator .user .to_string ()
1044
1045
event_keys = {"room_id" : room_id , "sender" : creator_id , "state_key" : "" }
1045
1046
depth = 1
1047
+ # the last event sent/persisted to the db
1046
1048
last_sent_event_id : Optional [str ] = None
1049
+ # the most recently created event
1047
1050
prev_event : List [str ] = []
1048
- state_map = {}
1049
- auth_events = []
1051
+ # a map of event types, state keys -> event_ids. We collect these mappings this as events are
1052
+ # created (but not persisted to the db) to determine state for future created events
1053
+ # (as this info can't be pulled from the db)
1054
+ state_map : dict = {}
1050
1055
1051
1056
def create_event_dict (etype : str , content : JsonDict , ** kwargs : Any ) -> JsonDict :
1052
1057
e = {"type" : etype , "content" : content }
@@ -1059,21 +1064,19 @@ def create_event_dict(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
1059
1064
async def create_event (
1060
1065
etype : str ,
1061
1066
content : JsonDict ,
1062
- auth_event_ids : Optional [List [str ]] = None ,
1063
1067
** kwargs : Any ,
1064
1068
) -> EventBase :
1065
1069
nonlocal depth
1066
1070
nonlocal prev_event
1067
1071
1068
1072
event_dict = create_event_dict (etype , content , ** kwargs )
1069
1073
1070
- event = await self .event_creation_handler .create_event (
1074
+ event = await self .event_creation_handler .create_event_for_batch (
1071
1075
creator ,
1072
1076
event_dict ,
1073
- prev_event_ids = prev_event ,
1074
- auth_event_ids = auth_event_ids ,
1075
- depth = depth ,
1076
- for_batch = True ,
1077
+ prev_event ,
1078
+ depth ,
1079
+ state_map ,
1077
1080
)
1078
1081
depth += 1
1079
1082
prev_event = [event .event_id ]
@@ -1118,7 +1121,6 @@ async def send(
1118
1121
1119
1122
logger .debug ("Sending %s in new room" , EventTypes .Member )
1120
1123
await send (creation_event , creation_context , creator )
1121
- auth_events .append (creation_event .event_id )
1122
1124
1123
1125
# Room create event must exist at this point
1124
1126
assert last_sent_event_id is not None
@@ -1135,8 +1137,11 @@ async def send(
1135
1137
)
1136
1138
last_sent_event_id = member_event_id
1137
1139
prev_event = [member_event_id ]
1140
+
1141
+ # update the depth and state map here as these are otherwise updated in 'create_event'
1142
+ # the membership event has been created through a different code path
1138
1143
depth += 1
1139
- auth_events . append ( member_event_id )
1144
+ state_map [( EventTypes . Member , creator . user . to_string ())] = member_event_id
1140
1145
1141
1146
# We treat the power levels override specially as this needs to be one
1142
1147
# of the first events that get sent into a room.
@@ -1146,7 +1151,6 @@ async def send(
1146
1151
power_context = await self .state .compute_event_context (power_event )
1147
1152
current_state_group = power_context ._state_group
1148
1153
last_sent_stream_id = await send (power_event , power_context , creator )
1149
- auth_events .append (power_event .event_id )
1150
1154
else :
1151
1155
power_level_content : JsonDict = {
1152
1156
"users" : {creator_id : 100 },
@@ -1196,7 +1200,6 @@ async def send(
1196
1200
pl_context = await self .state .compute_event_context (pl_event )
1197
1201
current_state_group = pl_context ._state_group
1198
1202
last_sent_stream_id = await send (pl_event , pl_context , creator )
1199
- auth_events .append (pl_event .event_id )
1200
1203
1201
1204
events_to_send = []
1202
1205
if room_alias and (EventTypes .CanonicalAlias , "" ) not in initial_state :
@@ -1215,7 +1218,6 @@ async def send(
1215
1218
join_rules_event = await create_event (
1216
1219
EventTypes .JoinRules ,
1217
1220
{"join_rule" : config ["join_rules" ]},
1218
- auth_events ,
1219
1221
)
1220
1222
assert current_state_group is not None
1221
1223
join_rules_context = await self .state .compute_event_context_for_batched (
@@ -1228,7 +1230,6 @@ async def send(
1228
1230
visibility_event = await create_event (
1229
1231
EventTypes .RoomHistoryVisibility ,
1230
1232
{"history_visibility" : config ["history_visibility" ]},
1231
- auth_events ,
1232
1233
)
1233
1234
assert current_state_group is not None
1234
1235
visibility_context = await self .state .compute_event_context_for_batched (
@@ -1242,7 +1243,6 @@ async def send(
1242
1243
guest_access_event = await create_event (
1243
1244
EventTypes .GuestAccess ,
1244
1245
{EventContentFields .GUEST_ACCESS : GuestAccess .CAN_JOIN },
1245
- auth_events ,
1246
1246
)
1247
1247
assert current_state_group is not None
1248
1248
guest_access_context = (
@@ -1254,7 +1254,7 @@ async def send(
1254
1254
events_to_send .append ((guest_access_event , guest_access_context ))
1255
1255
1256
1256
for (etype , state_key ), content in initial_state .items ():
1257
- event = await create_event (etype , content , auth_events , state_key = state_key )
1257
+ event = await create_event (etype , content , state_key = state_key )
1258
1258
assert current_state_group is not None
1259
1259
context = await self .state .compute_event_context_for_batched (
1260
1260
event , state_map , current_state_group
@@ -1266,7 +1266,6 @@ async def send(
1266
1266
encryption_event = await create_event (
1267
1267
EventTypes .RoomEncryption ,
1268
1268
{"algorithm" : RoomEncryptionAlgorithms .DEFAULT },
1269
- auth_events ,
1270
1269
state_key = "" ,
1271
1270
)
1272
1271
assert current_state_group is not None
0 commit comments