From 37d932a0e9611c2cd97b1032ea987ad352f7c8e7 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 25 Oct 2023 18:20:58 +0400 Subject: [PATCH] Fix story layout loop crash --- .../Sources/StoryContent.swift | 2 +- .../Sources/StoryItemContentComponent.swift | 18 ++++++++++-------- .../StoryItemSetContainerComponent.swift | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContent.swift index 7956cd8b7d..93cadce409 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryContent.swift @@ -43,7 +43,7 @@ public final class StoryContentItem: Equatable { } open class View: UIView { - open func setProgressMode(_ progressMode: ProgressMode) { + open func setProgressMode(_ progressMode: ProgressMode, emitEvents: Bool) { } open func rewind() { diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemContentComponent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemContentComponent.swift index 33a5a51fc0..21829895a9 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemContentComponent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemContentComponent.swift @@ -278,17 +278,17 @@ final class StoryItemContentComponent: Component { self.videoPlaybackStatus = status if !self.isSeeking { - self.updateVideoPlaybackProgress() + self.updateVideoPlaybackProgress(emitUpdate: true) } }) } } } - override func setProgressMode(_ progressMode: StoryContentItem.ProgressMode) { + override func setProgressMode(_ progressMode: StoryContentItem.ProgressMode, emitEvents: Bool) { if self.progressMode != progressMode { self.progressMode = progressMode - self.updateProgressMode(update: true) + self.updateProgressMode(update: emitEvents) if let component = self.component, !self.overlaysView.bounds.isEmpty { self.updateOverlays(component: component, size: self.overlaysView.bounds.size, synchronousLoad: false, transition: .immediate) @@ -336,7 +336,7 @@ final class StoryItemContentComponent: Component { } self.initializeVideoIfReady(update: update) - self.updateVideoPlaybackProgress() + self.updateVideoPlaybackProgress(emitUpdate: update) self.updateProgressTimer() } @@ -363,7 +363,7 @@ final class StoryItemContentComponent: Component { if case .file = self.currentMessageMedia { if !self.isSeeking { - self.updateVideoPlaybackProgress() + self.updateVideoPlaybackProgress(emitUpdate: true) } } else { if !self.markedAsSeen { @@ -420,7 +420,7 @@ final class StoryItemContentComponent: Component { return effectiveDuration } - private func updateVideoPlaybackProgress(_ scrubbingTimestamp: Double? = nil) { + private func updateVideoPlaybackProgress(_ scrubbingTimestamp: Double? = nil, emitUpdate: Bool) { guard let videoPlaybackStatus = self.videoPlaybackStatus else { return } @@ -509,7 +509,9 @@ final class StoryItemContentComponent: Component { } let clippedProgress = max(0.0, min(1.0, currentProgress)) - self.environment?.presentationProgressUpdated(clippedProgress, isBuffering, false) + if emitUpdate { + self.environment?.presentationProgressUpdated(clippedProgress, isBuffering, false) + } } override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { @@ -549,7 +551,7 @@ final class StoryItemContentComponent: Component { videoNode.seek(timestamp) } self.isSeeking = true - self.updateVideoPlaybackProgress(timestamp) + self.updateVideoPlaybackProgress(timestamp, emitUpdate: true) } func seekEnded() { diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift index ae22b144ec..ab9889591b 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift @@ -1641,7 +1641,7 @@ public final class StoryItemSetContainerComponent: Component { } if let view = view as? StoryContentItem.View { - view.setProgressMode(itemProgressMode) + view.setProgressMode(itemProgressMode, emitEvents: false) } var isChannel = false @@ -1871,7 +1871,7 @@ public final class StoryItemSetContainerComponent: Component { if id != centralId { itemMode = .pause } - view.setProgressMode(itemMode) + view.setProgressMode(itemMode, emitEvents: true) } } }