Send invites only if invited during the sync request

Fixes: https://git.koesters.xyz/timo/conduit/issues/175
next
Guillem Nieto 2020-08-02 09:24:47 +02:00
parent 935f0e6185
commit 47abe6686e
1 changed files with 25 additions and 0 deletions

View File

@ -391,6 +391,31 @@ pub async fn sync_events_route(
let mut invited_rooms = BTreeMap::new(); let mut invited_rooms = BTreeMap::new();
for room_id in db.rooms.rooms_invited(&sender_id) { for room_id in db.rooms.rooms_invited(&sender_id) {
let room_id = room_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 { let invited_room = sync_events::InvitedRoom {
invite_state: sync_events::InviteState { invite_state: sync_events::InviteState {