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

Refactor Temp Basal Calculation

polscm32 aka Marvout 1 год назад
Родитель
Сommit
4c6fd6ccb0

+ 13 - 3
FreeAPS/Sources/Modules/Home/View/Chart/BasalChart.swift

@@ -27,6 +27,7 @@ extension MainChartView {
                 drawSuspensions()
             }.onChange(of: state.tempBasals) { _ in
                 calculateBasals()
+                calculateTempBasalsInBackground()
             }
             .onChange(of: state.maxBasal) { _ in
                 calculateBasals()
@@ -52,7 +53,7 @@ extension MainChartView {
 
 extension MainChartView {
     func drawTempBasals(dummy: Bool) -> some ChartContent {
-        ForEach(prepareTempBasals(), id: \.rate) { basal in
+        ForEach(preparedTempBasals, id: \.rate) { basal in
             if dummy {
                 RectangleMark(
                     xStart: .value("start", basal.start),
@@ -144,7 +145,16 @@ extension MainChartView {
 // MARK: - Calculation
 
 extension MainChartView {
-    func prepareTempBasals() -> [(start: Date, end: Date, rate: Double)] {
+    func calculateTempBasalsInBackground() {
+        Task {
+            let basals = await prepareTempBasals()
+            await MainActor.run {
+                preparedTempBasals = basals
+            }
+        }
+    }
+
+    func prepareTempBasals() async -> [(start: Date, end: Date, rate: Double)] {
         let now = Date()
         let tempBasals = state.tempBasals
 
@@ -160,7 +170,7 @@ extension MainChartView {
             guard let nextTemp = state.tempBasals.first(where: { $0.timestamp ?? .distantPast > timestamp }) else {
                 return (timestamp, end, rate)
             }
-            return (timestamp, nextTemp.timestamp ?? Date(), rate) // end defaults to current time
+            return (timestamp, nextTemp.timestamp ?? Date(), rate)
         }
     }
 

+ 2 - 0
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -20,6 +20,7 @@ struct MainChartView: View {
     @StateObject var state: Home.StateModel
 
     @State var basalProfiles: [BasalProfile] = []
+    @State var preparedTempBasals: [(start: Date, end: Date, rate: Double)] = []
     @State var chartTempTargets: [ChartTempTarget] = []
     @State var startMarker =
         Date(timeIntervalSinceNow: TimeInterval(hours: -24))
@@ -123,6 +124,7 @@ struct MainChartView: View {
                                 yAxisChartData()
                                 yAxisChartDataCobChart()
                                 yAxisChartDataIobChart()
+                                calculateTempBasalsInBackground()
                                 mainChartHasInitialized = true
                                 scroller.scrollTo("MainChart", anchor: .trailing)
                             }