瀏覽代碼

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
         }
 
+        // sort by date
+        let sortedGlucose = state.glucoseFromPersistence
+            .sorted { $0.date?.timeIntervalSince1970 ?? 0 < $1.date?.timeIntervalSince1970 ?? 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 midTime = state.glucoseFromPersistence[mid].date?.timeIntervalSince1970 ?? 0
+            let midTime = sortedGlucose[mid].date?.timeIntervalSince1970 ?? 0
 
             if midTime == time {
-                return state.glucoseFromPersistence[mid]
+                return sortedGlucose[mid]
             } else if midTime < time {
                 low = mid + 1
             } 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 {