Fix story layout loop crash

This commit is contained in:
Ali 2023-10-25 18:20:58 +04:00
parent 6f85bca2d1
commit 37d932a0e9
3 changed files with 13 additions and 11 deletions

View File

@ -43,7 +43,7 @@ public final class StoryContentItem: Equatable {
} }
open class View: UIView { open class View: UIView {
open func setProgressMode(_ progressMode: ProgressMode) { open func setProgressMode(_ progressMode: ProgressMode, emitEvents: Bool) {
} }
open func rewind() { open func rewind() {

View File

@ -278,17 +278,17 @@ final class StoryItemContentComponent: Component {
self.videoPlaybackStatus = status self.videoPlaybackStatus = status
if !self.isSeeking { 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 { if self.progressMode != progressMode {
self.progressMode = progressMode self.progressMode = progressMode
self.updateProgressMode(update: true) self.updateProgressMode(update: emitEvents)
if let component = self.component, !self.overlaysView.bounds.isEmpty { if let component = self.component, !self.overlaysView.bounds.isEmpty {
self.updateOverlays(component: component, size: self.overlaysView.bounds.size, synchronousLoad: false, transition: .immediate) 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.initializeVideoIfReady(update: update)
self.updateVideoPlaybackProgress() self.updateVideoPlaybackProgress(emitUpdate: update)
self.updateProgressTimer() self.updateProgressTimer()
} }
@ -363,7 +363,7 @@ final class StoryItemContentComponent: Component {
if case .file = self.currentMessageMedia { if case .file = self.currentMessageMedia {
if !self.isSeeking { if !self.isSeeking {
self.updateVideoPlaybackProgress() self.updateVideoPlaybackProgress(emitUpdate: true)
} }
} else { } else {
if !self.markedAsSeen { if !self.markedAsSeen {
@ -420,7 +420,7 @@ final class StoryItemContentComponent: Component {
return effectiveDuration return effectiveDuration
} }
private func updateVideoPlaybackProgress(_ scrubbingTimestamp: Double? = nil) { private func updateVideoPlaybackProgress(_ scrubbingTimestamp: Double? = nil, emitUpdate: Bool) {
guard let videoPlaybackStatus = self.videoPlaybackStatus else { guard let videoPlaybackStatus = self.videoPlaybackStatus else {
return return
} }
@ -509,7 +509,9 @@ final class StoryItemContentComponent: Component {
} }
let clippedProgress = max(0.0, min(1.0, currentProgress)) 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? { override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
@ -549,7 +551,7 @@ final class StoryItemContentComponent: Component {
videoNode.seek(timestamp) videoNode.seek(timestamp)
} }
self.isSeeking = true self.isSeeking = true
self.updateVideoPlaybackProgress(timestamp) self.updateVideoPlaybackProgress(timestamp, emitUpdate: true)
} }
func seekEnded() { func seekEnded() {

View File

@ -1641,7 +1641,7 @@ public final class StoryItemSetContainerComponent: Component {
} }
if let view = view as? StoryContentItem.View { if let view = view as? StoryContentItem.View {
view.setProgressMode(itemProgressMode) view.setProgressMode(itemProgressMode, emitEvents: false)
} }
var isChannel = false var isChannel = false
@ -1871,7 +1871,7 @@ public final class StoryItemSetContainerComponent: Component {
if id != centralId { if id != centralId {
itemMode = .pause itemMode = .pause
} }
view.setProgressMode(itemMode) view.setProgressMode(itemMode, emitEvents: true)
} }
} }
} }