extension ISFEditor { final class Provider: BaseProvider, ISFEditorProvider { var profile: InsulinSensitivities { var retrievedSensitivities = storage.retrieve(OpenAPS.Settings.insulinSensitivities, as: InsulinSensitivities.self) ?? InsulinSensitivities(from: OpenAPS.defaults(for: OpenAPS.Settings.insulinSensitivities)) ?? InsulinSensitivities( units: .mgdL, userPreferredUnits: .mgdL, sensitivities: [] ) // migrate existing mmol/L Trio users from mmol/L settings to pure mg/dl settings if retrievedSensitivities.units == .mmolL || retrievedSensitivities.userPreferredUnits == .mmolL { let convertedSensitivities = retrievedSensitivities.sensitivities.map { isf in InsulinSensitivityEntry(sensitivity: isf.sensitivity.asMgdL, offset: isf.offset, start: isf.start) } retrievedSensitivities = InsulinSensitivities( units: .mgdL, userPreferredUnits: .mgdL, sensitivities: convertedSensitivities ) saveProfile(retrievedSensitivities) } return retrievedSensitivities } func saveProfile(_ profile: InsulinSensitivities) { storage.save(profile, as: OpenAPS.Settings.insulinSensitivities) } var autosense: Autosens { storage.retrieve(OpenAPS.Settings.autosense, as: Autosens.self) ?? Autosens(from: OpenAPS.defaults(for: OpenAPS.Settings.autosense)) ?? Autosens(ratio: 1, newisf: nil, timestamp: nil) } var autotune: Autotune? { storage.retrieve(OpenAPS.Settings.autotune, as: Autotune.self) } } }