diff --git a/bindings/matrix-sdk-ffi/src/sliding_sync.rs b/bindings/matrix-sdk-ffi/src/sliding_sync.rs index 6c2fbc71e..77c53c075 100644 --- a/bindings/matrix-sdk-ffi/src/sliding_sync.rs +++ b/bindings/matrix-sdk-ffi/src/sliding_sync.rs @@ -560,7 +560,7 @@ impl SlidingSyncList { &self, observer: Box, ) -> Arc { - let mut state_stream = self.inner.state_stream(); + let (_, mut state_stream) = self.inner.state_stream(); Arc::new(TaskHandle::new(RUNTIME.spawn(async move { loop { diff --git a/crates/matrix-sdk/src/sliding_sync/README.md b/crates/matrix-sdk/src/sliding_sync/README.md index bd0ea7515..55f5890c6 100644 --- a/crates/matrix-sdk/src/sliding_sync/README.md +++ b/crates/matrix-sdk/src/sliding_sync/README.md @@ -448,7 +448,7 @@ let sliding_sync = sliding_sync_builder // subscribe to the list APIs for updates -let (list_state_stream, list_count_stream, (_, list_stream)) = sliding_sync.on_list(&active_list_name, |list| { +let ((_, list_state_stream), list_count_stream, (_, list_stream)) = sliding_sync.on_list(&active_list_name, |list| { ready((list.state_stream(), list.maximum_number_of_rooms_stream(), list.room_list_stream())) }).await.unwrap(); diff --git a/crates/matrix-sdk/src/sliding_sync/list/mod.rs b/crates/matrix-sdk/src/sliding_sync/list/mod.rs index 1eb7b6f9c..4d4bbf4c8 100644 --- a/crates/matrix-sdk/src/sliding_sync/list/mod.rs +++ b/crates/matrix-sdk/src/sliding_sync/list/mod.rs @@ -110,8 +110,14 @@ impl SlidingSyncList { /// /// There's no guarantee of ordering between items emitted by this stream /// and those emitted by other streams exposed on this structure. - pub fn state_stream(&self) -> impl Stream { - Observable::subscribe(&self.inner.state.read().unwrap()) + pub fn state_stream( + &self, + ) -> (SlidingSyncListLoadingState, impl Stream) { + let read_lock = self.inner.state.read().unwrap(); + let previous_value = (*read_lock).clone(); + let subscriber = Observable::subscribe(&read_lock); + + (previous_value, subscriber) } /// Get the timeline limit.