diff --git a/lib/src/Room.dart b/lib/src/Room.dart index 9971108..45edd10 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 { @@ -503,6 +516,7 @@ class Room { final dynamic resp = await client.connection.jsonRequest( type: HTTPType.GET, action: "/client/r0/rooms/$id/event/$eventID"); if (resp is ErrorResponse) return null; - return Event.fromJson(resp, this); + return Event.fromJson(resp, this, + senderUser: (await getUserByMXID(resp["sender"]))); } } diff --git a/lib/src/Store.dart b/lib/src/Store.dart index 6bc7c81..a52f03f 100644 --- a/lib/src/Store.dart +++ b/lib/src/Store.dart @@ -650,7 +650,8 @@ class Store { List> res = await db.rawQuery( "SELECT * FROM Events WHERE id=? AND chat_id=?", [eventID, room.id]); if (res.length == 0) return null; - return Event.fromJson(res[0], room); + return Event.fromJson(res[0], room, + senderUser: (await room.getUserByMXID(res[0]["sender"]))); } Future forgetNotification(String roomID) async {