| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import CoreData
- import SwiftUI
- extension OverrideProfilesConfig {
- final class StateModel: BaseStateModel<Provider> {
- @Published var percentage: Double = 100
- @Published var isEnabled = false
- @Published var _indefinite = true
- @Published var duration: Decimal = 0
- let coredataContext = CoreDataStack.shared.persistentContainer.viewContext
- func saveSettings() {
- coredataContext.perform {
- 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()
- try? self.coredataContext.save()
- }
- }
- func savedSettings() {
- coredataContext.performAndWait {
- var overrideArray = [Override]()
- let requestEnabled = Override.fetchRequest() as NSFetchRequest<Override>
- 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
- 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 newDuration < 0 { newDuration = 0 } else { duration = Decimal(newDuration) }
- if !isEnabled {
- _indefinite = true
- percentage = 100
- duration = 0
- }
- }
- }
- }
- }
|