omnivore/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift

53 lines
1.7 KiB
Swift
Raw Normal View History

2022-03-30 23:39:51 +00:00
import Combine
import CoreData
2022-02-11 17:24:33 +00:00
import Foundation
import Models
2022-04-18 20:44:52 +00:00
import OSLog
2022-02-11 17:24:33 +00:00
let logger = Logger(subsystem: "app.omnivore", category: "data-service")
public final class DataService: ObservableObject {
2022-02-11 17:24:33 +00:00
public static var registerIntercomUser: ((String) -> Void)?
public static var showIntercomMessenger: (() -> Void)?
public let appEnvironment: AppEnvironment
let networker: Networker
2022-04-15 01:17:12 +00:00
let persistentContainer: PersistentContainer
let backgroundContext: NSManagedObjectContext
2022-03-30 23:39:51 +00:00
var subscriptions = Set<AnyCancellable>()
2022-04-22 03:27:10 +00:00
public var viewContext: NSManagedObjectContext {
persistentContainer.viewContext
}
2022-02-11 17:24:33 +00:00
public init(appEnvironment: AppEnvironment, networker: Networker) {
self.appEnvironment = appEnvironment
self.networker = networker
self.persistentContainer = PersistentContainer.make()
self.backgroundContext = persistentContainer.newBackgroundContext()
backgroundContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
2022-04-15 01:17:12 +00:00
persistentContainer.loadPersistentStores { _, error in
if let error = error {
fatalError("Core Data store failed to load with error: \(error)")
}
}
2022-03-30 23:39:51 +00:00
}
2022-04-18 20:44:52 +00:00
public var currentViewer: Viewer? {
let fetchRequest: NSFetchRequest<Models.Viewer> = Viewer.fetchRequest()
fetchRequest.fetchLimit = 1 // we should only have one viewer saved
2022-04-18 20:44:52 +00:00
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)")
}
}
}