Browse Source

member-list: Fix tracking of Members activity

merge-requests/1461/head
Kévin Commaille 3 years ago
parent
commit
eb4e64d7e2
No known key found for this signature in database
GPG Key ID: 29A48C1F03620416
  1. 20
      src/session/model/room/member_list.rs
  2. 8
      src/session/model/room/timeline/mod.rs

20
src/session/model/room/member_list.rs

@ -14,7 +14,7 @@ use matrix_sdk::{
};
use tracing::error;
use super::{Member, Membership, Room};
use super::{Event, Member, Membership, Room};
use crate::{spawn, spawn_tokio};
mod imp {
@ -223,6 +223,24 @@ impl MemberList {
member.update_from_room_member(room_member);
}
}
// Restore the members activity according to the known timeline events.
for item in self.room().timeline().items().iter::<glib::Object>().rev() {
let Ok(item) = item else {
// The iterator is broken, stop.
break;
};
let Ok(event) = item.downcast::<Event>() else {
continue;
};
if !event.counts_as_unread() {
continue;
}
if let Some(member) = members.get(&event.sender_id()) {
member.set_latest_activity(event.origin_server_ts_u64());
}
}
}
if num_members_added > 0 {

8
src/session/model/room/timeline/mod.rs

@ -346,6 +346,14 @@ impl Timeline {
.event_map
.borrow_mut()
.insert(event.key(), event.clone());
// Keep track of the activity of the sender.
if event.counts_as_unread() {
if let Some(members) = self.room().members() {
let member = members.get_or_create(event.sender_id());
member.set_latest_activity(event.origin_server_ts_u64());
}
}
}
item

Loading…
Cancel
Save