SMBSettingsStateModel.swift 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import Observation
  2. import SwiftUI
  3. extension SMBSettings {
  4. @Observable final class StateModel: BaseStateModel<Provider> {
  5. @ObservationIgnored @Injected() var settings: SettingsManager!
  6. @ObservationIgnored @Injected() var storage: FileStorage!
  7. var units: GlucoseUnits = .mgdL
  8. var enableSMBAlways: Bool = false
  9. var maxDeltaBGthreshold: Decimal = 0.2
  10. var enableSMBWithCOB: Bool = false
  11. var enableSMBWithTemptarget: Bool = false
  12. var enableSMBAfterCarbs: Bool = false
  13. var allowSMBWithHighTemptarget: Bool = false
  14. var enableSMB_high_bg: Bool = false
  15. var enableSMB_high_bg_target: Decimal = 100
  16. var maxSMBBasalMinutes: Decimal = 30
  17. var smbDeliveryRatio: Decimal = 0.5
  18. var smbInterval: Decimal = 3
  19. var bolusIncrement: Decimal = 0.1 // get this from pump, dafuq?: Bool = false
  20. var enableUAM: Bool = false
  21. var maxUAMSMBBasalMinutes: Decimal = 30
  22. var preferences: Preferences {
  23. settingsManager.preferences
  24. }
  25. override func subscribe() {
  26. units = settingsManager.settings.units
  27. enableSMBAlways = settings.preferences.enableSMBAlways
  28. maxDeltaBGthreshold = settings.preferences.maxDeltaBGthreshold
  29. enableSMBWithCOB = settings.preferences.enableSMBWithCOB
  30. enableSMBWithTemptarget = settings.preferences.enableSMBWithTemptarget
  31. enableSMBAfterCarbs = settings.preferences.enableSMBAfterCarbs
  32. allowSMBWithHighTemptarget = settings.preferences.allowSMBWithHighTemptarget
  33. enableSMB_high_bg = settings.preferences.enableSMB_high_bg
  34. enableSMB_high_bg_target = settings
  35. .preferences.enableSMB_high_bg_target
  36. maxSMBBasalMinutes = settings.preferences.maxSMBBasalMinutes
  37. smbDeliveryRatio = settings.preferences.smbDeliveryRatio
  38. smbInterval = settings.preferences.smbInterval
  39. bolusIncrement = settings.preferences.bolusIncrement
  40. enableUAM = settings.preferences.enableUAM
  41. maxUAMSMBBasalMinutes = settings.preferences.maxUAMSMBBasalMinutes
  42. }
  43. var isSettingUnchanged: Bool {
  44. preferences.enableSMBAlways == enableSMBAlways &&
  45. preferences.maxDeltaBGthreshold == maxDeltaBGthreshold &&
  46. preferences.enableSMBWithCOB == enableSMBWithCOB &&
  47. preferences.enableSMBWithTemptarget == enableSMBWithTemptarget &&
  48. preferences.enableSMBAfterCarbs == enableSMBAfterCarbs &&
  49. preferences.allowSMBWithHighTemptarget == allowSMBWithHighTemptarget &&
  50. preferences.enableSMB_high_bg == enableSMB_high_bg &&
  51. preferences.enableSMB_high_bg_target == enableSMB_high_bg_target &&
  52. preferences.maxSMBBasalMinutes == maxSMBBasalMinutes &&
  53. preferences.smbDeliveryRatio == smbDeliveryRatio &&
  54. preferences.smbInterval == smbInterval &&
  55. preferences.bolusIncrement == bolusIncrement &&
  56. preferences.enableUAM == enableUAM &&
  57. preferences.maxUAMSMBBasalMinutes == maxUAMSMBBasalMinutes
  58. }
  59. func saveIfChanged() {
  60. if !isSettingUnchanged {
  61. var newSettings = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self) ?? Preferences()
  62. newSettings.enableSMBAlways = enableSMBAlways
  63. newSettings.maxDeltaBGthreshold = maxDeltaBGthreshold
  64. newSettings.enableSMBWithCOB = enableSMBWithCOB
  65. newSettings.enableSMBWithTemptarget = enableSMBWithTemptarget
  66. newSettings.enableSMBAfterCarbs = enableSMBAfterCarbs
  67. newSettings.allowSMBWithHighTemptarget = allowSMBWithHighTemptarget
  68. newSettings.enableSMB_high_bg = enableSMB_high_bg
  69. newSettings.enableSMB_high_bg_target = enableSMB_high_bg_target
  70. newSettings.maxSMBBasalMinutes = maxSMBBasalMinutes
  71. newSettings.smbDeliveryRatio = smbDeliveryRatio
  72. newSettings.smbInterval = smbInterval
  73. newSettings.bolusIncrement = bolusIncrement
  74. newSettings.enableUAM = enableUAM
  75. newSettings.maxUAMSMBBasalMinutes = maxUAMSMBBasalMinutes
  76. newSettings.timestamp = Date()
  77. storage.save(newSettings, as: OpenAPS.Settings.preferences)
  78. }
  79. }
  80. }
  81. }
  82. extension SMBSettings.StateModel: SettingsObserver {
  83. func settingsDidChange(_: FreeAPSSettings) {
  84. units = settingsManager.settings.units
  85. }
  86. }