|
|
|
@ -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>, |
|
|
|
|