mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-14 02:55:47 -04:00
ui: Use eyeball_im's new entry API
This commit is contained in:
committed by
Jonas Platte
parent
43bbd4200e
commit
01ceec43b1
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -1495,9 +1495,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "eyeball-im"
|
||||
version = "0.2.2"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d7b7f93b1590ac27ac76fd8a142ae19221ea9fd7ce35769a9aaea2e4f3c07250"
|
||||
checksum = "c21fb87d8fd4bdb2e140007b79d350ad93c574989abd2be322a0534054e68a67"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"imbl",
|
||||
|
||||
@@ -28,7 +28,7 @@ byteorder = "1.4.3"
|
||||
ctor = "0.2.0"
|
||||
dashmap = "5.2.0"
|
||||
eyeball = "0.8.3"
|
||||
eyeball-im = "0.2.0"
|
||||
eyeball-im = "0.2.4"
|
||||
eyeball-im-util = "0.2.1"
|
||||
futures-core = "0.3.28"
|
||||
futures-executor = "0.3.21"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
use std::collections::BTreeSet;
|
||||
use std::{collections::HashMap, fmt, sync::Arc};
|
||||
|
||||
use eyeball_im::{ObservableVector, VectorSubscriber};
|
||||
use eyeball_im::{ObservableVector, ObservableVectorEntry, VectorSubscriber};
|
||||
#[cfg(any(test, feature = "testing"))]
|
||||
use eyeball_im_util::{FilterMapVectorSubscriber, VectorExt};
|
||||
use imbl::Vector;
|
||||
@@ -893,49 +893,45 @@ impl<P: RoomDataProvider> TimelineInner<P> {
|
||||
}
|
||||
|
||||
async fn set_non_ready_sender_profiles(&self, profile_state: TimelineDetails<Profile>) {
|
||||
let mut state = self.state.lock().await;
|
||||
for idx in 0..state.items.len() {
|
||||
let item = state.items[idx].clone();
|
||||
let Some(event_item) = item.as_event() else { continue };
|
||||
self.state.lock().await.items.for_each(|mut entry| {
|
||||
let Some(event_item) = entry.as_event() else { return };
|
||||
if !matches!(event_item.sender_profile(), TimelineDetails::Ready(_)) {
|
||||
let item = item.with_kind(TimelineItemKind::Event(
|
||||
let new_item = entry.with_kind(TimelineItemKind::Event(
|
||||
event_item.with_sender_profile(profile_state.clone()),
|
||||
));
|
||||
state.items.set(idx, item);
|
||||
ObservableVectorEntry::set(&mut entry, new_item);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
pub(super) async fn update_sender_profiles(&self) {
|
||||
trace!("Updating sender profiles");
|
||||
|
||||
let mut state = self.state.lock().await;
|
||||
let num_items = state.items.len();
|
||||
|
||||
for idx in 0..num_items {
|
||||
let sender = match state.items[idx].as_event() {
|
||||
let mut entries = state.items.entries();
|
||||
while let Some(mut entry) = entries.next() {
|
||||
let sender = match entry.as_event() {
|
||||
Some(event_item) => event_item.sender().to_owned(),
|
||||
None => continue,
|
||||
};
|
||||
let maybe_profile = self.room_data_provider.profile(&sender).await;
|
||||
|
||||
assert_eq!(state.items.len(), num_items);
|
||||
|
||||
let item = state.items[idx].clone();
|
||||
let event_item = item.as_event().unwrap();
|
||||
let event_item = entry.as_event().unwrap();
|
||||
match maybe_profile {
|
||||
Some(profile) => {
|
||||
if !event_item.sender_profile().contains(&profile) {
|
||||
let updated_item =
|
||||
event_item.with_sender_profile(TimelineDetails::Ready(profile));
|
||||
state.items.set(idx, item.with_kind(updated_item));
|
||||
let new_item = entry.with_kind(updated_item);
|
||||
ObservableVectorEntry::set(&mut entry, new_item);
|
||||
}
|
||||
}
|
||||
None => {
|
||||
if !event_item.sender_profile().is_unavailable() {
|
||||
let updated_item =
|
||||
event_item.with_sender_profile(TimelineDetails::Unavailable);
|
||||
state.items.set(idx, item.with_kind(updated_item));
|
||||
let new_item = entry.with_kind(updated_item);
|
||||
ObservableVectorEntry::set(&mut entry, new_item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user