mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-04 18:15:01 +02:00
update: increase update intervals
This commit is contained in:
parent
a8c66ff808
commit
20085c5eed
3 changed files with 37 additions and 11 deletions
|
@ -24,7 +24,7 @@ target 'Audiobookshelf' do
|
|||
capacitor_pods
|
||||
# Add your Pods here
|
||||
|
||||
pod 'RealmSwift', '~>10'
|
||||
pod 'RealmSwift', '~> 10'
|
||||
pod 'Alamofire', '~> 5.5'
|
||||
end
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ class AudioPlayer: NSObject {
|
|||
private var sessionId: String
|
||||
|
||||
private var timeObserverToken: Any?
|
||||
private var sleepTimerObserverToken: Any?
|
||||
private var queueObserver:NSKeyValueObservation?
|
||||
private var queueItemStatusObserver:NSKeyValueObservation?
|
||||
|
||||
|
@ -96,7 +97,7 @@ class AudioPlayer: NSObject {
|
|||
self.audioPlayer.insert(item, after:self.audioPlayer.items().last)
|
||||
}
|
||||
|
||||
setupTimeObserver()
|
||||
setupTimeObservers()
|
||||
setupQueueObserver()
|
||||
setupQueueItemStatusObserver()
|
||||
|
||||
|
@ -130,7 +131,7 @@ class AudioPlayer: NSObject {
|
|||
// Remove observers
|
||||
self.audioPlayer.removeObserver(self, forKeyPath: #keyPath(AVPlayer.rate), context: &playerContext)
|
||||
self.audioPlayer.removeObserver(self, forKeyPath: #keyPath(AVPlayer.currentItem), context: &playerContext)
|
||||
self.removeTimeObserver()
|
||||
self.removeTimeObservers()
|
||||
|
||||
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.closed.rawValue), object: nil)
|
||||
|
||||
|
@ -170,15 +171,15 @@ class AudioPlayer: NSObject {
|
|||
NotificationCenter.default.removeObserver(self, name: AVAudioSession.routeChangeNotification, object: AVAudioSession.sharedInstance())
|
||||
}
|
||||
|
||||
private func setupTimeObserver() {
|
||||
private func setupTimeObservers() {
|
||||
// Time observer should be configured on the main queue
|
||||
DispatchQueue.runOnMainQueue {
|
||||
self.removeTimeObserver()
|
||||
self.removeTimeObservers()
|
||||
|
||||
let timeScale = CMTimeScale(NSEC_PER_SEC)
|
||||
// Rate will be different depending on playback speed, aim for 2 observations/sec
|
||||
let seconds = 0.5 * (self.rate > 0 ? self.rate : 1.0)
|
||||
let time = CMTime(seconds: Double(seconds), preferredTimescale: timeScale)
|
||||
// Save the current time every 15 seconds
|
||||
var seconds = 15.0
|
||||
var time = CMTime(seconds: Double(seconds), preferredTimescale: timeScale)
|
||||
self.timeObserverToken = self.audioPlayer.addPeriodicTimeObserver(forInterval: time, queue: self.queue) { [weak self] time in
|
||||
guard let self = self else { return }
|
||||
guard self.isInitialized() else { return }
|
||||
|
@ -190,7 +191,12 @@ class AudioPlayer: NSObject {
|
|||
// Let the player update the current playback positions
|
||||
await PlayerProgress.shared.syncFromPlayer(currentTime: currentTime, includesPlayProgress: isPlaying, isStopping: false)
|
||||
}
|
||||
|
||||
}
|
||||
// Update the sleep timer every second
|
||||
seconds = 1.0
|
||||
time = CMTime(seconds: Double(seconds), preferredTimescale: timeScale)
|
||||
self.sleepTimerObserverToken = self.audioPlayer.addPeriodicTimeObserver(forInterval: time, queue: self.queue) { [weak self] time in
|
||||
guard let self = self else { return }
|
||||
if self.isSleepTimerSet() {
|
||||
// Update the UI
|
||||
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.sleepSet.rawValue), object: nil)
|
||||
|
@ -199,11 +205,15 @@ class AudioPlayer: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
private func removeTimeObserver() {
|
||||
private func removeTimeObservers() {
|
||||
if let timeObserverToken = timeObserverToken {
|
||||
self.audioPlayer.removeTimeObserver(timeObserverToken)
|
||||
self.timeObserverToken = nil
|
||||
}
|
||||
if let sleepTimerObserverToken = sleepTimerObserverToken {
|
||||
self.audioPlayer.removeTimeObserver(sleepTimerObserverToken)
|
||||
self.sleepTimerObserverToken = nil
|
||||
}
|
||||
}
|
||||
|
||||
private func setupQueueObserver() {
|
||||
|
@ -426,7 +436,7 @@ class AudioPlayer: NSObject {
|
|||
self.tmpRate = rate
|
||||
|
||||
// Setup the time observer again at the new rate
|
||||
self.setupTimeObserver()
|
||||
self.setupTimeObservers()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -243,12 +243,28 @@ class ApiClient {
|
|||
callback(obj)
|
||||
}
|
||||
}
|
||||
public static func pingServer() async -> Bool {
|
||||
var status = true
|
||||
AF.request("\(Store.serverConfig!.address)/ping", method: .get).responseDecodable(of: PingResponsePayload.self) { response in
|
||||
switch response.result {
|
||||
case .success:
|
||||
status = true
|
||||
case .failure:
|
||||
status = false
|
||||
}
|
||||
}
|
||||
return status
|
||||
}
|
||||
}
|
||||
|
||||
struct LocalMediaProgressSyncPayload: Codable {
|
||||
var localMediaProgress: [LocalMediaProgress]
|
||||
}
|
||||
|
||||
struct PingResponsePayload: Codable {
|
||||
var success: Bool
|
||||
}
|
||||
|
||||
struct MediaProgressSyncResponsePayload: Decodable {
|
||||
var numServerProgressUpdates: Int?
|
||||
var localProgressUpdates: [LocalMediaProgress]?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue