Преглед изворни кода

fix bolus offset in mainchart

polscm32 пре 2 година
родитељ
комит
1dca76a576
1 измењених фајлова са 16 додато и 11 уклоњено
  1. 16 11
      FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

+ 16 - 11
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -655,29 +655,34 @@ extension MainChartView {
             return nil
             return nil
         }
         }
 
 
+        // sort by date
+        let sortedGlucose = state.glucoseFromPersistence
+            .sorted { $0.date?.timeIntervalSince1970 ?? 0 < $1.date?.timeIntervalSince1970 ?? 0 }
+
         var low = 0
         var low = 0
-        var high = state.glucoseFromPersistence.count - 1
+        var high = sortedGlucose.count - 1
+        var closestGlucose: GlucoseStored?
 
 
-        while low < high {
+        // binary search to find next glucose
+        while low <= high {
             let mid = low + (high - low) / 2
             let mid = low + (high - low) / 2
-            let midTime = state.glucoseFromPersistence[mid].date?.timeIntervalSince1970 ?? 0
+            let midTime = sortedGlucose[mid].date?.timeIntervalSince1970 ?? 0
 
 
             if midTime == time {
             if midTime == time {
-                return state.glucoseFromPersistence[mid]
+                return sortedGlucose[mid]
             } else if midTime < time {
             } else if midTime < time {
                 low = mid + 1
                 low = mid + 1
             } else {
             } else {
-                high = mid
+                high = mid - 1
             }
             }
-        }
 
 
-        if high == state.glucoseFromPersistence.count - 1 || state.glucoseFromPersistence[high].date?
-            .timeIntervalSince1970 ?? 0 > time
-        {
-            return state.glucoseFromPersistence[max(high - 1, 0)]
+            // update if necessary
+            if closestGlucose == nil || abs(midTime - time) < abs(closestGlucose!.date?.timeIntervalSince1970 ?? 0 - time) {
+                closestGlucose = sortedGlucose[mid]
+            }
         }
         }
 
 
-        return state.glucoseFromPersistence[high]
+        return closestGlucose
     }
     }
 
 
     private func fullWidth(viewWidth: CGFloat) -> CGFloat {
     private func fullWidth(viewWidth: CGFloat) -> CGFloat {