Start of refactor

This commit is contained in:
ronaldheft
2022-08-21 12:36:29 -04:00
parent 27d2ed2304
commit 8952cbfd20
3 changed files with 29 additions and 8 deletions
+18
View File
@@ -34,6 +34,7 @@ class AudioPlayer: NSObject {
private var audioPlayer: AVQueuePlayer private var audioPlayer: AVQueuePlayer
private var sessionId: String private var sessionId: String
private var timeObserverToken: Any?
private var queueObserver:NSKeyValueObservation? private var queueObserver:NSKeyValueObservation?
private var queueItemStatusObserver:NSKeyValueObservation? private var queueItemStatusObserver:NSKeyValueObservation?
@@ -77,12 +78,14 @@ class AudioPlayer: NSObject {
self.audioPlayer.insert(item, after:self.audioPlayer.items().last) self.audioPlayer.insert(item, after:self.audioPlayer.items().last)
} }
setupTimeObserver()
setupQueueObserver() setupQueueObserver()
setupQueueItemStatusObserver() setupQueueItemStatusObserver()
NSLog("Audioplayer ready") NSLog("Audioplayer ready")
} }
deinit { deinit {
self.removeTimeObserver()
self.queueObserver?.invalidate() self.queueObserver?.invalidate()
self.queueItemStatusObserver?.invalidate() self.queueItemStatusObserver?.invalidate()
destroy() destroy()
@@ -124,6 +127,21 @@ class AudioPlayer: NSObject {
return 0 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() { func setupQueueObserver() {
self.queueObserver = self.audioPlayer.observe(\.currentItem, options: [.new]) {_,_ in self.queueObserver = self.audioPlayer.observe(\.currentItem, options: [.new]) {_,_ in
let prevTrackIndex = self.currentTrackIndex let prevTrackIndex = self.currentTrackIndex
+4 -7
View File
@@ -141,23 +141,20 @@ class PlayerHandler {
public static func getPlaybackSession() -> PlaybackSession? { public static func getPlaybackSession() -> PlaybackSession? {
guard let player = player else { return nil } 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 } guard let session = Database.shared.getPlaybackSession(id: player.getPlaybackSessionId()) else { return nil }
return session return session
} }
public static func seekForward(amount: Double) { public static func seekForward(amount: Double) {
guard let player = player else { guard let player = player else { return }
return
}
let destinationTime = player.getCurrentTime() + amount let destinationTime = player.getCurrentTime() + amount
player.seek(destinationTime, from: "handler") player.seek(destinationTime, from: "handler")
} }
public static func seekBackward(amount: Double) { public static func seekBackward(amount: Double) {
guard let player = player else { guard let player = player else { return }
return
}
let destinationTime = player.getCurrentTime() - amount let destinationTime = player.getCurrentTime() - amount
player.seek(destinationTime, from: "handler") player.seek(destinationTime, from: "handler")
@@ -240,7 +237,7 @@ class PlayerHandler {
listeningTimePassedSinceLastSync = 0 listeningTimePassedSinceLastSync = 0
// Persist items in the database and sync to the server // 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() } Task { await PlayerProgress.shared.syncToServer() }
} }
+7 -1
View File
@@ -15,8 +15,10 @@ class PlayerProgress {
private init() {} private init() {}
public func syncFromPlayer() { public func syncFromPlayer() async {
let backgroundToken = await UIApplication.shared.beginBackgroundTask(withName: "ABS:syncFromPlayer")
updateLocalMediaProgressFromLocalSession() updateLocalMediaProgressFromLocalSession()
await UIApplication.shared.endBackgroundTask(backgroundToken)
} }
public func syncToServer() async { public func syncToServer() async {
@@ -31,6 +33,10 @@ class PlayerProgress {
await UIApplication.shared.endBackgroundTask(backgroundToken) await UIApplication.shared.endBackgroundTask(backgroundToken)
} }
private func updateLocalSessionFromPlayer() async {
}
private func updateLocalMediaProgressFromLocalSession() { private func updateLocalMediaProgressFromLocalSession() {
guard let session = PlayerHandler.getPlaybackSession() else { return } guard let session = PlayerHandler.getPlaybackSession() else { return }
guard session.isLocal else { return } guard session.isLocal else { return }