From 97c5acff7c30f60a974f8dce37a58db19cafec73 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 18 Sep 2023 18:25:33 +0200 Subject: [PATCH] Use new functionality from eyeball-im-util 0.5 --- crates/matrix-sdk-ui/src/room_list_service/room_list.rs | 9 +++++---- crates/matrix-sdk-ui/src/timeline/inner/mod.rs | 5 ++--- crates/matrix-sdk/src/sliding_sync/list/mod.rs | 8 ++------ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/crates/matrix-sdk-ui/src/room_list_service/room_list.rs b/crates/matrix-sdk-ui/src/room_list_service/room_list.rs index 4106ec50b..710bf4bac 100644 --- a/crates/matrix-sdk-ui/src/room_list_service/room_list.rs +++ b/crates/matrix-sdk-ui/src/room_list_service/room_list.rs @@ -22,7 +22,7 @@ use async_rx::StreamExt as _; use async_stream::stream; use eyeball::{SharedObservable, Subscriber}; use eyeball_im::{Vector, VectorDiff}; -use eyeball_im_util::vector::Limit; +use eyeball_im_util::vector::VectorObserverExt; use futures_util::{pin_mut, stream, Stream, StreamExt as _}; use matrix_sdk::{ executor::{spawn, JoinHandle}, @@ -145,11 +145,12 @@ impl RoomList { let stream = stream! { loop { let filter_fn = filter_fn_cell.take().await; - let (items, stream) = list.room_list_filtered_stream(filter_fn); - let (items, stream) = Limit::dynamic_with_initial_limit(items, stream, page_size, limit_stream.clone()); + let (values, stream) = list + .room_list_filtered_stream(filter_fn) + .dynamic_limit_with_initial_value(page_size, limit_stream.clone()); // Clearing the stream before chaining with the real stream. - yield stream::once(ready(vec![VectorDiff::Reset { values: items }])) + yield stream::once(ready(vec![VectorDiff::Reset { values }])) .chain(stream); } } diff --git a/crates/matrix-sdk-ui/src/timeline/inner/mod.rs b/crates/matrix-sdk-ui/src/timeline/inner/mod.rs index d9becb336..976ec6df7 100644 --- a/crates/matrix-sdk-ui/src/timeline/inner/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/inner/mod.rs @@ -18,7 +18,7 @@ use std::{fmt, sync::Arc}; use as_variant::as_variant; use eyeball_im::{ObservableVectorEntry, VectorDiff}; -use eyeball_im_util::vector; +use eyeball_im_util::vector::VectorObserverExt; use futures_core::Stream; use imbl::Vector; use itertools::Itertools; @@ -170,8 +170,7 @@ impl TimelineInner

{ F: Fn(Arc) -> Option, { trace!("Creating timeline items signal"); - let state = self.state.read().await; - vector::FilterMap::new(state.items.clone(), state.items.subscribe().into_stream(), f) + self.state.read().await.items.subscribe().filter_map(f) } pub(super) async fn toggle_reaction_local( diff --git a/crates/matrix-sdk/src/sliding_sync/list/mod.rs b/crates/matrix-sdk/src/sliding_sync/list/mod.rs index cafbf06fd..8fc35ecf8 100644 --- a/crates/matrix-sdk/src/sliding_sync/list/mod.rs +++ b/crates/matrix-sdk/src/sliding_sync/list/mod.rs @@ -14,7 +14,7 @@ use std::{ use eyeball::{Observable, Subscriber}; use eyeball_im::{ObservableVector, ObservableVectorTransaction, VectorDiff}; -use eyeball_im_util::vector; +use eyeball_im_util::vector::{VectorObserverExt, VectorSubscriberExt}; use futures_core::Stream; use imbl::Vector; use ruma::{api::client::sync::sync_events::v4, assign, OwnedRoomId, TransactionId}; @@ -169,11 +169,7 @@ impl SlidingSyncList { where F: Fn(&RoomListEntry) -> bool, { - let read_lock = self.inner.room_list.read().unwrap(); - let values = (*read_lock).clone(); - let subscriber = ObservableVector::subscribe(&read_lock); - - vector::Filter::new(values, subscriber.into_batched_stream(), filter) + self.inner.room_list.read().unwrap().subscribe().batched().filter(filter) } /// Get the maximum number of rooms. See [`Self::maximum_number_of_rooms`]