From 5addf9d64a7d67a4f73d3735243f98dba070983c Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 23 Aug 2023 19:34:36 +0300 Subject: [PATCH] Revert "Revert "Split incoming large .resets into a reset + append in order to quicker update the UI"" This reverts commit bde50f8d676253c84160e1a662f42539f242f38b. --- .../RoomSummary/RoomSummaryProvider.swift | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift index 12c31ea6b..de49a5c92 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift @@ -133,25 +133,36 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { MXLog.verbose("\(name): Received \(diffs.count) diffs, current room list \(rooms.compactMap { $0.id ?? "Empty" })") - rooms = diffs - .reduce(rooms) { currentItems, diff in - guard let collectionDiff = buildDiff(from: diff, on: currentItems) else { - MXLog.error("\(name): Failed building CollectionDifference from \(diff)") - return currentItems - } - - guard let updatedItems = currentItems.applying(collectionDiff) else { - MXLog.error("\(name): Failed applying diff: \(collectionDiff)") - return currentItems - } - - return updatedItems + for diff in diffs { + // Special case resets in order to prevent large updates from blocking the UI + // Render the first resetDiffChunkingThreshhold as a reset and then append the rest to give the UI time to update + let resetDiffChunkingThreshhold = 50 + if case .reset(let values) = diff, values.count > resetDiffChunkingThreshhold { + processDiff(RoomListEntriesUpdate.reset(values: Array(values[.. RoomInfo? { class FetchResult {