Various improvements
This commit is contained in:
parent
f587b88a60
commit
ad4fb6420a
14
Cargo.toml
14
Cargo.toml
@ -22,15 +22,16 @@ maplit = "1.0.2"
|
||||
thiserror = "1.0.20"
|
||||
tracing-subscriber = "0.2.11"
|
||||
|
||||
[dependencies.ruma]
|
||||
path = "../ruma/ruma"
|
||||
features = ["client-api", "federation-api", "appservice-api"]
|
||||
|
||||
#[dependencies.ruma]
|
||||
#git = "https://github.com/ruma/ruma"
|
||||
#rev = "aff914050eb297bd82b8aafb12158c88a9e480e1"
|
||||
#path = "../ruma/ruma"
|
||||
#features = ["client-api", "federation-api", "appservice-api"]
|
||||
|
||||
[dependencies.ruma]
|
||||
git = "https://github.com/timokoesters/ruma"
|
||||
branch = "timo-fed-fixes"
|
||||
#rev = "aff914050eb297bd82b8aafb12158c88a9e480e1"
|
||||
features = ["client-api", "federation-api", "appservice-api"]
|
||||
|
||||
[features]
|
||||
unstable-pre-spec = ["ruma/unstable-pre-spec"]
|
||||
|
||||
@ -41,4 +42,3 @@ rand = "0.7.3"
|
||||
[[bench]]
|
||||
name = "state_res_bench"
|
||||
harness = false
|
||||
|
||||
|
@ -377,7 +377,7 @@ pub fn valid_membership_change(
|
||||
.join_rule;
|
||||
}
|
||||
|
||||
if let Some(prev) = dbg!(prev_event) {
|
||||
if let Some(prev) = prev_event {
|
||||
if prev.kind() == EventType::RoomCreate && prev.prev_event_ids().is_empty() {
|
||||
return Ok(true);
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ impl StateResolution {
|
||||
.unwrap();
|
||||
|
||||
// update event_map to include the fetched events
|
||||
event_map.extend(events.into_iter().map(|ev| (ev.event_id(), ev)));
|
||||
event_map.extend(events.into_iter().map(|ev| (ev.event_id().clone(), ev)));
|
||||
// at this point our event_map == store there should be no missing events
|
||||
|
||||
tracing::debug!("event map size: {}", event_map.len());
|
||||
@ -337,7 +337,7 @@ impl StateResolution {
|
||||
// This return value is the key used for sorting events,
|
||||
// events are then sorted by power level, time,
|
||||
// and lexically by event_id.
|
||||
(-*pl, *ev.origin_server_ts(), ev.event_id())
|
||||
(-*pl, *ev.origin_server_ts(), ev.event_id().clone())
|
||||
})
|
||||
}
|
||||
|
||||
@ -526,8 +526,8 @@ impl StateResolution {
|
||||
|
||||
tracing::debug!("event to check {:?}", event.event_id().as_str());
|
||||
|
||||
let most_recent_prev_event = dbg!(event
|
||||
.prev_event_ids())
|
||||
let most_recent_prev_event = event
|
||||
.prev_event_ids()
|
||||
.iter()
|
||||
.filter_map(|id| StateResolution::get_or_load_event(room_id, id, event_map, store))
|
||||
.next_back();
|
||||
|
@ -1,17 +1,15 @@
|
||||
use std::{collections::BTreeMap, convert::TryFrom};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use js_int::UInt;
|
||||
use ruma::{
|
||||
events::{
|
||||
from_raw_json_value,
|
||||
pdu::{EventHash, Pdu, PduStub},
|
||||
room::member::{MemberEventContent, MembershipState},
|
||||
EventDeHelper, EventType,
|
||||
EventType,
|
||||
},
|
||||
EventId, RoomId, RoomVersionId, ServerName, UserId,
|
||||
};
|
||||
use serde::{de, Serialize};
|
||||
use serde_json::value::RawValue as RawJsonValue;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use std::time::SystemTime;
|
||||
|
||||
pub struct Requester<'a> {
|
||||
@ -22,10 +20,11 @@ pub struct Requester<'a> {
|
||||
pub sender: &'a UserId,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum StateEvent {
|
||||
Full(Pdu),
|
||||
#[serde(skip_deserializing)]
|
||||
Sync(PduStub),
|
||||
}
|
||||
|
||||
@ -119,27 +118,13 @@ impl StateEvent {
|
||||
},
|
||||
}
|
||||
}
|
||||
pub fn event_id(&self) -> EventId {
|
||||
pub fn event_id(&self) -> &EventId {
|
||||
match self {
|
||||
Self::Full(ev) => match ev {
|
||||
Pdu::RoomV1Pdu(ev) => ev.event_id.clone(),
|
||||
Pdu::RoomV3Pdu(_) => EventId::try_from(&*format!(
|
||||
"${}",
|
||||
ruma::signatures::reference_hash(
|
||||
&serde_json::to_value(&ev).expect("event is valid, we just created it")
|
||||
)
|
||||
.expect("ruma can calculate reference hashes")
|
||||
))
|
||||
.expect("ruma's reference hashes are valid event ids"),
|
||||
Pdu::RoomV1Pdu(ev) => &ev.event_id,
|
||||
Pdu::RoomV3Pdu(ev) => ev.event_id.as_ref().expect("RoomV3Pdu did not have an event id"),
|
||||
},
|
||||
Self::Sync(ev) => EventId::try_from(&*format!(
|
||||
"${}",
|
||||
ruma::signatures::reference_hash(
|
||||
&serde_json::to_value(&ev).expect("event is valid, we just created it")
|
||||
)
|
||||
.expect("ruma can calculate reference hashes")
|
||||
))
|
||||
.expect("ruma's reference hashes are valid event ids"),
|
||||
Self::Sync(_ev) => panic!("Stubs don't have an event id"),
|
||||
}
|
||||
}
|
||||
|
||||
@ -352,33 +337,3 @@ impl StateEvent {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> de::Deserialize<'de> for StateEvent {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: de::Deserializer<'de>,
|
||||
{
|
||||
let json = Box::<RawJsonValue>::deserialize(deserializer)?;
|
||||
let EventDeHelper {
|
||||
room_id, unsigned, ..
|
||||
} = from_raw_json_value(&json)?;
|
||||
|
||||
// Determine whether the event is a full or sync
|
||||
// based on the fields present.
|
||||
if room_id.is_some() {
|
||||
Ok(match unsigned {
|
||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||
panic!("TODO deal with redacted events")
|
||||
}
|
||||
_ => StateEvent::Full(Pdu::RoomV1Pdu(from_raw_json_value(&json)?)),
|
||||
})
|
||||
} else {
|
||||
Ok(match unsigned {
|
||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||
panic!("TODO deal with redacted events")
|
||||
}
|
||||
_ => StateEvent::Sync(from_raw_json_value(&json)?),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user