|
|
|
|
@ -391,6 +391,31 @@ pub async fn sync_events_route(
@@ -391,6 +391,31 @@ pub async fn sync_events_route(
|
|
|
|
|
let mut invited_rooms = BTreeMap::new(); |
|
|
|
|
for room_id in db.rooms.rooms_invited(&sender_id) { |
|
|
|
|
let room_id = room_id?; |
|
|
|
|
let mut invited_since_last_sync = false; |
|
|
|
|
for pdu in db |
|
|
|
|
.rooms |
|
|
|
|
.pdus_since(&sender_id, &room_id, since)? |
|
|
|
|
.filter_map(|r| r.ok()) |
|
|
|
|
{ |
|
|
|
|
if pdu.kind == EventType::RoomMember { |
|
|
|
|
if pdu.state_key == Some(sender_id.to_string()) { |
|
|
|
|
let content = serde_json::from_value::< |
|
|
|
|
Raw<ruma::events::room::member::MemberEventContent>, |
|
|
|
|
>(pdu.content.clone()) |
|
|
|
|
.expect("Raw::from_value always works") |
|
|
|
|
.deserialize() |
|
|
|
|
.map_err(|_| Error::bad_database("Invalid PDU in database."))?; |
|
|
|
|
if content.membership == ruma::events::room::member::MembershipState::Invite { |
|
|
|
|
invited_since_last_sync = true; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if !invited_since_last_sync { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let invited_room = sync_events::InvitedRoom { |
|
|
|
|
invite_state: sync_events::InviteState { |
|
|
|
|
|