Skip to content

Commit d858940

Browse files
committed
matrix_sdk_base: handle response.account_data events
"m.direct" events are not in room account data events but in main one
1 parent 8831833 commit d858940

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

matrix_sdk_base/src/client.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,11 @@ impl BaseClient {
902902
/// * `room_id` - The unique id of the room the event belongs to.
903903
///
904904
/// * `event` - The presence event for a specified room member.
905-
pub async fn receive_account_data_event(&self, _: &RoomId, event: &AnyBasicEvent) -> bool {
905+
pub async fn receive_account_data_event(
906+
&self,
907+
_: Option<&RoomId>,
908+
event: &AnyBasicEvent,
909+
) -> bool {
906910
match event {
907911
AnyBasicEvent::IgnoredUserList(event) => self.handle_ignored_users(event).await,
908912
AnyBasicEvent::PushRules(event) => self.handle_push_rules(event).await,
@@ -971,6 +975,7 @@ impl BaseClient {
971975
self.iter_joined_rooms(response).await?;
972976
self.iter_invited_rooms(response).await?;
973977
self.iter_left_rooms(response).await?;
978+
self.iter_account_data(response).await?;
974979

975980
let store = self.state_store.read().await;
976981

@@ -1071,7 +1076,7 @@ impl BaseClient {
10711076
// FIXME: receive_* and emit_* methods shouldn't be called in parallel. We
10721077
// should only pass events to receive_* methods and then let *them* emit.
10731078
if let Ok(e) = account_data.deserialize() {
1074-
if self.receive_account_data_event(&room_id, &e).await {
1079+
if self.receive_account_data_event(Some(&room_id), &e).await {
10751080
updated = true;
10761081
}
10771082
self.emit_account_data_event(room_id, &e, RoomStateType::Joined)
@@ -1187,6 +1192,25 @@ impl BaseClient {
11871192
Ok(updated)
11881193
}
11891194

1195+
async fn iter_account_data(
1196+
&self,
1197+
response: &mut api::sync::sync_events::Response,
1198+
) -> Result<bool> {
1199+
let mut updated = false;
1200+
for account_data in &response.account_data.events {
1201+
{
1202+
// FIXME: emit_account_data_event assumes a room is given
1203+
if let Ok(e) = account_data.deserialize() {
1204+
if self.receive_account_data_event(None, &e).await {
1205+
updated = true;
1206+
}
1207+
}
1208+
}
1209+
}
1210+
// FIXME store all rooms if updated?
1211+
Ok(updated)
1212+
}
1213+
11901214
async fn iter_invited_rooms(
11911215
&self,
11921216
response: &api::sync::sync_events::Response,

0 commit comments

Comments
 (0)