import CoreData import SwiftUI extension OverrideProfilesConfig { final class StateModel: BaseStateModel { @Published var percentage: Double = 100 @Published var isEnabled = false @Published var _indefinite = true @Published var duration: Decimal = 0 @Published var target: Decimal = 0 @Published var override_target: Bool = false var units: GlucoseUnits = .mmolL override func subscribe() { let units = settingsManager.settings.units self.units = units } let coredataContext = CoreDataStack.shared.persistentContainer.viewContext func saveSettings() { coredataContext.perform { [self] in let saveOverride = Override(context: self.coredataContext) saveOverride.duration = self.duration as NSDecimalNumber saveOverride.indefinite = self._indefinite saveOverride.percentage = self.percentage saveOverride.enabled = self.isEnabled saveOverride.date = Date() saveOverride.target = units == .mmolL ? target.asMgdL as NSDecimalNumber : target as NSDecimalNumber try? self.coredataContext.save() } } func savedSettings() { coredataContext.performAndWait { var overrideArray = [Override]() let requestEnabled = Override.fetchRequest() as NSFetchRequest let sortIsEnabled = NSSortDescriptor(key: "date", ascending: false) requestEnabled.sortDescriptors = [sortIsEnabled] requestEnabled.fetchLimit = 1 try? overrideArray = coredataContext.fetch(requestEnabled) isEnabled = overrideArray.first?.enabled ?? false percentage = overrideArray.first?.percentage ?? 100 _indefinite = overrideArray.first?.indefinite ?? true duration = (overrideArray.first?.duration ?? 0) as Decimal let overrideTarget = (overrideArray.first?.target ?? 0) as Decimal var newDuration = Double(duration) if isEnabled { let duration = overrideArray.first?.duration ?? 0 let addedMinutes = Int(duration as Decimal) let date = overrideArray.first?.date ?? Date() if date.addingTimeInterval(addedMinutes.minutes.timeInterval) < Date(), !_indefinite { isEnabled = false } newDuration = Date().distance(to: date.addingTimeInterval(addedMinutes.minutes.timeInterval)).minutes if (overrideArray.first?.target ?? 0) != 0 { override_target = true target = units == .mgdL ? overrideTarget : overrideTarget.asMmolL } } if newDuration < 0 { newDuration = 0 } else { duration = Decimal(newDuration) } if !isEnabled { _indefinite = true percentage = 100 duration = 0 target = 0 override_target = false } } } } }