SMBSettingsStateModel.swift 4.7 KB

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