mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-07-27 06:58:37 +02:00
Start of refactor
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() }
|
||||
}
|
||||
|
||||
|
||||
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user