diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart index ce0de36972..997c785e31 100644 --- a/lib/utils/room_status_extension.dart +++ b/lib/utils/room_status_extension.dart @@ -91,17 +91,28 @@ extension RoomStatusExtension on Room { eventId ??= timeline.events.first.eventId; final lastReceipts = {}; - // now we iterate the timeline events until we hit the first rendered event - for (final event in timeline.events) { - lastReceipts.addAll(event.receipts.map((r) => r.user)); - if (event.eventId == eventId) { - break; + + // mainThread.others only contains the last event of the room sent by the current user + if (receiptState.mainThread != null) { + final mainThreadReceipts = receiptState.mainThread!.otherUsers.entries + .where((element) => element.value.eventId == eventId) + .map((e) => unsafeGetUserFromMemoryOrFallback(e.key)) + .toList(); + lastReceipts.addAll(mainThreadReceipts); + } else { + // now we iterate the timeline events until we hit the first rendered event + for (final event in timeline.events) { + lastReceipts.addAll(event.receipts.map((r) => r.user)); + if (event.eventId == eventId) { + break; + } } + lastReceipts.removeWhere( + (user) => + user.id == client.userID || + user.id == timeline.events.first.senderId, + ); } - lastReceipts.removeWhere( - (user) => - user.id == client.userID || user.id == timeline.events.first.senderId, - ); return lastReceipts.toList(); } }