Просмотр исходного кода

improve performance of bolus calculation by eliminating the need for temporary carb entries and passing them to the determineBasal func

polscm32 2 лет назад
Родитель
Сommit
5accebeaa8

+ 41 - 41
FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift

@@ -49,6 +49,7 @@ extension Bolus {
         @Published var deltaBG: Decimal = 0
         @Published var targetDifferenceInsulin: Decimal = 0
         @Published var targetDifference: Decimal = 0
+        @Published var wholeCob: Decimal = 0
         @Published var wholeCobInsulin: Decimal = 0
         @Published var iobInsulinReduction: Decimal = 0
         @Published var wholeCalc: Decimal = 0
@@ -73,7 +74,6 @@ extension Bolus {
         @Published var protein: Decimal = 0
         @Published var note: String = ""
 
-        // @Published var carbs: Decimal = 0
         @Published var date = Date()
         // @Published var protein: Decimal = 0
         // @Published var fat: Decimal = 0
@@ -192,7 +192,8 @@ extension Bolus {
             fifteenMinInsulin = (deltaBG * conversion) / isf
 
             // determine whole COB for which we want to dose insulin for and then determine insulin for wholeCOB
-            wholeCobInsulin = cob / carbRatio
+            wholeCob = cob + carbs
+            wholeCobInsulin = wholeCob / carbRatio
 
             // determine how much the calculator reduces/ increases the bolus because of IOB
             iobInsulinReduction = (-1) * iob
@@ -292,44 +293,44 @@ extension Bolus {
             }
         }
 
-        func backToCarbsView(complexEntry: Bool, _ meal: FetchedResults<Meals>, override _: Bool) {
-            delete(deleteTwice: complexEntry, meal: meal)
-            // showModal(for: .addCarbs(editMode: complexEntry, override: override))
-        }
-
-        func delete(deleteTwice: Bool, meal: FetchedResults<Meals>) {
-            guard let meals = meal.first else {
-                return
-            }
-
-            var date = Date()
-
-            if let mealDate = meals.actualDate {
-                date = mealDate
-            } else if let mealdate = meals.createdAt {
-                date = mealdate
-            }
-
-            let mealArray = DataTable.Treatment(
-                units: units,
-                type: .carbs,
-                date: date,
-                id: meals.id ?? "",
-                isFPU: deleteTwice ? true : false,
-                fpuID: deleteTwice ? (meals.fpuID ?? "") : ""
-            )
-
-            print(
-                "meals 2: ID: " + mealArray.id.description + " FPU ID: " + (mealArray.fpuID ?? "")
-                    .description
-            )
-
-            if deleteTwice {
-                nsManager.deleteCarbs(mealArray, complexMeal: true)
-            } else {
-                nsManager.deleteCarbs(mealArray, complexMeal: false)
-            }
-        }
+//        func backToCarbsView(complexEntry: Bool, _ meal: FetchedResults<Meals>, override _: Bool) {
+//            delete(deleteTwice: complexEntry, meal: meal)
+//            // showModal(for: .addCarbs(editMode: complexEntry, override: override))
+//        }
+
+//        func delete(deleteTwice: Bool, meal: FetchedResults<Meals>) {
+//            guard let meals = meal.first else {
+//                return
+//            }
+//
+//            var date = Date()
+//
+//            if let mealDate = meals.actualDate {
+//                date = mealDate
+//            } else if let mealdate = meals.createdAt {
+//                date = mealdate
+//            }
+//
+//            let mealArray = DataTable.Treatment(
+//                units: units,
+//                type: .carbs,
+//                date: date,
+//                id: meals.id ?? "",
+//                isFPU: deleteTwice ? true : false,
+//                fpuID: deleteTwice ? (meals.fpuID ?? "") : ""
+//            )
+//
+//            print(
+//                "meals 2: ID: " + mealArray.id.description + " FPU ID: " + (mealArray.fpuID ?? "")
+//                    .description
+//            )
+//
+//            if deleteTwice {
+//                nsManager.deleteCarbs(mealArray, complexMeal: true)
+//            } else {
+//                nsManager.deleteCarbs(mealArray, complexMeal: false)
+//            }
+//        }
 
         func addCarbs(_ continue_: Bool, fetch: Bool) {
             guard carbs > 0 || fat > 0 || protein > 0 else { return }
@@ -355,7 +356,6 @@ extension Bolus {
             } else if carbs > 0 {
                 saveToCoreData(carbsToStore)
                 apsManager.determineBasalSync()
-                // showModal(for: .bolus(waitForSuggestion: true, fetch: true, editMode: false, override: false))
             } else {
                 hideModal()
             }

+ 9 - 57
FreeAPS/Sources/Modules/Bolus/View/AlternativeBolusCalcRootView.swift

@@ -10,21 +10,18 @@ extension Bolus {
         let fetch: Bool
         let editMode: Bool
         let override: Bool
+
         @StateObject var state: StateModel
+
         @State private var showInfo = false
         @State private var showAlert = false
         @State private var exceededMaxBolus = false
-        @State private var keepForNextWiew: Bool = false
-        @State private var calcButtonPressed: Bool = false
         @State private var autofocus: Bool = true
         @State private var calculatorDetent = PresentationDetent.medium
         @State var pushed = false
         @State var isPromptPresented = false
         @State var dish: String = ""
         @State var saved = false
-        @State private var treatmentsViewMode: TreatmentsViewMode = .calcMode
-
-        @FocusState private var isFocused: Bool
 
         @Environment(\.managedObjectContext) var moc
 
@@ -33,11 +30,6 @@ extension Bolus {
             static let spacing: CGFloat = 3
         }
 
-        private enum TreatmentsViewMode {
-            case editMode
-            case calcMode
-        }
-
         @Environment(\.colorScheme) var colorScheme
 
         @FetchRequest(
@@ -339,16 +331,6 @@ extension Bolus {
                         }
                     }
 
-                    // Optional meal note
-                    //                    HStack {
-                    //                        Image(systemName: "note.text.badge.plus").foregroundColor(.secondary)
-                    //                        TextField("", text: $state.note).multilineTextAlignment(.trailing)
-                    //                        if state.note != "", isFocused {
-                    //                            Button { isFocused = false } label: { Image(systemName: "keyboard.chevron.compact.down") }
-                    //                                .controlSize(.mini)
-                    //                        }
-                    //                    }
-                    //                    .focused($isFocused)
                     .popover(isPresented: $isPromptPresented) {
                         presetPopover
                     }
@@ -356,25 +338,11 @@ extension Bolus {
                     HStack {
                         Spacer()
                         Button {
-                            if treatmentsViewMode == .calcMode {
-                                state.addCarbs(override, fetch: editMode)
-                                treatmentsViewMode = .editMode
-                                calcButtonPressed.toggle()
-                            } else {
-                                state.backToCarbsView(complexEntry: true, meal, override: false)
-                                treatmentsViewMode = .calcMode
-                            }
+                            // to do
+                            state.insulinCalculated = state.calculateInsulin()
                         }
                         label: {
-                            // Text((state.skipBolus && !override && !editMode) ? "Save" : "Calculate Bolus")
-                            // if carbs > 0 and it is the first entry then go into edit mode
-                            // conditionally change text to 'edit meal'
-                            // Text(!editMode ? "Calculate" : "Edit Meal")
-                            if treatmentsViewMode == .calcMode {
-                                Text("Calculate")
-                            } else {
-                                Text("Edit meal")
-                            }
+                            Text("Calculate")
                         }.disabled(empty)
 
                         Spacer()
@@ -476,14 +444,9 @@ extension Bolus {
                 if state.amount > 0 {
                     Section {
                         Button {
-                            keepForNextWiew = true
                             state.add()
                             state.hideModal()
-                            /// check if user pressed the calc button or just wanted to enter carbs
-                            /// otherwise carb entry is doubled
-                            if !calcButtonPressed {
-                                state.addCarbs(override, fetch: editMode)
-                            }
+                            state.addCarbs(override, fetch: editMode)
                         }
                         label: { Text(exceededMaxBolus ? "Max Bolus exceeded!" : "Enact bolus") }
                             .frame(maxWidth: .infinity, alignment: .center)
@@ -495,13 +458,8 @@ extension Bolus {
                 if state.amount <= 0 {
                     Section {
                         Button {
-                            keepForNextWiew = true
                             state.hideModal()
-                            /// check if user pressed the calc button or just wanted to enter carbs
-                            /// otherwise carb entry is doubled
-                            if !calcButtonPressed {
-                                state.addCarbs(override, fetch: editMode)
-                            }
+                            state.addCarbs(override, fetch: editMode)
                         }
                         label: { Text("Continue without bolus") }.frame(maxWidth: .infinity, alignment: .center)
                     }.listRowBackground(Color.chart)
@@ -526,13 +484,7 @@ extension Bolus {
                         state.insulinCalculated = state.calculateInsulin()
                     }
                 }
-                .onDisappear {
-                    if hasFatOrProtein, !keepForNextWiew, state.useCalc, treatmentsViewMode == .editMode {
-                        state.delete(deleteTwice: true, meal: meal)
-                    } else if !keepForNextWiew, state.useCalc, treatmentsViewMode == .editMode {
-                        state.delete(deleteTwice: false, meal: meal)
-                    }
-                }
+
                 .sheet(isPresented: $showInfo) {
                     calculationsDetailView
                         .presentationDetents(
@@ -680,7 +632,7 @@ extension Bolus {
                 HStack {
                     Text("COB:").foregroundColor(.secondary)
                     Text(
-                        state.cob
+                        state.wholeCob
                             .formatted(.number.grouping(.never).rounded().precision(.fractionLength(fractionDigits))) +
                             NSLocalizedString(" g", comment: "grams")
                     )

+ 4 - 25
FreeAPS/Sources/Modules/Bolus/View/DefaultBolusCalcRootView.swift

@@ -158,35 +158,14 @@ extension Bolus {
                         state.waitForSuggestion = waitForSuggestion
                     }
                 }
-
-                .onDisappear {
-                    if fetch, hasFatOrProtein, !keepForNextWiew, !state.useCalc {
-                        state.delete(deleteTwice: true, meal: meal)
-                    } else if fetch, !keepForNextWiew, !state.useCalc {
-                        state.delete(deleteTwice: false, meal: meal)
-                    }
-                }
-
                 .navigationTitle("Enact Bolus")
                 .navigationBarTitleDisplayMode(.inline)
                 .toolbar {
                     ToolbarItem(placement: .topBarLeading) {
-                        if fetch {
-                            Button {
-                                keepForNextWiew = true
-                                state.backToCarbsView(complexEntry: true, meal, override: false)
-                            } label: {
-                                HStack {
-                                    Image(systemName: "chevron.backward")
-                                    Text("Meal")
-                                }
-                            }
-                        } else {
-                            Button {
-                                state.hideModal()
-                            } label: {
-                                Text("Close")
-                            }
+                        Button {
+                            state.hideModal()
+                        } label: {
+                            Text("Close")
                         }
                     }
                 }