From 575eea470131c7f20a128f907e2d574cb5fe802f Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Wed, 1 Mar 2023 12:19:30 +0100 Subject: [PATCH] fix(sdk): Deal with missing data in Sliding Sync's responses. The Sliding Sync server might not send some parts of the response, because they were sent before and the server wants to save bandwidth. So let's update values only when they exist. --- crates/matrix-sdk/src/sliding_sync/room.rs | 33 +++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/crates/matrix-sdk/src/sliding_sync/room.rs b/crates/matrix-sdk/src/sliding_sync/room.rs index 908d12079..7da145844 100644 --- a/crates/matrix-sdk/src/sliding_sync/room.rs +++ b/crates/matrix-sdk/src/sliding_sync/room.rs @@ -153,14 +153,33 @@ impl SlidingSyncRoom { } = room_data; self.inner.unread_notifications = unread_notifications; - self.inner.name = name; - self.inner.initial = initial; - self.inner.is_dm = is_dm; - self.inner.invite_state = invite_state; - self.inner.required_state = required_state; - if let Some(batch) = prev_batch { - Observable::set(&mut self.prev_batch.write().unwrap(), Some(batch)); + // The server might not send some parts of the response, because they were sent + // before and the server wants to save bandwidth. So let's update the values + // only when they exist. + + if name.is_some() { + self.inner.name = name; + } + + if initial.is_some() { + self.inner.initial = initial; + } + + if is_dm.is_some() { + self.inner.is_dm = is_dm; + } + + if !invite_state.is_empty() { + self.inner.invite_state = invite_state; + } + + if !required_state.is_empty() { + self.inner.required_state = required_state; + } + + if prev_batch.is_some() { + Observable::set(&mut self.prev_batch.write().unwrap(), prev_batch); } // There is timeline updates.