Skip to content

Commit c488488

Browse files
committed
fix(sliding-sync): set views to preload if we've recovered from frozen
1 parent ddde87f commit c488488

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

crates/matrix-sdk/src/sliding_sync.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,9 @@ impl From<&SlidingSyncView> for FrozenSlidingSyncView {
933933
impl SlidingSyncView {
934934
fn set_from_cold(&mut self, v: FrozenSlidingSyncView) {
935935
let FrozenSlidingSyncView { rooms_count, rooms_list } = v;
936+
if *self.sync_mode.lock_ref() == SlidingSyncMode::FullSync {
937+
self.state.set(SlidingSyncState::Preload);
938+
}
936939
self.rooms_count.replace(rooms_count);
937940
self.rooms_list.lock_mut().replace_cloned(rooms_list);
938941
}

labs/jack-in/src/client/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ pub async fn run_client(
4848
Some(Ok(_)) => {
4949
// we are switching into live updates mode next. ignoring
5050
let state = state.read_only().get_cloned();
51+
ssync_state.set_view_state(state.clone());
5152

5253
if state == SlidingSyncState::Live {
5354
info!("Reached live sync");

labs/jack-in/src/client/state.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ use futures_signals::{
88
signal::Mutable,
99
signal_vec::{MutableVec, VecDiff},
1010
};
11-
use matrix_sdk::{room::timeline::TimelineItem, ruma::OwnedRoomId, SlidingSyncView};
11+
use matrix_sdk::{
12+
room::timeline::TimelineItem, ruma::OwnedRoomId, SlidingSyncState as ViewState, SlidingSyncView,
13+
};
1214
use tokio::task::JoinHandle;
1315

1416
#[derive(Clone, Default)]
@@ -25,6 +27,7 @@ pub struct SlidingSyncState {
2527
/// the current list selector for the room
2628
first_render: Option<Duration>,
2729
full_sync: Option<Duration>,
30+
current_state: ViewState,
2831
tl_handle: Mutable<Option<JoinHandle<()>>>,
2932
pub selected_room: Mutable<Option<OwnedRoomId>>,
3033
pub current_timeline: MutableVec<Arc<TimelineItem>>,
@@ -37,6 +40,7 @@ impl SlidingSyncState {
3740
view,
3841
first_render: None,
3942
full_sync: None,
43+
current_state: ViewState::default(),
4044
tl_handle: Default::default(),
4145
selected_room: Default::default(),
4246
current_timeline: Default::default(),
@@ -105,6 +109,9 @@ impl SlidingSyncState {
105109
pub fn time_to_full_sync(&self) -> Option<Duration> {
106110
self.full_sync
107111
}
112+
pub fn current_state(&self) -> &ViewState {
113+
&self.current_state
114+
}
108115

109116
pub fn loaded_rooms_count(&self) -> usize {
110117
self.view.rooms.lock_ref().len()
@@ -125,4 +132,8 @@ impl SlidingSyncState {
125132
pub fn set_full_sync_now(&mut self) {
126133
self.full_sync = Some(self.started.elapsed())
127134
}
135+
136+
pub fn set_view_state(&mut self, current_state: ViewState) {
137+
self.current_state = current_state
138+
}
128139
}

labs/jack-in/src/components/statusbar.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ impl MockComponent for StatusBar {
3434
let focus = self.props.get_or(Attribute::Focus, AttrValue::Flag(false)).unwrap_flag();
3535

3636
let tabs = {
37-
let mut tabs = vec![];
37+
let mut tabs =
38+
vec![Spans::from(format!("Current state: {:?}", self.sstate.current_state()))];
3839
if let Some(dur) = self.sstate.time_to_first_render() {
3940
tabs.push(Spans::from(format!("First view: {}ms", dur.as_millis())));
4041

0 commit comments

Comments
 (0)