Skip to content

Commit c2ea9a1

Browse files
authored
Merge pull request #623 from kevinaboos/sliding_sync_spaces_rework
2 parents e6cfab4 + cf945fa commit c2ea9a1

File tree

7 files changed

+351
-136
lines changed

7 files changed

+351
-136
lines changed

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ log_room_list_diffs = []
111111
## Logs all diffs to all room timelines.
112112
log_timeline_diffs = []
113113

114+
## Logs all diffs received by the Matrix SpaceService.
115+
log_space_service_diffs = []
116+
114117

115118
[patch.crates-io]
116119
## This is required to avoid a version conflict on the libsqlite3-sys crate,

src/app.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ impl LiveHook for App {
192192

193193
impl MatchEvent for App {
194194
fn handle_startup(&mut self, cx: &mut Cx) {
195+
// only init logging/tracing once
196+
let _ = tracing_subscriber::fmt::try_init();
197+
195198
// Initialize the project directory here from the main UI thread
196199
// such that background threads/tasks will be able to can access it.
197200
let _app_data_dir = crate::app_data_dir();

src/home/invite_screen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ impl Widget for InviteScreen {
281281
if let (false, Some(room_id), true) = (self.is_loaded, &self.room_id, cx.has_global::<RoomsListRef>()) {
282282
let rooms_list_ref = cx.get_global::<RoomsListRef>();
283283
if !rooms_list_ref.is_room_loaded(room_id) {
284-
self.all_rooms_loaded = rooms_list_ref.all_known_rooms_loaded();
284+
self.all_rooms_loaded = rooms_list_ref.all_rooms_loaded();
285285
self.redraw(cx);
286286
return;
287287
} else {

src/home/room_screen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ impl Widget for RoomScreen {
742742
self.room_id = None;
743743
self.set_displayed_room(cx, same_room_id, self.room_name.clone());
744744
} else {
745-
self.all_rooms_loaded = rooms_list_ref.all_known_rooms_loaded();
745+
self.all_rooms_loaded = rooms_list_ref.all_rooms_loaded();
746746
return;
747747
}
748748
}

src/home/rooms_list.rs

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ use crossbeam_queue::SegQueue;
33
use makepad_widgets::*;
44
use matrix_sdk::{ruma::{events::tag::Tags, MilliSecondsSinceUnixEpoch, OwnedRoomAliasId, OwnedRoomId, OwnedUserId}, RoomState};
55
use 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
};
118
use 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

354357
impl LiveHook for RoomsList {
@@ -358,15 +361,13 @@ impl LiveHook for RoomsList {
358361
}
359362

360363
impl 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

10641062
impl 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
}

src/home/rooms_list_header.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,12 @@ impl Widget for RoomsListHeader {
131131
}
132132
}
133133

134-
/// An enum that represents the possible actions that can be sent to the `RoomsListHeader`.
134+
/// Actions that can be handled by the `RoomsListHeader`.
135135
#[derive(Debug)]
136136
pub enum RoomsListHeaderAction {
137-
/// Action to set the sync status of the rooms list header.
138-
/// This will show or hide the loading spinner based on the boolean value.
137+
/// An action received by the RoomsListHeader that will show or hide
138+
/// its sync status indicator (and loading spinner) based on the given boolean.
139139
SetSyncStatus(bool),
140-
/// The sync service state has changed.
140+
/// An action received by the RoomsListHeader indicating the sync service state has changed.
141141
StateUpdate(State),
142142
}

0 commit comments

Comments
 (0)