AutosensSettingsStateModel.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import CoreData
  2. import Observation
  3. import SwiftUI
  4. extension AutosensSettings {
  5. final class StateModel: BaseStateModel<Provider> {
  6. @Injected() var settings: SettingsManager!
  7. @Injected() var storage: FileStorage!
  8. @Injected() var determinationStorage: DeterminationStorage!
  9. var units: GlucoseUnits = .mgdL
  10. private(set) var autosensISF: Decimal?
  11. private(set) var autosensRatio: Decimal = 0
  12. @Published var determinationsFromPersistence: [OrefDetermination] = []
  13. let viewContext = CoreDataStack.shared.persistentContainer.viewContext
  14. @Published var autosensMax: Decimal = 1.2
  15. @Published var autosensMin: Decimal = 0.7
  16. @Published var rewindResetsAutosens: Bool = true
  17. var preferences: Preferences {
  18. settingsManager.preferences
  19. }
  20. override func subscribe() {
  21. units = settingsManager.settings.units
  22. subscribePreferencesSetting(\.autosensMax, on: $autosensMax) { autosensMax = $0 }
  23. subscribePreferencesSetting(\.autosensMin, on: $autosensMin) { autosensMin = $0 }
  24. subscribePreferencesSetting(\.rewindResetsAutosens, on: $rewindResetsAutosens) { rewindResetsAutosens = $0 }
  25. if let newISF = provider.autosense.newisf {
  26. autosensISF = newISF
  27. }
  28. autosensRatio = provider.autosense.ratio
  29. setupDeterminationsArray()
  30. }
  31. private func setupDeterminationsArray() {
  32. Task {
  33. let ids = await determinationStorage.fetchLastDeterminationObjectID(
  34. predicate: NSPredicate.enactedDetermination
  35. )
  36. await updateDeterminationsArray(with: ids)
  37. }
  38. }
  39. @MainActor private func updateDeterminationsArray(with IDs: [NSManagedObjectID]) {
  40. do {
  41. let objects = try IDs.compactMap { id in
  42. try viewContext.existingObject(with: id) as? OrefDetermination
  43. }
  44. determinationsFromPersistence = objects
  45. } catch {
  46. debugPrint(
  47. "Home State: \(#function) \(DebuggingIdentifiers.failed) error while updating the glucose array: \(error.localizedDescription)"
  48. )
  49. }
  50. }
  51. }
  52. }
  53. extension AutosensSettings.StateModel: SettingsObserver {
  54. func settingsDidChange(_: FreeAPSSettings) {
  55. units = settingsManager.settings.units
  56. }
  57. }