Fix crashes related to Realm threading

This commit is contained in:
ronaldheft
2022-08-16 12:32:22 -04:00
parent 8ce0d9ce56
commit b0905d0270
8 changed files with 236 additions and 75 deletions
@@ -0,0 +1,41 @@
//
// ActivePlaybackSession.swift
// App
//
// Created by Ron Heft on 8/16/22.
//
import Foundation
import RealmSwift
class ActivePlaybackSession {
static let shared = ActivePlaybackSession()
private let queue = DispatchQueue(label: "ABSActivePlaybackSession")
private var _session: PlaybackSession?
private init() {
// Singleton
}
func startSession(_ session: ThreadSafeReference<PlaybackSession>) {
queue.sync {
_session = try? Realm().resolve(session)
}
}
// This is a funky method, but it ensures the accessing thread gets a live reference to session properly resolved
func get() -> PlaybackSession? {
var activeSession: ThreadSafeReference<PlaybackSession>?
queue.sync {
let realm = try! Realm()
guard let session = _session else { return }
r
activeSession = ThreadSafeReference(to: session)
}
guard let activeSession = activeSession else { return nil }
return try? Realm().resolve(activeSession)
}
}