PreferencesEditorProvider.swift 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import Foundation
  2. extension PreferencesEditor {
  3. final class Provider: BaseProvider, PreferencesEditorProvider {
  4. @Injected() private var settingsManager: SettingsManager!
  5. private let processQueue = DispatchQueue(label: "PreferencesEditorProvider.processQueue")
  6. var preferences: Preferences {
  7. settingsManager.preferences
  8. }
  9. func savePreferences(_ preferences: Preferences) {
  10. processQueue.async {
  11. var prefs = preferences
  12. prefs.timestamp = Date()
  13. self.storage.save(prefs, as: OpenAPS.Settings.preferences)
  14. }
  15. }
  16. func migrateUnits() {
  17. migrateTargets()
  18. migrateISF()
  19. }
  20. private func migrateTargets() {
  21. let profile = storage.retrieve(OpenAPS.Settings.bgTargets, as: BGTargets.self)
  22. ?? BGTargets(from: OpenAPS.defaults(for: OpenAPS.Settings.bgTargets))
  23. ?? BGTargets(units: .mmolL, userPrefferedUnits: .mmolL, targets: [])
  24. let units = settingsManager.settings.units
  25. guard units != profile.units else { return }
  26. let targets = profile.targets.map { target -> BGTargetEntry in
  27. if units == .mmolL {
  28. return BGTargetEntry(
  29. low: Decimal(round(Double(target.low.asMmolL) * 10) / 10),
  30. high: Decimal(round(Double(target.high.asMmolL) * 10) / 10),
  31. start: target.start,
  32. offset: target.offset
  33. )
  34. } else {
  35. return BGTargetEntry(
  36. low: Decimal(round(Double(target.low.asMgdL))),
  37. high: Decimal(round(Double(target.high.asMgdL))),
  38. start: target.start,
  39. offset: target.offset
  40. )
  41. }
  42. }
  43. let newProfile = BGTargets(units: units, userPrefferedUnits: units, targets: targets)
  44. storage.save(newProfile, as: OpenAPS.Settings.bgTargets)
  45. }
  46. private func migrateISF() {
  47. let profile = storage.retrieve(OpenAPS.Settings.insulinSensitivities, as: InsulinSensitivities.self)
  48. ?? InsulinSensitivities(from: OpenAPS.defaults(for: OpenAPS.Settings.insulinSensitivities))
  49. ?? InsulinSensitivities(
  50. units: .mmolL,
  51. userPrefferedUnits: .mmolL,
  52. sensitivities: []
  53. )
  54. let units = settingsManager.settings.units
  55. guard units != profile.units else { return }
  56. let sensitivities = profile.sensitivities.map { item -> InsulinSensitivityEntry in
  57. if units == .mmolL {
  58. return InsulinSensitivityEntry(
  59. sensitivity: Decimal(round(Double(item.sensitivity.asMmolL) * 10) / 10),
  60. offset: item.offset,
  61. start: item.start
  62. )
  63. } else {
  64. return InsulinSensitivityEntry(
  65. sensitivity: Decimal(round(Double(item.sensitivity.asMgdL))),
  66. offset: item.offset,
  67. start: item.start
  68. )
  69. }
  70. }
  71. let newProfile = InsulinSensitivities(units: units, userPrefferedUnits: units, sensitivities: sensitivities)
  72. storage.save(newProfile, as: OpenAPS.Settings.insulinSensitivities)
  73. }
  74. }
  75. }