@@ -3,10 +3,7 @@ use crossbeam_queue::SegQueue;
33use makepad_widgets:: * ;
44use matrix_sdk:: { ruma:: { events:: tag:: Tags , MilliSecondsSinceUnixEpoch , OwnedRoomAliasId , OwnedRoomId , OwnedUserId } , RoomState } ;
55use crate :: {
6- app:: { AppState , SelectedRoom } ,
7- room:: { room_display_filter:: { RoomDisplayFilter , RoomDisplayFilterBuilder , RoomFilterCriteria , SortFn } , FetchedRoomAvatar } ,
8- shared:: { collapsible_header:: { CollapsibleHeaderAction , CollapsibleHeaderWidgetRefExt , HeaderCategory } , jump_to_bottom_button:: UnreadMessageCount , popup_list:: { enqueue_popup_notification, PopupItem , PopupKind } , room_filter_input_bar:: RoomFilterAction } ,
9- sliding_sync:: { submit_async_request, MatrixRequest , PaginationDirection } , utils:: room_name_or_id,
6+ app:: { AppState , SelectedRoom } , room:: { FetchedRoomAvatar , room_display_filter:: { RoomDisplayFilter , RoomDisplayFilterBuilder , RoomFilterCriteria , SortFn } } , shared:: { collapsible_header:: { CollapsibleHeaderAction , CollapsibleHeaderWidgetRefExt , HeaderCategory } , jump_to_bottom_button:: UnreadMessageCount , popup_list:: { PopupItem , PopupKind , enqueue_popup_notification} , room_filter_input_bar:: RoomFilterAction } , sliding_sync:: { MatrixRequest , PaginationDirection , submit_async_request} , utils:: room_name_or_id
107} ;
118use super :: rooms_list_entry:: RoomsListEntryAction ;
129
@@ -348,7 +345,13 @@ pub struct RoomsList {
348345 /// The ID of the currently-selected room.
349346 #[ rust] current_active_room : Option < OwnedRoomId > ,
350347 /// The maximum number of rooms that will ever be loaded.
348+ ///
349+ /// This should not be used to determine whether all requested rooms have been loaded,
350+ /// because we will likely never receive this many rooms due to the room list service
351+ /// excluding rooms that we have filtered out (e.g., left or tombstoned rooms, spaces, etc).
351352 #[ rust] max_known_rooms : Option < u32 > ,
353+ // /// Whether the room list service has loaded all requested rooms from the homeserver.
354+ // #[rust] all_rooms_loaded: bool,
352355}
353356
354357impl LiveHook for RoomsList {
@@ -358,15 +361,13 @@ impl LiveHook for RoomsList {
358361}
359362
360363impl RoomsList {
361- /// Determines if all known rooms have been loaded from the homeserver.
362- ///
363- /// Returns `true` if the number of rooms in `all_joined_rooms` and `invited_rooms` equals or exceeds
364- /// `max_known_rooms`.
365- /// Returns `false` if `max_known_rooms` is `None`.
366- pub fn all_known_rooms_loaded ( & self ) -> bool {
367- self . max_known_rooms . is_some_and ( |max_rooms| {
368- self . all_joined_rooms . len ( ) + self . invited_rooms . borrow ( ) . len ( ) >= max_rooms as usize
369- } )
364+ /// Returns whether the homeserver has finished syncing all of the rooms
365+ /// that should be synced to our client based on the currently-specified room list filter.
366+ pub fn all_rooms_loaded ( & self ) -> bool {
367+ // TODO: fix this: figure out a way to determine if
368+ // all requested rooms have been received from the homeserver.
369+ false
370+ // self.all_rooms_loaded
370371 }
371372
372373 /// Returns `true` if the given `room_id` is in the `all_joined_rooms` or `invited_rooms` list.
@@ -638,11 +639,7 @@ impl RoomsList {
638639 /// Updates the status message to show how many rooms have been loaded.
639640 fn update_status_rooms_count ( & mut self ) {
640641 let num_rooms = self . all_joined_rooms . len ( ) + self . invited_rooms . borrow ( ) . len ( ) ;
641- self . status = if let Some ( max_rooms) = self . max_known_rooms {
642- format ! ( "Loaded {num_rooms} of {max_rooms} total rooms." )
643- } else {
644- format ! ( "Loaded {num_rooms} rooms." )
645- } ;
642+ self . status = format ! ( "Loaded {num_rooms} rooms." ) ;
646643 }
647644
648645 /// Updates the status message to show how many rooms are currently displayed
@@ -892,6 +889,7 @@ impl Widget for RoomsList {
892889 for action in actions {
893890 if let RoomFilterAction :: Changed ( keywords) = action. as_widget_action ( ) . cast ( ) {
894891 self . update_displayed_rooms ( cx, & keywords) ;
892+ continue ;
895893 }
896894 }
897895 }
@@ -1062,19 +1060,15 @@ impl Widget for RoomsList {
10621060}
10631061
10641062impl RoomsListRef {
1065- /// See [`RoomsList::all_known_rooms_loaded()`].
1066- pub fn all_known_rooms_loaded ( & self ) -> bool {
1067- let Some ( inner) = self . borrow ( ) else {
1068- return false ;
1069- } ;
1070- inner. all_known_rooms_loaded ( )
1063+ /// See [`RoomsList::all_rooms_loaded()`].
1064+ pub fn all_rooms_loaded ( & self ) -> bool {
1065+ let Some ( inner) = self . borrow ( ) else { return false ; } ;
1066+ inner. all_rooms_loaded ( )
10711067 }
10721068
10731069 /// See [`RoomsList::is_room_loaded()`].
10741070 pub fn is_room_loaded ( & self , room_id : & OwnedRoomId ) -> bool {
1075- let Some ( inner) = self . borrow ( ) else {
1076- return false ;
1077- } ;
1071+ let Some ( inner) = self . borrow ( ) else { return false ; } ;
10781072 inner. is_room_loaded ( room_id)
10791073 }
10801074}
0 commit comments