From db6798321c3bebbcadc448a879e76df934c12fc6 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Thu, 15 Jun 2023 13:47:34 +0200 Subject: [PATCH] feat(sdk): `SlidingSyncList::state_stream` returns a tuple. This patch updates `SlidingSyncList::state_stream` to return a tuple `(SlidingSyncListLoadingState, impl Stream)`. --- bindings/matrix-sdk-ffi/src/sliding_sync.rs | 2 +- crates/matrix-sdk/src/sliding_sync/README.md | 2 +- crates/matrix-sdk/src/sliding_sync/list/mod.rs | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) 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.