GeneralSettingsProvider.swift 3.1 KB

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