fix: Post load all users on room opening
When opening a room we need to fetch all users from the database. Otherwise we would need to update the timeline per user after creation which should be much slower.
This commit is contained in:
parent
f8eee4f4f1
commit
117baecfb1
|
|
@ -1275,8 +1275,7 @@ class Room {
|
|||
void Function()? onUpdate,
|
||||
}) async {
|
||||
await postLoad();
|
||||
var events;
|
||||
events = await client.database?.getEventList(
|
||||
final events = await client.database?.getEventList(
|
||||
this,
|
||||
limit: defaultHistoryCount,
|
||||
) ??
|
||||
|
|
@ -1288,13 +1287,20 @@ class Room {
|
|||
for (var i = 0; i < events.length; i++) {
|
||||
if (events[i].type == EventTypes.Encrypted &&
|
||||
events[i].content['can_request_session'] == true) {
|
||||
events[i] = await client.encryption
|
||||
?.decryptRoomEvent(id, events[i], store: true);
|
||||
events[i] = await client.encryption!
|
||||
.decryptRoomEvent(id, events[i], store: true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Fetch all users from database we have got here.
|
||||
for (final event in events) {
|
||||
if (getState(EventTypes.RoomMember, event.senderId) != null) continue;
|
||||
final dbUser = await client.database?.getUser(event.senderId, this);
|
||||
if (dbUser != null) setState(dbUser);
|
||||
}
|
||||
|
||||
final timeline = Timeline(
|
||||
room: this,
|
||||
events: events,
|
||||
|
|
@ -1303,9 +1309,6 @@ class Room {
|
|||
onInsert: onInsert,
|
||||
onUpdate: onUpdate,
|
||||
);
|
||||
if (client.database == null) {
|
||||
await requestHistory(historyCount: 10);
|
||||
}
|
||||
return timeline;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,6 +85,16 @@ class Timeline {
|
|||
limit: Room.defaultHistoryCount,
|
||||
);
|
||||
if (eventsFromStore != null && eventsFromStore.isNotEmpty) {
|
||||
// Fetch all users from database we have got here.
|
||||
for (final event in events) {
|
||||
if (room.getState(EventTypes.RoomMember, event.senderId) != null) {
|
||||
continue;
|
||||
}
|
||||
final dbUser =
|
||||
await room.client.database?.getUser(event.senderId, room);
|
||||
if (dbUser != null) room.setState(dbUser);
|
||||
}
|
||||
|
||||
events.addAll(eventsFromStore);
|
||||
final startIndex = events.length - eventsFromStore.length;
|
||||
final endIndex = events.length;
|
||||
|
|
|
|||
Loading…
Reference in New Issue