diff --git a/crates/matrix-sdk-base/src/client.rs b/crates/matrix-sdk-base/src/client.rs index dea15883c..8bb67d960 100644 --- a/crates/matrix-sdk-base/src/client.rs +++ b/crates/matrix-sdk-base/src/client.rs @@ -453,7 +453,7 @@ impl BaseClient { pub(crate) async fn handle_state( &self, raw_events: &[Raw], - events: &[AnySyncStateEvent], + events: &[Option], room_info: &mut RoomInfo, changes: &mut StateChanges, ambiguity_cache: &mut AmbiguityCache, @@ -462,7 +462,12 @@ impl BaseClient { let mut user_ids = BTreeSet::new(); let mut profiles = BTreeMap::new(); + assert_eq!(raw_events.len(), events.len()); for (raw_event, event) in iter::zip(raw_events, events) { + let Some(event) = event else { + continue; + }; + room_info.handle_state_event(event); if let AnySyncStateEvent::RoomMember(member) = &event { @@ -1268,10 +1273,10 @@ impl BaseClient { pub(crate) fn deserialize_events( raw_events: &[Raw], - ) -> Vec { + ) -> Vec> { raw_events .iter() - .filter_map(|raw_event| match raw_event.deserialize() { + .map(|raw_event| match raw_event.deserialize() { Ok(ev) => Some(ev), Err(e) => { warn!("Couldn't deserialize state event: {e}"); diff --git a/crates/matrix-sdk-base/src/sliding_sync.rs b/crates/matrix-sdk-base/src/sliding_sync.rs index 935ca45be..6015f0a31 100644 --- a/crates/matrix-sdk-base/src/sliding_sync.rs +++ b/crates/matrix-sdk-base/src/sliding_sync.rs @@ -299,7 +299,7 @@ impl BaseClient { fn process_sliding_sync_room_membership( &self, room_data: &v4::SlidingSyncRoom, - required_state: &[AnySyncStateEvent], + required_state: &[Option], store: &Store, room_id: &RoomId, changes: &mut StateChanges, @@ -353,11 +353,11 @@ impl BaseClient { /// the state in room_info to reflect the "membership" property. pub(crate) fn handle_own_room_membership( &self, - required_state: &[AnySyncStateEvent], + required_state: &[Option], room_info: &mut RoomInfo, ) { for event in required_state { - if let AnySyncStateEvent::RoomMember(member) = &event { + if let Some(AnySyncStateEvent::RoomMember(member)) = &event { // If this event updates the current user's membership, record that in the // room_info. if let Some(meta) = self.session_meta() {