From 5ff69ad1a9e7192ec5eb458060047724e6b3ea40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 8 Sep 2021 13:18:58 +0200 Subject: [PATCH] fix(base): Mark rooms as DMs when we receive an m.direct event --- matrix_sdk_base/src/client.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index 3b77fd448..6d824657f 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -58,7 +58,7 @@ use ruma::{ serde::Raw, MilliSecondsSinceUnixEpoch, RoomId, UInt, UserId, }; -use tracing::{info, warn}; +use tracing::{info, trace, warn}; use zeroize::Zeroizing; use crate::{ @@ -595,15 +595,23 @@ impl BaseClient { let mut account_data = BTreeMap::new(); for raw_event in events { - let event = if let Ok(e) = raw_event.deserialize() { - e - } else { - continue; + let event = match raw_event.deserialize() { + Ok(e) => e, + Err(e) => { + warn!(error =? e, "Failed to deserialize a global account data event"); + continue; + } }; if let AnyGlobalAccountDataEvent::Direct(e) = &event { for (user_id, rooms) in e.content.iter() { 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) { room.base_info.dm_target = Some(user_id.clone()); } 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); } + // 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 .events .iter()