Revert "Adopt async uniffi in the RoomSummaryProvider and ensure diffs are still processed serially"

This reverts commit d710dafc94.
This commit is contained in:
Stefan Ceriu
2023-05-26 10:48:56 +03:00
committed by Stefan Ceriu
parent b238e3efdd
commit 524997438f
@@ -110,19 +110,6 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
MXLog.info("\(name): Finished applying \(diffs.count) diffs, new room list \(rooms.compactMap { $0.id ?? "Empty" })") MXLog.info("\(name): Finished applying \(diffs.count) diffs, new room list \(rooms.compactMap { $0.id ?? "Empty" })")
} }
// The room summary provider needs to process diffs serially
// Switching to an actor here doesn't help because of all the suspension points
// and actor re-entrance
private static var latestRoomMessage: EventTimelineItem?
private func fetchLastMessage(room: SlidingSyncRoomProtocol) {
let semaphore = DispatchSemaphore(value: 0)
Task {
Self.latestRoomMessage = await room.latestRoomMessage()
semaphore.signal()
}
semaphore.wait()
}
private func buildRoomSummaryForIdentifier(_ identifier: String, invalidated: Bool) -> RoomSummary { private func buildRoomSummaryForIdentifier(_ identifier: String, invalidated: Bool) -> RoomSummary {
guard let room = try? slidingSyncListProxy.roomForIdentifier(identifier) else { guard let room = try? slidingSyncListProxy.roomForIdentifier(identifier) else {
MXLog.error("\(name): Failed finding room with id: \(identifier)") MXLog.error("\(name): Failed finding room with id: \(identifier)")
@@ -132,13 +119,15 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
var attributedLastMessage: AttributedString? var attributedLastMessage: AttributedString?
var lastMessageFormattedTimestamp: String? var lastMessageFormattedTimestamp: String?
fetchLastMessage(room: room) // Dispatch onto another queue otherwise the rust method latestRoomMessage crashes.
// This will be fixed when we get async uniffi support.
if let latestRoomMessage = Self.latestRoomMessage { DispatchQueue.global(qos: .userInitiated).sync {
if let latestRoomMessage = room.latestRoomMessage() {
let lastMessage = EventTimelineItemProxy(item: latestRoomMessage) let lastMessage = EventTimelineItemProxy(item: latestRoomMessage)
lastMessageFormattedTimestamp = lastMessage.timestamp.formattedMinimal() lastMessageFormattedTimestamp = lastMessage.timestamp.formattedMinimal()
attributedLastMessage = eventStringBuilder.buildAttributedString(for: lastMessage) attributedLastMessage = eventStringBuilder.buildAttributedString(for: lastMessage)
} }
}
let fullRoom = room.fullRoom() let fullRoom = room.fullRoom()
let avatarURL = fullRoom?.avatarUrl().flatMap(URL.init(string:)) let avatarURL = fullRoom?.avatarUrl().flatMap(URL.init(string:))