Restore playback session on startup

This commit is contained in:
ronaldheft 2022-08-18 16:20:28 -04:00
parent 1746ed6469
commit 519969eee0
2 changed files with 24 additions and 6 deletions

View file

@ -24,10 +24,29 @@ public class AbsAudioPlayer: CAPPlugin {
NotificationCenter.default.addObserver(self, selector: #selector(onPlaybackFailed), name: NSNotification.Name(PlayerEvents.failed.rawValue), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(onLocalMediaProgressUpdate), name: NSNotification.Name(PlayerEvents.localProgress.rawValue), object: nil)
// Restore the playack session when plugin loads
Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(restorePlaybackSession), userInfo: nil, repeats: false)
self.bridge?.webView?.allowsBackForwardNavigationGestures = true;
}
@objc func restorePlaybackSession() {
// We don't need to restore if we have an active session
guard PlayerHandler.getPlaybackSession() == nil else { return }
do {
// Fetch the most recent active session
let activeSession = try Realm().objects(PlaybackSession.self).where({ $0.isActiveSession == true }).last
if let activeSession = activeSession {
try self.startPlaybackSession(activeSession, playWhenReady: false)
}
} catch {
NSLog("Failed to restore playback session")
debugPrint(error)
}
}
@objc func startPlaybackSession(_ session: PlaybackSession, playWhenReady: Bool, playbackRate: Float = 1.0) throws {
guard let libraryItemId = session.libraryItemId else { throw PlayerError.libraryItemIdNotSpecified }

View file

@ -69,12 +69,11 @@ class PlayerHandler {
}
private static func cleanupOldSessions(currentSessionId: String?) {
if let currentSessionId = currentSessionId {
let realm = try! Realm()
let oldSessions = realm.objects(PlaybackSession.self)
.where({ $0.isActiveSession == true && $0.id != currentSessionId })
try! realm.write {
for s in oldSessions {
let realm = try! Realm()
let oldSessions = realm.objects(PlaybackSession.self) .where({ $0.isActiveSession == true })
try! realm.write {
for s in oldSessions {
if s.id != currentSessionId {
s.isActiveSession = false
}
}