fix(base): Mark rooms as DMs when we receive an m.direct event
This commit is contained in:
parent
05663a42ed
commit
5ff69ad1a9
1 changed files with 19 additions and 5 deletions
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue