|
|
|
|
@ -1027,42 +1027,37 @@ pub fn handle_incoming_pdu<'a>(
@@ -1027,42 +1027,37 @@ pub fn handle_incoming_pdu<'a>(
|
|
|
|
|
.map_err(|_| "Failed talking to db".to_owned())? |
|
|
|
|
.map(|shortstatehash| db.rooms.state_full_ids(shortstatehash).ok()) |
|
|
|
|
.flatten(); |
|
|
|
|
if let Some(mut state) = state { |
|
|
|
|
if db |
|
|
|
|
.rooms |
|
|
|
|
.get_pdu(prev_event) |
|
|
|
|
.ok() |
|
|
|
|
.flatten() |
|
|
|
|
.ok_or_else(|| "Could not find prev event, but we know the state.".to_owned())? |
|
|
|
|
.state_key |
|
|
|
|
.is_some() |
|
|
|
|
{ |
|
|
|
|
state.insert(prev_event.clone()); |
|
|
|
|
} |
|
|
|
|
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| { |
|
|
|
|
if let Some(state) = state { |
|
|
|
|
let mut state = 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.state_key |
|
|
|
|
.clone() |
|
|
|
|
.expect("events from state_full_ids are state events"), |
|
|
|
|
), |
|
|
|
|
pdu, |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
.collect(), |
|
|
|
|
); |
|
|
|
|
pdu.kind.clone(), |
|
|
|
|
pdu.state_key |
|
|
|
|
.clone() |
|
|
|
|
.expect("events from state_full_ids are state events"), |
|
|
|
|
), |
|
|
|
|
pdu, |
|
|
|
|
) |
|
|
|
|
}) |
|
|
|
|
.collect::<HashMap<_, _>>(); |
|
|
|
|
|
|
|
|
|
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?
|
|
|
|
|
} |
|
|
|
|
|