From f0b877570117f7461b4da6f5ff765542dfb32bd3 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Tue, 4 Feb 2025 09:04:24 +0200 Subject: [PATCH] Add back verbose logging for the timeline provider to help debug the event cache and lazy loading. --- .../Services/Timeline/TimelineProvider.swift | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/ElementX/Sources/Services/Timeline/TimelineProvider.swift b/ElementX/Sources/Services/Timeline/TimelineProvider.swift index 607296f1aa..41f532f1af 100644 --- a/ElementX/Sources/Services/Timeline/TimelineProvider.swift +++ b/ElementX/Sources/Services/Timeline/TimelineProvider.swift @@ -85,6 +85,8 @@ class TimelineProvider: TimelineProviderProtocol { span.exit() } + MXLog.verbose("Received diffs: \(diffs)") + itemProxies = diffs.reduce(itemProxies) { currentItems, diff in guard let collectionDiff = buildDiff(from: diff, on: currentItems) else { MXLog.error("Failed building CollectionDifference from \(diff)") @@ -222,3 +224,53 @@ private final class RoomTimelineListener: TimelineListener { onUpdateClosure(diff) } } + +private extension Array where Element == TimelineDiff { + var debugDescription: String { + "[" + map(\.debugDescription).joined(separator: ",") + "]" + } +} + +extension TimelineDiff: @retroactive CustomDebugStringConvertible { + public var debugDescription: String { + switch change() { + case .append: + guard let update = append() else { + fatalError() + } + return "Append(\(update.count))" + case .clear: + return "Clear" + case .insert: + return "Insert" + case .set: + guard let update = set() else { + fatalError() + } + return "Set(\(update.index))" + case .remove: + guard let update = remove() else { + fatalError() + } + return "Remove(\(update)" + case .pushBack: + return "PushBack" + case .pushFront: + return "PushFront" + case .popBack: + return "PopBack" + case .popFront: + return "PopFront" + case .truncate: + guard let update = truncate() else { + fatalError() + } + return "Truncate(\(update))" + case .reset: + guard let update = reset() else { + fatalError() + } + return "Reset(\(update.count)@\(update.startIndex)-\(update.endIndex))" + } + } +}