Explorar o código

Sync Insulin Type with curve of oref0

avouspierre %!s(int64=3) %!d(string=hai) anos
pai
achega
1aa007f119

+ 5 - 1
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -300,7 +300,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
         true
     }
 
-    func pumpManager(_ pumpManager: PumpManager, didUpdate status: PumpManagerStatus, oldStatus _: PumpManagerStatus) {
+    func pumpManager(_ pumpManager: PumpManager, didUpdate status: PumpManagerStatus, oldStatus: PumpManagerStatus) {
         dispatchPrecondition(condition: .onQueue(processQueue))
         debug(.deviceManager, "New pump status Bolus: \(status.bolusState)")
         debug(.deviceManager, "New pump status Basal: \(String(describing: status.basalDeliveryState))")
@@ -311,6 +311,10 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
             bolusTrigger.send(false)
         }
 
+        if status.insulinType != oldStatus.insulinType {
+            settingsManager.updateInsulinCurve(status.insulinType)
+        }
+
         let batteryPercent = Int((status.pumpBatteryChargeRemaining ?? 1) * 100)
         let battery = Battery(
             percent: batteryPercent,

+ 3 - 0
FreeAPS/Sources/Modules/PumpConfig/PumpConfigStateModel.swift

@@ -47,6 +47,9 @@ extension PumpConfig.StateModel: CompletionDelegate {
 extension PumpConfig.StateModel: PumpManagerOnboardingDelegate {
     func pumpManagerOnboarding(didCreatePumpManager pumpManager: PumpManagerUI) {
         provider.setPumpManager(pumpManager)
+        if let insulinType = pumpManager.status.insulinType {
+            settingsManager.updateInsulinCurve(insulinType)
+        }
         setupPump = false
     }
 

+ 21 - 0
FreeAPS/Sources/Services/SettingsManager/SettingsManager.swift

@@ -1,10 +1,12 @@
 import Foundation
+import LoopKit
 import Swinject
 
 protocol SettingsManager: AnyObject {
     var settings: FreeAPSSettings { get set }
     var preferences: Preferences { get }
     var pumpSettings: PumpSettings { get }
+    func updateInsulinCurve(_ insulinType: InsulinType?)
 }
 
 protocol SettingsObserver {
@@ -52,4 +54,23 @@ final class BaseSettingsManager: SettingsManager, Injectable {
             ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
             ?? PumpSettings(insulinActionCurve: 5, maxBolus: 10, maxBasal: 2)
     }
+
+    func updateInsulinCurve(_ insulinType: InsulinType?) {
+        var prefs = preferences
+
+        switch insulinType {
+        case .apidra,
+             .humalog,
+             .novolog:
+            prefs.curve = .rapidActing
+
+        case .afrezza,
+             .fiasp,
+             .lyumjev:
+            prefs.curve = .ultraRapid
+        default:
+            prefs.curve = .rapidActing
+        }
+        storage.save(prefs, as: OpenAPS.Settings.preferences)
+    }
 }