@@ -902,7 +902,11 @@ impl BaseClient {
902
902
/// * `room_id` - The unique id of the room the event belongs to.
903
903
///
904
904
/// * `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 {
906
910
match event {
907
911
AnyBasicEvent :: IgnoredUserList ( event) => self . handle_ignored_users ( event) . await ,
908
912
AnyBasicEvent :: PushRules ( event) => self . handle_push_rules ( event) . await ,
@@ -971,6 +975,7 @@ impl BaseClient {
971
975
self . iter_joined_rooms ( response) . await ?;
972
976
self . iter_invited_rooms ( response) . await ?;
973
977
self . iter_left_rooms ( response) . await ?;
978
+ self . iter_account_data ( response) . await ?;
974
979
975
980
let store = self . state_store . read ( ) . await ;
976
981
@@ -1071,7 +1076,7 @@ impl BaseClient {
1071
1076
// FIXME: receive_* and emit_* methods shouldn't be called in parallel. We
1072
1077
// should only pass events to receive_* methods and then let *them* emit.
1073
1078
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 {
1075
1080
updated = true ;
1076
1081
}
1077
1082
self . emit_account_data_event ( room_id, & e, RoomStateType :: Joined )
@@ -1187,6 +1192,25 @@ impl BaseClient {
1187
1192
Ok ( updated)
1188
1193
}
1189
1194
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
+
1190
1214
async fn iter_invited_rooms (
1191
1215
& self ,
1192
1216
response : & api:: sync:: sync_events:: Response ,
0 commit comments