فهرست منبع

Set pump initial settings and pump popover

Ivan Valkou 5 سال پیش
والد
کامیت
8399ab7ea2

+ 1 - 1
FreeAPS.xcodeproj/project.pbxproj

@@ -1049,6 +1049,7 @@
 		388E5A5A25B6F05F0019842D /* Helpers */ = {
 			isa = PBXGroup;
 			children = (
+				38F37827261260DC009DB701 /* Color+Extensions.swift */,
 				389ECE042601144100D86C4F /* ConcurrentMap.swift */,
 				3871F39E25ED895A0013ECB5 /* Decimal+Extensions.swift */,
 				38C4D33625E9A1A200D30B77 /* DispatchQueue+Extensions.swift */,
@@ -1064,7 +1065,6 @@
 				3811DE5525C9D4D500A708ED /* Publisher.swift */,
 				38E98A3625F5509500C0CED0 /* String+Extensions.swift */,
 				3811DEE325CA063400A708ED /* PropertyWrappers */,
-				38F37827261260DC009DB701 /* Color+Extensions.swift */,
 			);
 			path = Helpers;
 			sourceTree = "<group>";

+ 1 - 1
FreeAPS/Sources/Models/TempTarget.swift

@@ -10,7 +10,7 @@ struct TempTarget: JSON, Identifiable, Equatable {
     let enteredBy: String?
 
     static let manual = "freeaps-x://manual"
-    static let custom = "Custom"
+    static let custom = "Custom temp target"
     static let cancel = "Cancel"
 }
 

+ 1 - 0
FreeAPS/Sources/Modules/Home/HomeDataFlow.swift

@@ -1,4 +1,5 @@
 import Foundation
+import LoopKitUI
 
 enum Home {
     enum Config {}

+ 1 - 0
FreeAPS/Sources/Modules/Home/HomeProvider.swift

@@ -1,4 +1,5 @@
 import Foundation
+import LoopKitUI
 import SwiftDate
 
 extension Home {

+ 8 - 0
FreeAPS/Sources/Modules/Home/HomeViewModel.swift

@@ -1,3 +1,4 @@
+import LoopKitUI
 import SwiftDate
 import SwiftUI
 
@@ -31,6 +32,7 @@ extension Home {
         @Published var pumpName = "Pump"
         @Published var pumpExpiresAtDate: Date?
         @Published var tempTargetName: String?
+        @Published var setupPump = false
 
         @Published var allowManualTemp = false
         private(set) var units: GlucoseUnits = .mmolL
@@ -291,3 +293,9 @@ extension Home.ViewModel:
         setupReservoir()
     }
 }
+
+extension Home.ViewModel: CompletionDelegate {
+    func completionNotifyingDidComplete(_: CompletionNotifying) {
+        setupPump = false
+    }
+}

+ 8 - 0
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -43,6 +43,14 @@ extension Home {
                     expiresAtDate: $viewModel.pumpExpiresAtDate,
                     timerDate: $viewModel.timerDate
                 )
+                .onTapGesture {
+                    viewModel.setupPump = true
+                }
+                .popover(isPresented: $viewModel.setupPump) {
+                    if let pumpManager = viewModel.provider.apsManager.pumpManager {
+                        PumpConfig.PumpSettingsView(pumpManager: pumpManager, completionDelegate: viewModel)
+                    }
+                }
                 Spacer()
                 LoopView(
                     suggestion: $viewModel.suggestion,

+ 2 - 0
FreeAPS/Sources/Modules/PumpConfig/PumpConfigDataFlow.swift

@@ -32,4 +32,6 @@ struct PumpDisplayState {
 protocol PumpConfigProvider: Provider {
     func setPumpManager(_: PumpManagerUI)
     var pumpDisplayState: AnyPublisher<PumpDisplayState?, Never> { get }
+    func pumpSettings() -> PumpSettings
+    func basalProfile() -> [BasalProfileEntry]
 }

+ 12 - 0
FreeAPS/Sources/Modules/PumpConfig/PumpConfigProvider.swift

@@ -13,5 +13,17 @@ extension PumpConfig {
         var pumpDisplayState: AnyPublisher<PumpDisplayState?, Never> {
             apsManager.pumpDisplayState.eraseToAnyPublisher()
         }
+
+        func basalProfile() -> [BasalProfileEntry] {
+            storage.retrieve(OpenAPS.Settings.profile, as: Autotune.self)?.basalProfile
+                ?? storage.retrieve(OpenAPS.Settings.pumpProfile, as: Autotune.self)?.basalProfile
+                ?? [BasalProfileEntry(start: "00:00", minutes: 0, rate: 1)]
+        }
+
+        func pumpSettings() -> PumpSettings {
+            storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
+                ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
+                ?? PumpSettings(insulinActionCurve: 5, maxBolus: 10, maxBasal: 2)
+        }
     }
 }

+ 17 - 0
FreeAPS/Sources/Modules/PumpConfig/PumpConfigViewModel.swift

@@ -1,4 +1,6 @@
+import LoopKit
 import LoopKitUI
+import SwiftDate
 import SwiftUI
 
 extension PumpConfig {
@@ -6,12 +8,27 @@ extension PumpConfig {
         @Published var setupPump = false
         private(set) var setupPumpType: PumpType = .minimed
         @Published var pumpState: PumpDisplayState?
+        private(set) var initialSettings: PumpInitialSettings = .default
 
         override func subscribe() {
             provider.pumpDisplayState
                 .receive(on: DispatchQueue.main)
                 .assign(to: \.pumpState, on: self)
                 .store(in: &lifetime)
+
+            let basalSchedule = BasalRateSchedule(
+                dailyItems: provider.basalProfile().map {
+                    RepeatingScheduleValue(startTime: $0.minutes.minutes.timeInterval, value: Double($0.rate))
+                }
+            )
+
+            let pumpSettings = provider.pumpSettings()
+
+            initialSettings = PumpInitialSettings(
+                maxBolusUnits: Double(pumpSettings.maxBolus),
+                maxBasalRateUnitsPerHour: Double(pumpSettings.maxBasal),
+                basalSchedule: basalSchedule!
+            )
         }
 
         func addPump(_ type: PumpType) {

+ 1 - 1
FreeAPS/Sources/Modules/PumpConfig/View/PumpConfigRootView.swift

@@ -31,7 +31,7 @@ extension PumpConfig {
                 } else {
                     PumpSetupView(
                         pumpType: viewModel.setupPumpType,
-                        pumpInitialSettings: .default,
+                        pumpInitialSettings: viewModel.initialSettings,
                         completionDelegate: viewModel,
                         setupDelegate: viewModel
                     )

+ 0 - 8
FreeAPS/Sources/Modules/PumpConfig/View/PumpSettingsView.swift

@@ -1,12 +1,4 @@
-import LoopKit
 import LoopKitUI
-import MinimedKit
-import MinimedKitUI
-import OmniKit
-import OmniKitUI
-import RileyLinkBLEKit
-import RileyLinkKit
-import RileyLinkKitUI
 import SwiftUI
 import UIKit