mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-31 23:20:35 +02:00
Update:iOS remove paused timer that synced with the server when current media was paused
This commit is contained in:
parent
ad5146e2ee
commit
a7cbdbfbbb
3 changed files with 5 additions and 36 deletions
|
@ -56,8 +56,6 @@ class AudioPlayer: NSObject {
|
||||||
internal var currentTrackIndex = 0
|
internal var currentTrackIndex = 0
|
||||||
private var allPlayerItems:[AVPlayerItem] = []
|
private var allPlayerItems:[AVPlayerItem] = []
|
||||||
|
|
||||||
private var pausedTimer: Timer?
|
|
||||||
|
|
||||||
// MARK: - Constructor
|
// MARK: - Constructor
|
||||||
init(sessionId: String, playWhenReady: Bool = false, playbackRate: Float = 1) {
|
init(sessionId: String, playWhenReady: Bool = false, playbackRate: Float = 1) {
|
||||||
self.playWhenReady = playWhenReady
|
self.playWhenReady = playWhenReady
|
||||||
|
@ -159,7 +157,6 @@ class AudioPlayer: NSObject {
|
||||||
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.closed.rawValue), object: nil)
|
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.closed.rawValue), object: nil)
|
||||||
|
|
||||||
// Remove timers
|
// Remove timers
|
||||||
self.stopPausedTimer()
|
|
||||||
self.removeSleepTimer()
|
self.removeSleepTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,21 +298,6 @@ class AudioPlayer: NSObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func startPausedTimer() {
|
|
||||||
guard self.pausedTimer == nil else { return }
|
|
||||||
self.queue.async {
|
|
||||||
self.pausedTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { [weak self] timer in
|
|
||||||
self?.logger.log("PAUSE TIMER: Syncing from server")
|
|
||||||
Task { await PlayerProgress.shared.syncFromServer() }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func stopPausedTimer() {
|
|
||||||
self.pausedTimer?.invalidate()
|
|
||||||
self.pausedTimer = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Methods
|
// MARK: - Methods
|
||||||
public func play(allowSeekBack: Bool = false, isInitializing: Bool = false) {
|
public func play(allowSeekBack: Bool = false, isInitializing: Bool = false) {
|
||||||
guard self.isInitialized() || isInitializing else { return }
|
guard self.isInitialized() || isInitializing else { return }
|
||||||
|
@ -345,9 +327,6 @@ class AudioPlayer: NSObject {
|
||||||
private func resumePlayback() {
|
private func resumePlayback() {
|
||||||
logger.log("PLAY: Resuming playback")
|
logger.log("PLAY: Resuming playback")
|
||||||
|
|
||||||
// Stop the paused timer
|
|
||||||
self.stopPausedTimer()
|
|
||||||
|
|
||||||
self.markAudioSessionAs(active: true)
|
self.markAudioSessionAs(active: true)
|
||||||
DispatchQueue.runOnMainQueue {
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.play()
|
self.audioPlayer.play()
|
||||||
|
@ -380,8 +359,6 @@ class AudioPlayer: NSObject {
|
||||||
|
|
||||||
self.status = .paused
|
self.status = .paused
|
||||||
updateNowPlaying()
|
updateNowPlaying()
|
||||||
|
|
||||||
self.startPausedTimer()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public func seek(_ to: Double, from: String) {
|
public func seek(_ to: Double, from: String) {
|
||||||
|
|
|
@ -36,17 +36,6 @@ class PlayerProgress {
|
||||||
await UIApplication.shared.endBackgroundTask(backgroundToken)
|
await UIApplication.shared.endBackgroundTask(backgroundToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func syncFromServer() async {
|
|
||||||
let backgroundToken = await UIApplication.shared.beginBackgroundTask(withName: "ABS:syncFromServer")
|
|
||||||
do {
|
|
||||||
try await updateLocalSessionFromServerMediaProgress()
|
|
||||||
} catch {
|
|
||||||
logger.error("Failed to syncFromServer")
|
|
||||||
logger.error(error)
|
|
||||||
}
|
|
||||||
await UIApplication.shared.endBackgroundTask(backgroundToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// MARK: - SYNC LOGIC
|
// MARK: - SYNC LOGIC
|
||||||
|
|
||||||
|
@ -164,6 +153,7 @@ class PlayerProgress {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Unused for now
|
||||||
private func updateLocalSessionFromServerMediaProgress() async throws {
|
private func updateLocalSessionFromServerMediaProgress() async throws {
|
||||||
logger.log("updateLocalSessionFromServerMediaProgress: Checking if local media progress was updated on server")
|
logger.log("updateLocalSessionFromServerMediaProgress: Checking if local media progress was updated on server")
|
||||||
guard let session = try Realm(queue: nil).objects(PlaybackSession.self).last(where: {
|
guard let session = try Realm(queue: nil).objects(PlaybackSession.self).last(where: {
|
||||||
|
|
|
@ -236,8 +236,10 @@ class ApiClient {
|
||||||
if (success) {
|
if (success) {
|
||||||
// Remove sessions from db
|
// Remove sessions from db
|
||||||
try playbackSessions.forEach { session in
|
try playbackSessions.forEach { session in
|
||||||
if let session = session.thaw() {
|
if (!session.isActiveSession) {
|
||||||
try session.delete()
|
if let session = session.thaw() {
|
||||||
|
try session.delete()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue