From eef79aad2b2d2b0bf632c86febd152f399754e13 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Sat, 20 Jan 2024 09:00:01 +0100 Subject: [PATCH] refactor: Improve getTimeline senders This creates a set before requesting users from the database. This prevents doing the same check for the same user multiple times and also prevents concurrent modifications of the event list. --- lib/src/room.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/src/room.dart b/lib/src/room.dart index 92f5a4e2..c5dd5c21 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -1499,9 +1499,10 @@ class Room { // Fetch all users from database we have got here. if (eventContextId == null) { - for (final event in events) { - if (getState(EventTypes.RoomMember, event.senderId) != null) continue; - final dbUser = await client.database?.getUser(event.senderId, this); + final userIds = events.map((event) => event.senderId).toSet(); + for (final userId in userIds) { + if (getState(EventTypes.RoomMember, userId) != null) continue; + final dbUser = await client.database?.getUser(userId, this); if (dbUser != null) setState(dbUser); } }