| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import Combine
- import SwiftUI
- extension UnitsLimitsSettings {
- final class StateModel: BaseStateModel<Provider> {
- @Injected() var settings: SettingsManager!
- @Injected() var storage: FileStorage!
- @Published var units: GlucoseUnits = .mgdL
- @Published var unitsIndex = 0 // index 0 is mg/dl
- @Published var maxBolus: Decimal = 10
- @Published var maxBasal: Decimal = 2
- @Published var maxIOB: Decimal = 0
- @Published var maxCOB: Decimal = 120
- @Published var hasChanged: Bool = false
- var preferences: Preferences {
- settingsManager.preferences
- }
- var pumpSettings: PumpSettings {
- provider.settings()
- }
- override func subscribe() {
- units = settingsManager.settings.units
- subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
- unitsIndex = $0 == .mgdL ? 0 : 1
- }
- maxBasal = pumpSettings.maxBasal
- maxBolus = pumpSettings.maxBolus
- maxIOB = settings.preferences.maxIOB
- maxCOB = settings.preferences.maxCOB
- }
- var isPumpSettingUnchanged: Bool {
- pumpSettings.maxBasal == maxBasal &&
- pumpSettings.maxBolus == maxBolus
- }
- var isSettingUnchanged: Bool {
- preferences.maxIOB == maxIOB &&
- preferences.maxCOB == maxCOB
- }
- func saveIfChanged() {
- if !isSettingUnchanged {
- var newSettings = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self) ?? Preferences()
- newSettings.maxIOB = maxIOB
- newSettings.maxCOB = maxCOB
- newSettings.timestamp = Date()
- storage.save(newSettings, as: OpenAPS.Settings.preferences)
- }
- if !isPumpSettingUnchanged {
- let settings = PumpSettings(
- insulinActionCurve: pumpSettings.insulinActionCurve,
- maxBolus: maxBolus,
- maxBasal: maxBasal
- )
- provider.save(settings: settings)
- .receive(on: DispatchQueue.main)
- .sink { _ in
- let settings = self.provider.settings()
- self.maxBasal = settings.maxBasal
- self.maxBolus = settings.maxBolus
- } receiveValue: {}
- .store(in: &lifetime)
- }
- }
- }
- }
- extension UnitsLimitsSettings.StateModel: SettingsObserver {
- func settingsDidChange(_: FreeAPSSettings) {
- units = settingsManager.settings.units
- }
- }
|