From f335d8735f79a4208687638e83c9d336271f725b Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Sun, 21 Aug 2022 10:59:43 -0400 Subject: [PATCH] Fix progress sync not updating playback object --- ios/App/App/plugins/AbsAudioPlayer.swift | 2 +- ios/App/Shared/player/PlayerProgress.swift | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ios/App/App/plugins/AbsAudioPlayer.swift b/ios/App/App/plugins/AbsAudioPlayer.swift index 32c989f3..34e00a77 100644 --- a/ios/App/App/plugins/AbsAudioPlayer.swift +++ b/ios/App/App/plugins/AbsAudioPlayer.swift @@ -38,7 +38,7 @@ public class AbsAudioPlayer: CAPPlugin { do { // Fetch the most recent active session - let activeSession = try await Realm().objects(PlaybackSession.self).where({ $0.isActiveSession == true }).last + let activeSession = try await Realm().objects(PlaybackSession.self).where({ $0.isActiveSession == true }).last?.freeze() if let activeSession = activeSession { await PlayerProgress.syncFromServer() try self.startPlaybackSession(activeSession, playWhenReady: false, playbackRate: PlayerSettings.main().playbackRate) diff --git a/ios/App/Shared/player/PlayerProgress.swift b/ios/App/Shared/player/PlayerProgress.swift index 0ee8961d..1b50f2a4 100644 --- a/ios/App/Shared/player/PlayerProgress.swift +++ b/ios/App/Shared/player/PlayerProgress.swift @@ -76,16 +76,25 @@ class PlayerProgress { } private static func updateLocalSessionFromServerMediaProgress() async { - NSLog("checkCurrentSessionProgress: Checking if local media progress was updated on server") - guard let session = PlayerHandler.getPlaybackSession()?.freeze() else { return } + NSLog("updateLocalSessionFromServerMediaProgress: Checking if local media progress was updated on server") + guard let session = try! await Realm().objects(PlaybackSession.self).last(where: { $0.isActiveSession == true })?.freeze() else { + NSLog("updateLocalSessionFromServerMediaProgress: Failed to get session") + return + } // Fetch the current progress let progress = await ApiClient.getMediaProgress(libraryItemId: session.libraryItemId!, episodeId: session.episodeId) - guard let progress = progress else { return } + guard let progress = progress else { + NSLog("updateLocalSessionFromServerMediaProgress: No progress object") + return + } // Determine which session is newer let serverLastUpdate = progress.lastUpdate - guard let localLastUpdate = session.updatedAt else { return } + guard let localLastUpdate = session.updatedAt else { + NSLog("updateLocalSessionFromServerMediaProgress: No local session updatedAt") + return + } let serverCurrentTime = progress.currentTime let localCurrentTime = session.currentTime @@ -94,12 +103,16 @@ class PlayerProgress { // Update the session, if needed if serverIsNewerThanLocal && currentTimeIsDifferent { + NSLog("updateLocalSessionFromServerMediaProgress: Server has newer time than local serverLastUpdate=\(serverLastUpdate) localLastUpdate=\(localLastUpdate)") guard let session = session.thaw() else { return } session.update { session.currentTime = serverCurrentTime session.updatedAt = serverLastUpdate } + NSLog("updateLocalSessionFromServerMediaProgress: Updated session currentTime newCurrentTime=\(serverCurrentTime) previousCurrentTime=\(localCurrentTime)") PlayerHandler.seek(amount: session.currentTime) + } else { + NSLog("updateLocalSessionFromServerMediaProgress: Local session does not need updating; local has latest progress") } }