[Room]/[Store] Load sender user from server when store is not available

Took 19 minutes
This commit is contained in:
Marcel 2019-07-29 16:16:20 +02:00
parent 90a5f32e20
commit e42b4daa84
2 changed files with 15 additions and 4 deletions

View File

@ -493,6 +493,19 @@ class Room {
return participants;
}
Future<User> 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<Event> 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"])));
}
}

View File

@ -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 {