AlgorithmVariousStateModel.swift 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import SwiftUI
  2. extension AlgorithmVarious {
  3. final class StateModel: BaseStateModel<Provider> {
  4. @Injected() var settings: SettingsManager!
  5. @Injected() var storage: FileStorage!
  6. @Published var units: GlucoseUnits = .mgdL
  7. @Published var maxDailySafetyMultiplier: Decimal = 3
  8. @Published var currentBasalSafetyMultiplier: Decimal = 4
  9. @Published var useCustomPeakTime: Bool = false
  10. @Published var insulinPeakTime: Decimal = 75
  11. @Published var skipNeutralTemps: Bool = false
  12. @Published var unsuspendIfNoTemp: Bool = false
  13. @Published var suspendZerosIOB: Bool = false
  14. @Published var min5mCarbimpact: Decimal = 8
  15. @Published var autotuneISFAdjustmentFraction: Decimal = 1.0
  16. @Published var remainingCarbsFraction: Decimal = 1.0
  17. @Published var remainingCarbsCap: Decimal = 90
  18. @Published var noisyCGMTargetMultiplier: Decimal = 1.3
  19. var preferences: Preferences {
  20. settingsManager.preferences
  21. }
  22. override func subscribe() {
  23. units = settingsManager.settings.units
  24. maxDailySafetyMultiplier = settings.preferences.maxDailySafetyMultiplier
  25. currentBasalSafetyMultiplier = settings.preferences.currentBasalSafetyMultiplier
  26. useCustomPeakTime = settings.preferences.useCustomPeakTime
  27. insulinPeakTime = settings.preferences.insulinPeakTime
  28. skipNeutralTemps = settings.preferences.skipNeutralTemps
  29. unsuspendIfNoTemp = settings.preferences.unsuspendIfNoTemp
  30. suspendZerosIOB = settings.preferences.suspendZerosIOB
  31. min5mCarbimpact = settings.preferences.min5mCarbimpact
  32. autotuneISFAdjustmentFraction = settings.preferences.autotuneISFAdjustmentFraction
  33. remainingCarbsFraction = settings.preferences.remainingCarbsFraction
  34. remainingCarbsCap = settings.preferences.remainingCarbsCap
  35. noisyCGMTargetMultiplier = settings.preferences.noisyCGMTargetMultiplier
  36. }
  37. var isSettingUnchanged: Bool {
  38. preferences.maxDailySafetyMultiplier == maxDailySafetyMultiplier &&
  39. preferences.currentBasalSafetyMultiplier == currentBasalSafetyMultiplier &&
  40. preferences.useCustomPeakTime == useCustomPeakTime &&
  41. preferences.insulinPeakTime == insulinPeakTime &&
  42. preferences.skipNeutralTemps == skipNeutralTemps &&
  43. preferences.unsuspendIfNoTemp == unsuspendIfNoTemp &&
  44. preferences.suspendZerosIOB == suspendZerosIOB &&
  45. preferences.min5mCarbimpact == min5mCarbimpact &&
  46. preferences.autotuneISFAdjustmentFraction == autotuneISFAdjustmentFraction &&
  47. preferences.remainingCarbsFraction == remainingCarbsFraction &&
  48. preferences.remainingCarbsCap == remainingCarbsCap &&
  49. preferences.noisyCGMTargetMultiplier == noisyCGMTargetMultiplier
  50. }
  51. func saveIfChanged() {
  52. if !isSettingUnchanged {
  53. var newSettings = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self) ?? Preferences()
  54. newSettings.maxDailySafetyMultiplier = maxDailySafetyMultiplier
  55. newSettings.currentBasalSafetyMultiplier = currentBasalSafetyMultiplier
  56. newSettings.useCustomPeakTime = useCustomPeakTime
  57. newSettings.insulinPeakTime = insulinPeakTime
  58. newSettings.skipNeutralTemps = skipNeutralTemps
  59. newSettings.unsuspendIfNoTemp = unsuspendIfNoTemp
  60. newSettings.suspendZerosIOB = suspendZerosIOB
  61. newSettings.min5mCarbimpact = min5mCarbimpact
  62. newSettings.autotuneISFAdjustmentFraction = autotuneISFAdjustmentFraction
  63. newSettings.remainingCarbsFraction = remainingCarbsFraction
  64. newSettings.remainingCarbsCap = remainingCarbsCap
  65. newSettings.noisyCGMTargetMultiplier = noisyCGMTargetMultiplier
  66. newSettings.timestamp = Date()
  67. storage.save(newSettings, as: OpenAPS.Settings.preferences)
  68. }
  69. }
  70. }
  71. }