From 47abe6686ebfb83331dfdabd871d8920b35afaaa Mon Sep 17 00:00:00 2001 From: Guillem Nieto Date: Sun, 2 Aug 2020 09:24:47 +0200 Subject: [PATCH] Send invites only if invited during the sync request Fixes: https://git.koesters.xyz/timo/conduit/issues/175 --- src/client_server/sync.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/client_server/sync.rs b/src/client_server/sync.rs index 71e3422..0f683c8 100644 --- a/src/client_server/sync.rs +++ b/src/client_server/sync.rs @@ -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, + >(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 {