Skip to content

Commit cb2173f

Browse files
committed
!fixup Spread UtdHookManager in RoomListItem.
1 parent f614078 commit cb2173f

File tree

1 file changed

+58
-25
lines changed

1 file changed

+58
-25
lines changed

bindings/matrix-sdk-ffi/src/room_list.rs

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -162,18 +162,27 @@ impl RoomList {
162162

163163
fn entries(&self, listener: Box<dyn RoomListEntriesListener>) -> Arc<TaskHandle> {
164164
let this = self.inner.clone();
165+
let utd_hook = self.room_list_service.utd_hook.clone();
165166

166167
Arc::new(TaskHandle::new(RUNTIME.spawn(async move {
167168
let (entries, entries_stream) = this.entries();
168169

169170
pin_mut!(entries_stream);
170171

171172
listener.on_update(vec![RoomListEntriesUpdate::Append {
172-
values: entries.into_iter().map(|v| Arc::new(v.into())).collect(),
173+
values: entries
174+
.into_iter()
175+
.map(|room| Arc::new(RoomListItem::from(room, utd_hook.clone())))
176+
.collect(),
173177
}]);
174178

175-
while let Some(diff) = entries_stream.next().await {
176-
listener.on_update(diff.into_iter().map(Into::into).collect());
179+
while let Some(diffs) = entries_stream.next().await {
180+
listener.on_update(
181+
diffs
182+
.into_iter()
183+
.map(|diff| RoomListEntriesUpdate::from(diff, utd_hook.clone()))
184+
.collect(),
185+
);
177186
}
178187
})))
179188
}
@@ -185,6 +194,7 @@ impl RoomList {
185194
) -> Arc<RoomListEntriesWithDynamicAdaptersResult> {
186195
let this = self.clone();
187196
let client = self.room_list_service.inner.client();
197+
let utd_hook = self.room_list_service.utd_hook.clone();
188198

189199
// The following code deserves a bit of explanation.
190200
// `matrix_sdk_ui::room_list_service::RoomList::entries_with_dynamic_adapters`
@@ -244,8 +254,13 @@ impl RoomList {
244254
let entries_stream = Arc::new(TaskHandle::new(RUNTIME.spawn(async move {
245255
pin_mut!(entries_stream);
246256

247-
while let Some(diff) = entries_stream.next().await {
248-
listener.on_update(diff.into_iter().map(Into::into).collect());
257+
while let Some(diffs) = entries_stream.next().await {
258+
listener.on_update(
259+
diffs
260+
.into_iter()
261+
.map(|diff| RoomListEntriesUpdate::from(diff, utd_hook.clone()))
262+
.collect(),
263+
);
249264
}
250265
})));
251266

@@ -390,30 +405,45 @@ pub enum RoomListEntriesUpdate {
390405
Reset { values: Vec<Arc<RoomListItem>> },
391406
}
392407

393-
impl From<VectorDiff<matrix_sdk_ui::room_list_service::Room>> for RoomListEntriesUpdate {
394-
fn from(other: VectorDiff<matrix_sdk_ui::room_list_service::Room>) -> Self {
395-
match other {
396-
VectorDiff::Append { values } => {
397-
Self::Append { values: values.into_iter().map(|v| Arc::new(v.into())).collect() }
398-
}
408+
impl RoomListEntriesUpdate {
409+
fn from(
410+
vector_diff: VectorDiff<matrix_sdk_ui::room_list_service::Room>,
411+
utd_hook: Option<Arc<UtdHookManager>>,
412+
) -> Self {
413+
match vector_diff {
414+
VectorDiff::Append { values } => Self::Append {
415+
values: values
416+
.into_iter()
417+
.map(|value| Arc::new(RoomListItem::from(value, utd_hook.clone())))
418+
.collect(),
419+
},
399420
VectorDiff::Clear => Self::Clear,
400-
VectorDiff::PushFront { value } => Self::PushFront { value: Arc::new(value.into()) },
401-
VectorDiff::PushBack { value } => Self::PushBack { value: Arc::new(value.into()) },
402-
VectorDiff::PopFront => Self::PopFront,
403-
VectorDiff::PopBack => Self::PopBack,
404-
VectorDiff::Insert { index, value } => {
405-
Self::Insert { index: u32::try_from(index).unwrap(), value: Arc::new(value.into()) }
421+
VectorDiff::PushFront { value } => {
422+
Self::PushFront { value: Arc::new(RoomListItem::from(value, utd_hook)) }
406423
}
407-
VectorDiff::Set { index, value } => {
408-
Self::Set { index: u32::try_from(index).unwrap(), value: Arc::new(value.into()) }
424+
VectorDiff::PushBack { value } => {
425+
Self::PushBack { value: Arc::new(RoomListItem::from(value, utd_hook)) }
409426
}
427+
VectorDiff::PopFront => Self::PopFront,
428+
VectorDiff::PopBack => Self::PopBack,
429+
VectorDiff::Insert { index, value } => Self::Insert {
430+
index: u32::try_from(index).unwrap(),
431+
value: Arc::new(RoomListItem::from(value, utd_hook)),
432+
},
433+
VectorDiff::Set { index, value } => Self::Set {
434+
index: u32::try_from(index).unwrap(),
435+
value: Arc::new(RoomListItem::from(value, utd_hook)),
436+
},
410437
VectorDiff::Remove { index } => Self::Remove { index: u32::try_from(index).unwrap() },
411438
VectorDiff::Truncate { length } => {
412439
Self::Truncate { length: u32::try_from(length).unwrap() }
413440
}
414-
VectorDiff::Reset { values } => {
415-
Self::Reset { values: values.into_iter().map(|v| Arc::new(v.into())).collect() }
416-
}
441+
VectorDiff::Reset { values } => Self::Reset {
442+
values: values
443+
.into_iter()
444+
.map(|value| Arc::new(RoomListItem::from(value, utd_hook.clone())))
445+
.collect(),
446+
},
417447
}
418448
}
419449
}
@@ -515,9 +545,12 @@ pub struct RoomListItem {
515545
utd_hook: Option<Arc<UtdHookManager>>,
516546
}
517547

518-
impl From<matrix_sdk_ui::room_list_service::Room> for RoomListItem {
519-
fn from(value: matrix_sdk_ui::room_list_service::Room) -> Self {
520-
Self { inner: Arc::new(value), utd_hook: None }
548+
impl RoomListItem {
549+
fn from(
550+
value: matrix_sdk_ui::room_list_service::Room,
551+
utd_hook: Option<Arc<UtdHookManager>>,
552+
) -> Self {
553+
Self { inner: Arc::new(value), utd_hook }
521554
}
522555
}
523556

0 commit comments

Comments
 (0)