fix(base): Mark rooms as DMs when we receive an m.direct event

This commit is contained in:
Damir Jelić 2021-09-08 13:18:58 +02:00
parent 05663a42ed
commit 5ff69ad1a9

View file

@ -58,7 +58,7 @@ use ruma::{
serde::Raw, serde::Raw,
MilliSecondsSinceUnixEpoch, RoomId, UInt, UserId, MilliSecondsSinceUnixEpoch, RoomId, UInt, UserId,
}; };
use tracing::{info, warn}; use tracing::{info, trace, warn};
use zeroize::Zeroizing; use zeroize::Zeroizing;
use crate::{ use crate::{
@ -595,15 +595,23 @@ impl BaseClient {
let mut account_data = BTreeMap::new(); let mut account_data = BTreeMap::new();
for raw_event in events { for raw_event in events {
let event = if let Ok(e) = raw_event.deserialize() { let event = match raw_event.deserialize() {
e Ok(e) => e,
} else { Err(e) => {
warn!(error =? e, "Failed to deserialize a global account data event");
continue; continue;
}
}; };
if let AnyGlobalAccountDataEvent::Direct(e) = &event { if let AnyGlobalAccountDataEvent::Direct(e) = &event {
for (user_id, rooms) in e.content.iter() { for (user_id, rooms) in e.content.iter() {
for room_id in rooms { for room_id in rooms {
trace!(
room_id = room_id.as_str(),
target = user_id.as_str(),
"Marking room as direct room"
);
if let Some(room) = changes.room_infos.get_mut(room_id) { if let Some(room) = changes.room_infos.get_mut(room_id) {
room.base_info.dm_target = Some(user_id.clone()); room.base_info.dm_target = Some(user_id.clone());
} else if let Some(room) = self.store.get_room(room_id) { } else if let Some(room) = self.store.get_room(room_id) {
@ -824,6 +832,12 @@ impl BaseClient {
new_rooms.invite.insert(room_id, new_info); new_rooms.invite.insert(room_id, new_info);
} }
// TODO remove this, we're processing account data events here again
// because we want to have the push rules in place before we process
// rooms and their events, but we want to create the rooms before we
// process the `m.direct` account data event.
self.handle_account_data(&account_data.events, &mut changes).await;
changes.presence = presence changes.presence = presence
.events .events
.iter() .iter()