feat(sdk): SlidingSyncList::state_stream returns a tuple.

This patch updates `SlidingSyncList::state_stream` to return
a tuple `(SlidingSyncListLoadingState, impl Stream<Item =
SlidingSyncListLoadingState>)`.
This commit is contained in:
Ivan Enderlin
2023-06-15 13:47:34 +02:00
parent f10f0d017d
commit db6798321c
3 changed files with 10 additions and 4 deletions

View File

@@ -560,7 +560,7 @@ impl SlidingSyncList {
&self,
observer: Box<dyn SlidingSyncListStateObserver>,
) -> Arc<TaskHandle> {
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 {

View File

@@ -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();

View File

@@ -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<Item = SlidingSyncListLoadingState> {
Observable::subscribe(&self.inner.state.read().unwrap())
pub fn state_stream(
&self,
) -> (SlidingSyncListLoadingState, impl Stream<Item = SlidingSyncListLoadingState>) {
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.