diff --git a/lib/src/Room.dart b/lib/src/Room.dart index 06c46b90..45edd10c 100644 --- a/lib/src/Room.dart +++ b/lib/src/Room.dart @@ -493,6 +493,19 @@ class Room { return participants; } + Future getUserByMXID(String mxID) async { + if (client.store != null) { + final User storeEvent = + await client.store.getUser(matrixID: mxID, room: this); + if (storeEvent != null) return storeEvent; + } + final dynamic resp = await client.connection.jsonRequest( + type: HTTPType.GET, + action: "/client/r0/rooms/$id/state/m.room.member/$mxID"); + if (resp is ErrorResponse) return null; + return User.fromJson(resp, this); + } + /// Searches for the event in the store. If it isn't found, try to request it /// from the server. Returns null if not found. Future getEventById(String eventID) async { @@ -504,7 +517,6 @@ class Room { type: HTTPType.GET, action: "/client/r0/rooms/$id/event/$eventID"); if (resp is ErrorResponse) return null; return Event.fromJson(resp, this, - senderUser: - (await client.store.getUser(matrixID: resp["sender"], room: this))); + senderUser: (await getUserByMXID(resp["sender"]))); } } diff --git a/lib/src/Store.dart b/lib/src/Store.dart index adbcc3e7..a52f03f8 100644 --- a/lib/src/Store.dart +++ b/lib/src/Store.dart @@ -651,8 +651,7 @@ class Store { "SELECT * FROM Events WHERE id=? AND chat_id=?", [eventID, room.id]); if (res.length == 0) return null; return Event.fromJson(res[0], room, - senderUser: - (await this.getUser(matrixID: res[0]["sender"], room: room))); + senderUser: (await room.getUserByMXID(res[0]["sender"]))); } Future forgetNotification(String roomID) async {