fix: improve code when skipping /state_ids

next
Timo Kösters 2021-07-20 22:06:42 +02:00
parent 08a3326431
commit 80533bfab2
No known key found for this signature in database
GPG Key ID: 24DA7517711A2BA4
1 changed files with 30 additions and 35 deletions

View File

@ -1027,42 +1027,37 @@ pub fn handle_incoming_pdu<'a>(
.map_err(|_| "Failed talking to db".to_owned())? .map_err(|_| "Failed talking to db".to_owned())?
.map(|shortstatehash| db.rooms.state_full_ids(shortstatehash).ok()) .map(|shortstatehash| db.rooms.state_full_ids(shortstatehash).ok())
.flatten(); .flatten();
if let Some(mut state) = state { if let Some(state) = state {
if db let mut state = fetch_and_handle_events(
.rooms db,
.get_pdu(prev_event) origin,
.ok() &state.into_iter().collect::<Vec<_>>(),
.flatten() &room_id,
.ok_or_else(|| "Could not find prev event, but we know the state.".to_owned())? pub_key_map,
.state_key )
.is_some() .await
{ .map_err(|_| "Failed to fetch state events locally".to_owned())?
state.insert(prev_event.clone()); .into_iter()
} .map(|pdu| {
state_at_incoming_event = Some( (
fetch_and_handle_events(
db,
origin,
&state.into_iter().collect::<Vec<_>>(),
&room_id,
pub_key_map,
)
.await
.map_err(|_| "Failed to fetch state events locally".to_owned())?
.into_iter()
.map(|pdu| {
( (
( pdu.kind.clone(),
pdu.kind.clone(), pdu.state_key
pdu.state_key .clone()
.clone() .expect("events from state_full_ids are state events"),
.expect("events from state_full_ids are state events"), ),
), pdu,
pdu, )
) })
}) .collect::<HashMap<_, _>>();
.collect(),
); let prev_pdu = db.rooms.get_pdu(prev_event).ok().flatten().ok_or_else(|| {
"Could not find prev event, but we know the state.".to_owned()
})?;
if let Some(state_key) = &prev_pdu.state_key {
state.insert((prev_pdu.kind.clone(), state_key.clone()), prev_pdu);
}
} }
// TODO: set incoming_auth_events? // TODO: set incoming_auth_events?
} }