|
|
@ -93,7 +93,7 @@ pub async fn sync_events_route(
|
|
|
|
let mut limited = false;
|
|
|
|
let mut limited = false;
|
|
|
|
|
|
|
|
|
|
|
|
let mut state_pdus = Vec::new();
|
|
|
|
let mut state_pdus = Vec::new();
|
|
|
|
for pdu in non_timeline_pdus {
|
|
|
|
for (_, pdu) in non_timeline_pdus {
|
|
|
|
if pdu.state_key.is_some() {
|
|
|
|
if pdu.state_key.is_some() {
|
|
|
|
state_pdus.push(pdu);
|
|
|
|
state_pdus.push(pdu);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -113,7 +113,7 @@ pub async fn sync_events_route(
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.pdus_since(&sender_id, &room_id, since)?
|
|
|
|
.pdus_since(&sender_id, &room_id, since)?
|
|
|
|
.filter_map(|r| r.ok())
|
|
|
|
.filter_map(|r| r.ok())
|
|
|
|
.filter_map(|pdu| Some((pdu.state_key.clone()?, pdu)))
|
|
|
|
.filter_map(|(_, pdu)| Some((pdu.state_key.clone()?, pdu)))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if pdu.kind == EventType::RoomMember {
|
|
|
|
if pdu.kind == EventType::RoomMember {
|
|
|
|
send_member_count = true;
|
|
|
|
send_member_count = true;
|
|
|
@ -188,8 +188,8 @@ pub async fn sync_events_route(
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.all_pdus(&sender_id, &room_id)?
|
|
|
|
.all_pdus(&sender_id, &room_id)?
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Ignore all broken pdus
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Ignore all broken pdus
|
|
|
|
.filter(|pdu| pdu.kind == EventType::RoomMember)
|
|
|
|
.filter(|(_, pdu)| pdu.kind == EventType::RoomMember)
|
|
|
|
.map(|pdu| {
|
|
|
|
.map(|(_, pdu)| {
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
|
>(pdu.content.clone())
|
|
|
|
>(pdu.content.clone())
|
|
|
@ -244,7 +244,7 @@ pub async fn sync_events_route(
|
|
|
|
(db.rooms
|
|
|
|
(db.rooms
|
|
|
|
.pdus_since(&sender_id, &room_id, last_read)?
|
|
|
|
.pdus_since(&sender_id, &room_id, last_read)?
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Filter out buggy events
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Filter out buggy events
|
|
|
|
.filter(|pdu| {
|
|
|
|
.filter(|(_, pdu)| {
|
|
|
|
matches!(
|
|
|
|
matches!(
|
|
|
|
pdu.kind.clone(),
|
|
|
|
pdu.kind.clone(),
|
|
|
|
EventType::RoomMessage | EventType::RoomEncrypted
|
|
|
|
EventType::RoomMessage | EventType::RoomEncrypted
|
|
|
@ -260,18 +260,15 @@ pub async fn sync_events_route(
|
|
|
|
None
|
|
|
|
None
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let prev_batch = timeline_pdus.first().map_or(Ok::<_, Error>(None), |e| {
|
|
|
|
let prev_batch = timeline_pdus
|
|
|
|
Ok(Some(
|
|
|
|
.first()
|
|
|
|
db.rooms
|
|
|
|
.map_or(Ok::<_, Error>(None), |(pdu_id, _)| {
|
|
|
|
.get_pdu_count(&e.event_id)?
|
|
|
|
Ok(Some(db.rooms.pdu_count(pdu_id)?.to_string()))
|
|
|
|
.ok_or_else(|| Error::bad_database("Can't find count from event in db."))?
|
|
|
|
})?;
|
|
|
|
.to_string(),
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
})?;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let room_events = timeline_pdus
|
|
|
|
let room_events = timeline_pdus
|
|
|
|
.into_iter()
|
|
|
|
.into_iter()
|
|
|
|
.map(|pdu| pdu.to_sync_room_event())
|
|
|
|
.map(|(_, pdu)| pdu.to_sync_room_event())
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
|
|
let mut edus = db
|
|
|
|
let mut edus = db
|
|
|
@ -380,7 +377,7 @@ pub async fn sync_events_route(
|
|
|
|
let pdus = db.rooms.pdus_since(&sender_id, &room_id, since)?;
|
|
|
|
let pdus = db.rooms.pdus_since(&sender_id, &room_id, since)?;
|
|
|
|
let room_events = pdus
|
|
|
|
let room_events = pdus
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Filter out buggy events
|
|
|
|
.filter_map(|pdu| pdu.ok()) // Filter out buggy events
|
|
|
|
.map(|pdu| pdu.to_sync_room_event())
|
|
|
|
.map(|(_, pdu)| pdu.to_sync_room_event())
|
|
|
|
.collect();
|
|
|
|
.collect();
|
|
|
|
|
|
|
|
|
|
|
|
let left_room = sync_events::LeftRoom {
|
|
|
|
let left_room = sync_events::LeftRoom {
|
|
|
@ -395,7 +392,7 @@ pub async fn sync_events_route(
|
|
|
|
|
|
|
|
|
|
|
|
let mut left_since_last_sync = false;
|
|
|
|
let mut left_since_last_sync = false;
|
|
|
|
for pdu in db.rooms.pdus_since(&sender_id, &room_id, since)? {
|
|
|
|
for pdu in db.rooms.pdus_since(&sender_id, &room_id, since)? {
|
|
|
|
let pdu = pdu?;
|
|
|
|
let (_, pdu) = pdu?;
|
|
|
|
if pdu.kind == EventType::RoomMember && pdu.state_key == Some(sender_id.to_string()) {
|
|
|
|
if pdu.kind == EventType::RoomMember && pdu.state_key == Some(sender_id.to_string()) {
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
@ -438,7 +435,7 @@ pub async fn sync_events_route(
|
|
|
|
let room_id = room_id?;
|
|
|
|
let room_id = room_id?;
|
|
|
|
let mut invited_since_last_sync = false;
|
|
|
|
let mut invited_since_last_sync = false;
|
|
|
|
for pdu in db.rooms.pdus_since(&sender_id, &room_id, since)? {
|
|
|
|
for pdu in db.rooms.pdus_since(&sender_id, &room_id, since)? {
|
|
|
|
let pdu = pdu?;
|
|
|
|
let (_, pdu) = pdu?;
|
|
|
|
if pdu.kind == EventType::RoomMember && pdu.state_key == Some(sender_id.to_string()) {
|
|
|
|
if pdu.kind == EventType::RoomMember && pdu.state_key == Some(sender_id.to_string()) {
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
let content = serde_json::from_value::<
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>,
|
|
|
|