From 25d5a70b0040b1ecbe82a3a9fee1db60ffb261f0 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 4 Feb 2026 14:51:36 +0200 Subject: [PATCH] Try to prevent timelineProvider timing crashes on update listeners. --- .../TimelineController/TimelineController.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ElementX/Sources/Services/Timeline/TimelineController/TimelineController.swift b/ElementX/Sources/Services/Timeline/TimelineController/TimelineController.swift index 2aab0096a..7f3f74d3e 100644 --- a/ElementX/Sources/Services/Timeline/TimelineController/TimelineController.swift +++ b/ElementX/Sources/Services/Timeline/TimelineController/TimelineController.swift @@ -399,12 +399,16 @@ class TimelineController: TimelineControllerProtocol { paginationState = TimelinePaginationState(backward: .paginating, forward: .paginating) callbacks.send(.isLive(activeTimelineItemProvider.kind == .live)) - updateTimelineItemsCancellable = Task { [weak self, activeTimelineItemProvider] in - let contentSizeChangePublisher = NotificationCenter.default.publisher(for: UIContentSizeCategory.didChangeNotification) - let timelineUpdates = activeTimelineItemProvider.updatePublisher.merge(with: contentSizeChangePublisher.map { _ in - (activeTimelineItemProvider.itemProxies, activeTimelineItemProvider.paginationState) - }) + let contentSizeChangePublisher = NotificationCenter.default.publisher(for: UIContentSizeCategory.didChangeNotification) + let timelineUpdates = activeTimelineItemProvider.updatePublisher.merge(with: contentSizeChangePublisher.compactMap { [weak self] _ in + guard let activeTimelineProvider = self?.activeTimelineItemProvider else { + return nil + } + return (activeTimelineProvider.itemProxies, activeTimelineProvider.paginationState) + }) + + updateTimelineItemsCancellable = Task { [weak self] in for await (items, paginationState) in timelineUpdates.values { await self?.updateTimelineItems(itemProxies: items, paginationState: paginationState) }