Move the RoomSummaryProvider id based room updated to the same serial dispatch queue as the normal diffing. Cleanup logging and RoomTimelineProvider diffing

This commit is contained in:
Stefan Ceriu
2023-01-11 16:55:20 +02:00
committed by Stefan Ceriu
parent 3d06190b13
commit 95137c0f7a
2 changed files with 42 additions and 31 deletions
@@ -28,7 +28,6 @@ private class RoomTimelineListener: TimelineListener {
class RoomTimelineProvider: RoomTimelineProviderProtocol {
private let roomProxy: RoomProxyProtocol
private let serialDispatchQueue: DispatchQueue
private var cancellables = Set<AnyCancellable>()
let itemsPublisher = CurrentValueSubject<[TimelineItemProxy], Never>([])
@@ -41,7 +40,6 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
init(roomProxy: RoomProxyProtocol) {
self.roomProxy = roomProxy
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomtimelineprovider")
itemProxies = []
Task {
@@ -50,8 +48,7 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
roomTimelineListener
.itemsUpdatePublisher
.receive(on: DispatchQueue.main)
// .collect(.byTime(serialDispatchQueue, 0.25))
.sink { [weak self] in self?.updateItemsWithDiffs([$0]) }
.sink { [weak self] in self?.updateItemsWithDiff($0) }
.store(in: &cancellables)
switch await roomProxy.addTimelineListener(listener: roomTimelineListener) {
@@ -138,27 +135,24 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
// MARK: - Private
private func updateItemsWithDiffs(_ diffs: [TimelineDiff]) {
MXLog.verbose("Received timeline diffs")
private func updateItemsWithDiff(_ diff: TimelineDiff) {
MXLog.verbose("Received timeline diff")
itemProxies = diffs
.reduce(itemProxies) { currentItems, diff in
guard let collectionDiff = buildDiff(from: diff, on: currentItems) else {
MXLog.error("Failed building CollectionDifference from \(diff)")
return currentItems
}
guard let updatedItems = currentItems.applying(collectionDiff) else {
MXLog.error("Failed applying diff: \(collectionDiff)")
return currentItems
}
MXLog.verbose("Applied diff \(collectionDiff), new count: \(updatedItems.count)")
return updatedItems
}
guard let collectionDiff = buildDiff(from: diff, on: itemProxies) else {
MXLog.error("Failed building CollectionDifference from \(diff)")
return
}
MXLog.verbose("Finished applying diffs")
guard let updatedItems = itemProxies.applying(collectionDiff) else {
MXLog.error("Failed applying diff: \(collectionDiff)")
return
}
MXLog.verbose("Applied diff \(collectionDiff), new count: \(updatedItems.count)")
itemProxies = updatedItems
MXLog.verbose("Finished applying diff")
}
// swiftlint:disable:next cyclomatic_complexity function_body_length