From 8952cbfd20eec6cccdc2c76c1b274464bd2aff7b Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Sun, 21 Aug 2022 12:36:29 -0400 Subject: [PATCH] Start of refactor --- ios/App/Shared/player/AudioPlayer.swift | 18 ++++++++++++++++++ ios/App/Shared/player/PlayerHandler.swift | 11 ++++------- ios/App/Shared/player/PlayerProgress.swift | 8 +++++++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ios/App/Shared/player/AudioPlayer.swift b/ios/App/Shared/player/AudioPlayer.swift index 5c8db6a1..cb3bb1cf 100644 --- a/ios/App/Shared/player/AudioPlayer.swift +++ b/ios/App/Shared/player/AudioPlayer.swift @@ -34,6 +34,7 @@ class AudioPlayer: NSObject { private var audioPlayer: AVQueuePlayer private var sessionId: String + private var timeObserverToken: Any? private var queueObserver:NSKeyValueObservation? private var queueItemStatusObserver:NSKeyValueObservation? @@ -77,12 +78,14 @@ class AudioPlayer: NSObject { self.audioPlayer.insert(item, after:self.audioPlayer.items().last) } + setupTimeObserver() setupQueueObserver() setupQueueItemStatusObserver() NSLog("Audioplayer ready") } deinit { + self.removeTimeObserver() self.queueObserver?.invalidate() self.queueItemStatusObserver?.invalidate() destroy() @@ -124,6 +127,21 @@ class AudioPlayer: NSObject { return 0 } + private func setupTimeObserver() { + let timeScale = CMTimeScale(NSEC_PER_SEC) + let time = CMTime(seconds: 1, preferredTimescale: timeScale) + self.timeObserverToken = self.audioPlayer.addPeriodicTimeObserver(forInterval: time, queue: .main) { [weak self] currentTime in + NSLog("currentTime: \(currentTime)") + } + } + + private func removeTimeObserver() { + if let timeObserverToken = timeObserverToken { + self.audioPlayer.removeTimeObserver(timeObserverToken) + self.timeObserverToken = nil + } + } + func setupQueueObserver() { self.queueObserver = self.audioPlayer.observe(\.currentItem, options: [.new]) {_,_ in let prevTrackIndex = self.currentTrackIndex diff --git a/ios/App/Shared/player/PlayerHandler.swift b/ios/App/Shared/player/PlayerHandler.swift index 3d572932..c3b8efd2 100644 --- a/ios/App/Shared/player/PlayerHandler.swift +++ b/ios/App/Shared/player/PlayerHandler.swift @@ -141,23 +141,20 @@ class PlayerHandler { public static func getPlaybackSession() -> PlaybackSession? { guard let player = player else { return nil } + guard player.isInitialized() else { return nil } guard let session = Database.shared.getPlaybackSession(id: player.getPlaybackSessionId()) else { return nil } return session } public static func seekForward(amount: Double) { - guard let player = player else { - return - } + guard let player = player else { return } let destinationTime = player.getCurrentTime() + amount player.seek(destinationTime, from: "handler") } public static func seekBackward(amount: Double) { - guard let player = player else { - return - } + guard let player = player else { return } let destinationTime = player.getCurrentTime() - amount player.seek(destinationTime, from: "handler") @@ -240,7 +237,7 @@ class PlayerHandler { listeningTimePassedSinceLastSync = 0 // Persist items in the database and sync to the server - if session.isLocal { PlayerProgress.shared.syncFromPlayer() } + if session.isLocal { Task { await PlayerProgress.shared.syncFromPlayer() } } Task { await PlayerProgress.shared.syncToServer() } } diff --git a/ios/App/Shared/player/PlayerProgress.swift b/ios/App/Shared/player/PlayerProgress.swift index 1576c24a..47251dee 100644 --- a/ios/App/Shared/player/PlayerProgress.swift +++ b/ios/App/Shared/player/PlayerProgress.swift @@ -15,8 +15,10 @@ class PlayerProgress { private init() {} - public func syncFromPlayer() { + public func syncFromPlayer() async { + let backgroundToken = await UIApplication.shared.beginBackgroundTask(withName: "ABS:syncFromPlayer") updateLocalMediaProgressFromLocalSession() + await UIApplication.shared.endBackgroundTask(backgroundToken) } public func syncToServer() async { @@ -31,6 +33,10 @@ class PlayerProgress { await UIApplication.shared.endBackgroundTask(backgroundToken) } + private func updateLocalSessionFromPlayer() async { + + } + private func updateLocalMediaProgressFromLocalSession() { guard let session = PlayerHandler.getPlaybackSession() else { return } guard session.isLocal else { return }