mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
52 lines
1.7 KiB
Swift
52 lines
1.7 KiB
Swift
import Combine
|
|
import CoreData
|
|
import Foundation
|
|
import Models
|
|
import OSLog
|
|
|
|
let logger = Logger(subsystem: "app.omnivore", category: "data-service")
|
|
|
|
public final class DataService: ObservableObject {
|
|
public static var registerIntercomUser: ((String) -> Void)?
|
|
public static var showIntercomMessenger: (() -> Void)?
|
|
|
|
public let appEnvironment: AppEnvironment
|
|
let networker: Networker
|
|
|
|
let persistentContainer: PersistentContainer
|
|
let backgroundContext: NSManagedObjectContext
|
|
var subscriptions = Set<AnyCancellable>()
|
|
|
|
public var viewContext: NSManagedObjectContext {
|
|
persistentContainer.viewContext
|
|
}
|
|
|
|
public init(appEnvironment: AppEnvironment, networker: Networker) {
|
|
self.appEnvironment = appEnvironment
|
|
self.networker = networker
|
|
self.persistentContainer = PersistentContainer.make()
|
|
self.backgroundContext = persistentContainer.newBackgroundContext()
|
|
backgroundContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
|
|
|
|
persistentContainer.loadPersistentStores { _, error in
|
|
if let error = error {
|
|
fatalError("Core Data store failed to load with error: \(error)")
|
|
}
|
|
}
|
|
}
|
|
|
|
public var currentViewer: Viewer? {
|
|
let fetchRequest: NSFetchRequest<Models.Viewer> = Viewer.fetchRequest()
|
|
fetchRequest.fetchLimit = 1 // we should only have one viewer saved
|
|
return try? persistentContainer.viewContext.fetch(fetchRequest).first
|
|
}
|
|
|
|
public func switchAppEnvironment(appEnvironment: AppEnvironment) {
|
|
do {
|
|
try ValetKey.appEnvironmentString.setValue(appEnvironment.rawValue)
|
|
fatalError("App environment changed -- restarting app")
|
|
} catch {
|
|
fatalError("Unable to write to Keychain: \(error)")
|
|
}
|
|
}
|
|
}
|