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,
|
void Function()? onUpdate,
|
||||||
}) async {
|
}) async {
|
||||||
await postLoad();
|
await postLoad();
|
||||||
var events;
|
final events = await client.database?.getEventList(
|
||||||
events = await client.database?.getEventList(
|
|
||||||
this,
|
this,
|
||||||
limit: defaultHistoryCount,
|
limit: defaultHistoryCount,
|
||||||
) ??
|
) ??
|
||||||
|
|
@ -1288,13 +1287,20 @@ class Room {
|
||||||
for (var i = 0; i < events.length; i++) {
|
for (var i = 0; i < events.length; i++) {
|
||||||
if (events[i].type == EventTypes.Encrypted &&
|
if (events[i].type == EventTypes.Encrypted &&
|
||||||
events[i].content['can_request_session'] == true) {
|
events[i].content['can_request_session'] == true) {
|
||||||
events[i] = await client.encryption
|
events[i] = await client.encryption!
|
||||||
?.decryptRoomEvent(id, events[i], store: true);
|
.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(
|
final timeline = Timeline(
|
||||||
room: this,
|
room: this,
|
||||||
events: events,
|
events: events,
|
||||||
|
|
@ -1303,9 +1309,6 @@ class Room {
|
||||||
onInsert: onInsert,
|
onInsert: onInsert,
|
||||||
onUpdate: onUpdate,
|
onUpdate: onUpdate,
|
||||||
);
|
);
|
||||||
if (client.database == null) {
|
|
||||||
await requestHistory(historyCount: 10);
|
|
||||||
}
|
|
||||||
return timeline;
|
return timeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,16 @@ class Timeline {
|
||||||
limit: Room.defaultHistoryCount,
|
limit: Room.defaultHistoryCount,
|
||||||
);
|
);
|
||||||
if (eventsFromStore != null && eventsFromStore.isNotEmpty) {
|
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);
|
events.addAll(eventsFromStore);
|
||||||
final startIndex = events.length - eventsFromStore.length;
|
final startIndex = events.length - eventsFromStore.length;
|
||||||
final endIndex = events.length;
|
final endIndex = events.length;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue