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 f8e38d68c01..06322f58c93 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 @@ -114,14 +114,7 @@ impl RoomList { self.loading_state.subscribe() } - /* - /// Get all previous room list entries, in addition to a [`Stream`] to room - /// list entry's updates. - pub fn entries(&self) -> (Vector, impl Stream>>) { - self.sliding_sync_list.room_list_stream() - } - */ - + /// Get all previous rooms, in addition to a [`Stream`] to rooms' updates. pub fn entries(&self) -> (Vector, impl Stream>> + '_) { let (rooms, stream) = self.client.rooms_stream(); @@ -133,53 +126,6 @@ impl RoomList { ) } - pub fn entries_with_dynamic_adapters( - &self, - page_size: usize, - roominfo_update_recv: broadcast::Receiver, - ) -> (impl Stream>> + '_, RoomListDynamicEntriesController) { - let list = self.sliding_sync_list.clone(); - - let filter_fn_cell = AsyncCell::shared(); - - let limit = SharedObservable::::new(page_size); - let limit_stream = limit.subscribe(); - - let dynamic_entries_controller = RoomListDynamicEntriesController::new( - filter_fn_cell.clone(), - page_size, - limit, - list.maximum_number_of_rooms_stream(), - ); - - let stream = stream! { - loop { - let filter_fn = filter_fn_cell.take().await; - - let (raw_values, raw_stream) = self.entries(); - - // Combine normal stream events with other updates from rooms - let merged_stream = merge_stream_and_receiver(raw_values.clone(), raw_stream, roominfo_update_recv.resubscribe()); - - let (values, stream) = (raw_values, merged_stream) - .filter(filter_fn) - .sort_by(new_sorter_or(vec![ - Box::new(new_sorter_recency()), - Box::new(new_sorter_name()) - ])) - .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 }])) - .chain(stream); - } - } - .switch(); - - (stream, dynamic_entries_controller) - } - - /* /// Similar to [`Self::entries`] except that it's possible to provide a /// filter that will filter out room list entries, and that it's also /// possible to “paginate” over the entries by `page_size`. @@ -187,13 +133,13 @@ impl RoomList { /// The returned stream will only start yielding diffs once a filter is set /// through the returned [`RoomListDynamicEntriesController`]. For every /// call to [`RoomListDynamicEntriesController::set_filter`], the stream - /// will yield a [`VectorDiff::Clear`] followed by any updates of the + /// will yield a [`VectorDiff::Reset`] followed by any updates of the /// room list under that filter (until the next reset). pub fn entries_with_dynamic_adapters( &self, page_size: usize, roominfo_update_recv: broadcast::Receiver, - ) -> (impl Stream>>, RoomListDynamicEntriesController) { + ) -> (impl Stream>> + '_, RoomListDynamicEntriesController) { let list = self.sliding_sync_list.clone(); let filter_fn_cell = AsyncCell::shared(); @@ -203,7 +149,6 @@ impl RoomList { let dynamic_entries_controller = RoomListDynamicEntriesController::new( filter_fn_cell.clone(), - AsyncCell::shared(), page_size, limit, list.maximum_number_of_rooms_stream(), @@ -212,13 +157,18 @@ impl RoomList { let stream = stream! { loop { let filter_fn = filter_fn_cell.take().await; - let (raw_values, raw_stream) = list.room_list_stream(); + + let (raw_values, raw_stream) = self.entries(); // Combine normal stream events with other updates from rooms let merged_stream = merge_stream_and_receiver(raw_values.clone(), raw_stream, roominfo_update_recv.resubscribe()); let (values, stream) = (raw_values, merged_stream) .filter(filter_fn) + .sort_by(new_sorter_or(vec![ + Box::new(new_sorter_recency()), + Box::new(new_sorter_name()) + ])) .dynamic_limit_with_initial_value(page_size, limit_stream.clone()); // Clearing the stream before chaining with the real stream. @@ -230,7 +180,6 @@ impl RoomList { (stream, dynamic_entries_controller) } - */ } /// This function remembers the current state of the unfiltered room list, so it