From 7c37ee388bc6c6b30730ae71946722ce5d9c5eeb Mon Sep 17 00:00:00 2001 From: Robin Schmidt Date: Wed, 20 Nov 2019 15:07:51 +0100 Subject: [PATCH 1/2] fix: seek method did notify delegate to early When seeking the jukebox didn't wait for AVPlayer to finish seeking before notifying delegate. When delegate receives this message, progress is still on state before seeking. AVPlayer offers a method with completionBlock, which is called when seeking is finished. Using this completionBlock to notify the delegate resolves some issues with seeking. --- Source/Jukebox.swift | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Jukebox.swift b/Source/Jukebox.swift index b7d0200..03c44c9 100644 --- a/Source/Jukebox.swift +++ b/Source/Jukebox.swift @@ -136,15 +136,17 @@ extension Jukebox { public func seek(toSecond second: Int, shouldPlay: Bool = false) { guard let player = player, let item = currentItem else {return} - player.seek(to: CMTimeMake(Int64(second), 1)) - item.update() - if shouldPlay { - player.play() - if state != .playing { - state = .playing + player.seek(to: CMTimeMake(value: Int64(second), timescale: 1), completionHandler: { [weak self] finished in + guard finished, let `self` = self else { return } + item.update() + if shouldPlay { + player.play() + if state != .playing { + state = .playing + } } - } - delegate?.jukeboxPlaybackProgressDidChange(self) + self.delegate?.jukeboxPlaybackProgressDidChange(self) + }) } /** From 03866bc3fc8e293dec8442111892d3ffd522925c Mon Sep 17 00:00:00 2001 From: Robin Schmidt Date: Wed, 20 Nov 2019 15:16:40 +0100 Subject: [PATCH 2/2] fix: add missing self --- Source/Jukebox.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Jukebox.swift b/Source/Jukebox.swift index 03c44c9..026a75f 100644 --- a/Source/Jukebox.swift +++ b/Source/Jukebox.swift @@ -141,8 +141,8 @@ extension Jukebox { item.update() if shouldPlay { player.play() - if state != .playing { - state = .playing + if self.state != .playing { + self.state = .playing } } self.delegate?.jukeboxPlaybackProgressDidChange(self)