DynamicSettingsStateModel.swift 3.2 KB

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