DynamicSettingsStateModel.swift 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import Observation
  2. import SwiftUI
  3. extension DynamicSettings {
  4. @Observable final class StateModel: BaseStateModel<Provider> {
  5. @ObservationIgnored @Injected() var settings: SettingsManager!
  6. @ObservationIgnored @Injected() var storage: FileStorage!
  7. var useNewFormula: Bool = false
  8. var enableDynamicCR: Bool = false
  9. var sigmoid: Bool = false
  10. var adjustmentFactor: Decimal = 0.8
  11. var adjustmentFactorSigmoid: Decimal = 0.5
  12. var weightPercentage: Decimal = 0.65
  13. var tddAdjBasal: Bool = false
  14. var threshold_setting: Decimal = 60
  15. var units: GlucoseUnits = .mgdL
  16. var preferences: Preferences {
  17. settingsManager.preferences
  18. }
  19. override func subscribe() {
  20. units = settingsManager.settings.units
  21. useNewFormula = settings.preferences.useNewFormula
  22. enableDynamicCR = settings.preferences.enableDynamicCR
  23. sigmoid = settings.preferences.sigmoid
  24. adjustmentFactor = settings.preferences.adjustmentFactor
  25. adjustmentFactorSigmoid = settings.preferences.adjustmentFactorSigmoid
  26. weightPercentage = settings.preferences.weightPercentage
  27. tddAdjBasal = settings.preferences.tddAdjBasal
  28. threshold_setting = settings.preferences.threshold_setting
  29. }
  30. var unChanged: Bool {
  31. preferences.enableDynamicCR == enableDynamicCR &&
  32. preferences.adjustmentFactor == adjustmentFactor &&
  33. preferences.sigmoid == sigmoid &&
  34. preferences.adjustmentFactorSigmoid == adjustmentFactorSigmoid &&
  35. preferences.tddAdjBasal == tddAdjBasal &&
  36. preferences.threshold_setting == threshold_setting &&
  37. preferences.useNewFormula == useNewFormula &&
  38. preferences.weightPercentage == weightPercentage
  39. }
  40. func saveIfChanged() {
  41. if !unChanged {
  42. var newSettings = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self) ?? Preferences()
  43. newSettings.enableDynamicCR = enableDynamicCR
  44. newSettings.adjustmentFactor = adjustmentFactor
  45. newSettings.sigmoid = sigmoid
  46. newSettings.adjustmentFactorSigmoid = adjustmentFactorSigmoid
  47. newSettings.tddAdjBasal = tddAdjBasal
  48. newSettings.threshold_setting = threshold_setting
  49. newSettings.useNewFormula = useNewFormula
  50. newSettings.weightPercentage = weightPercentage
  51. newSettings.timestamp = Date()
  52. storage.save(newSettings, as: OpenAPS.Settings.preferences)
  53. }
  54. }
  55. }
  56. }
  57. extension DynamicSettings.StateModel: SettingsObserver {
  58. func settingsDidChange(_: FreeAPSSettings) {
  59. units = settingsManager.settings.units
  60. }
  61. }