| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import Foundation
- import HealthKit
- extension PreferencesEditor {
- final class Provider: BaseProvider, PreferencesEditorProvider {
- @Injected() private var settingsManager: SettingsManager!
- @Injected() var fetchGlucoseManager: FetchGlucoseManager!
- private let processQueue = DispatchQueue(label: "PreferencesEditorProvider.processQueue")
- var preferences: Preferences {
- settingsManager.preferences
- }
- func savePreferences(_ preferences: Preferences) {
- processQueue.async {
- var prefs = preferences
- prefs.timestamp = Date()
- self.storage.save(prefs, as: OpenAPS.Settings.preferences)
- }
- }
- func updateManagerUnits() {
- var manager = fetchGlucoseManager.cgmManager
- let managerName = manager.map { "\(type(of: $0))" } ?? "nil"
- let units = settingsManager.settings.units
- let loopkitUnits: HKUnit = units == .mgdL ? .milligramsPerDeciliter : .millimolesPerLiter
- print("manager: \(managerName) is changing units to: \(loopkitUnits.description) ")
- manager?.unitDidChange(to: loopkitUnits)
- }
- func migrateUnits() {
- migrateTargets()
- migrateISF()
- }
- private func migrateTargets() {
- let profile = storage.retrieve(OpenAPS.Settings.bgTargets, as: BGTargets.self)
- ?? BGTargets(from: OpenAPS.defaults(for: OpenAPS.Settings.bgTargets))
- ?? BGTargets(units: .mmolL, userPrefferedUnits: .mmolL, targets: [])
- let units = settingsManager.settings.units
- guard units != profile.units else { return }
- let targets = profile.targets.map { target -> BGTargetEntry in
- if units == .mmolL {
- return BGTargetEntry(
- low: Decimal(round(Double(target.low.asMmolL) * 10) / 10),
- high: Decimal(round(Double(target.high.asMmolL) * 10) / 10),
- start: target.start,
- offset: target.offset
- )
- } else {
- return BGTargetEntry(
- low: Decimal(round(Double(target.low.asMgdL))),
- high: Decimal(round(Double(target.high.asMgdL))),
- start: target.start,
- offset: target.offset
- )
- }
- }
- let newProfile = BGTargets(units: units, userPrefferedUnits: units, targets: targets)
- storage.save(newProfile, as: OpenAPS.Settings.bgTargets)
- }
- private func migrateISF() {
- let profile = storage.retrieve(OpenAPS.Settings.insulinSensitivities, as: InsulinSensitivities.self)
- ?? InsulinSensitivities(from: OpenAPS.defaults(for: OpenAPS.Settings.insulinSensitivities))
- ?? InsulinSensitivities(
- units: .mmolL,
- userPrefferedUnits: .mmolL,
- sensitivities: []
- )
- let units = settingsManager.settings.units
- guard units != profile.units else { return }
- let sensitivities = profile.sensitivities.map { item -> InsulinSensitivityEntry in
- if units == .mmolL {
- return InsulinSensitivityEntry(
- sensitivity: Decimal(round(Double(item.sensitivity.asMmolL) * 10) / 10),
- offset: item.offset,
- start: item.start
- )
- } else {
- return InsulinSensitivityEntry(
- sensitivity: Decimal(round(Double(item.sensitivity.asMgdL))),
- offset: item.offset,
- start: item.start
- )
- }
- }
- let newProfile = InsulinSensitivities(units: units, userPrefferedUnits: units, sensitivities: sensitivities)
- storage.save(newProfile, as: OpenAPS.Settings.insulinSensitivities)
- }
- }
- }
|