DynamicStateModel.swift 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import SwiftUI
  2. extension Dynamic {
  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.5
  10. @Published var weightPercentage: Decimal = 0.65
  11. @Published var tddAdjBasal: Bool = false
  12. @Published var threshold_setting: Decimal = 65
  13. @Published var unit: GlucoseUnits = .mmolL
  14. var preferences: Preferences {
  15. settingsManager.preferences
  16. }
  17. override func subscribe() {
  18. unit = settingsManager.settings.units
  19. useNewFormula = settings.preferences.useNewFormula
  20. enableDynamicCR = settings.preferences.enableDynamicCR
  21. sigmoid = settings.preferences.sigmoid
  22. adjustmentFactor = settings.preferences.adjustmentFactor
  23. weightPercentage = settings.preferences.weightPercentage
  24. tddAdjBasal = settings.preferences.tddAdjBasal
  25. if unit == .mmolL {
  26. threshold_setting = settings.preferences.threshold_setting.asMmolL
  27. } else {
  28. threshold_setting = settings.preferences.threshold_setting
  29. }
  30. }
  31. var unChanged: Bool {
  32. preferences.enableDynamicCR == enableDynamicCR &&
  33. preferences.adjustmentFactor == adjustmentFactor &&
  34. preferences.sigmoid == sigmoid &&
  35. preferences.tddAdjBasal == tddAdjBasal &&
  36. preferences.threshold_setting == convertBack(threshold_setting) &&
  37. preferences.useNewFormula == useNewFormula &&
  38. preferences.weightPercentage == weightPercentage
  39. }
  40. func convertBack(_ glucose: Decimal) -> Decimal {
  41. if unit == .mmolL {
  42. return glucose.asMgdL
  43. }
  44. return glucose
  45. }
  46. func saveIfChanged() {
  47. if !unChanged {
  48. var newSettings = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self) ?? Preferences()
  49. newSettings.enableDynamicCR = enableDynamicCR
  50. newSettings.adjustmentFactor = adjustmentFactor
  51. newSettings.sigmoid = sigmoid
  52. newSettings.tddAdjBasal = tddAdjBasal
  53. newSettings.threshold_setting = convertBack(threshold_setting)
  54. newSettings.useNewFormula = useNewFormula
  55. newSettings.weightPercentage = weightPercentage
  56. newSettings.timestamp = Date()
  57. storage.save(newSettings, as: OpenAPS.Settings.preferences)
  58. }
  59. }
  60. }
  61. }