瀏覽代碼

fix glucose filter logic

Ivan Valkou 5 年之前
父節點
當前提交
dd5758954a
共有 2 個文件被更改,包括 10 次插入6 次删除
  1. 2 2
      FreeAPS/Sources/APS/GlucoseManager.swift
  2. 8 4
      FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

+ 2 - 2
FreeAPS/Sources/APS/GlucoseManager.swift

@@ -23,14 +23,14 @@ final class BaseGlucoseManager: GlucoseManager, Injectable {
         timer.publisher
             .receive(on: processQueue)
             .flatMap { date -> AnyPublisher<[BloodGlucose], Never> in
-                guard self.glucoseStogare.syncDate().timeIntervalSince1970 + 4.minutes.timeInterval <= date.timeIntervalSince1970
+                guard self.glucoseStogare.syncDate().timeIntervalSince1970 <= date.timeIntervalSince1970
                 else {
                     return Just([]).eraseToAnyPublisher()
                 }
                 return self.nightscoutManager.fetchGlucose()
             }
             .sink { glucose in
-                if !glucose.isEmpty {
+                if !self.glucoseStogare.filterTooFrequentGlucose(glucose).isEmpty {
                     self.apsManager.heartbeatNow()
                 }
             }

+ 8 - 4
FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

@@ -6,6 +6,7 @@ protocol GlucoseStorage {
     func storeGlucose(_ glucose: [BloodGlucose])
     func recent() -> [BloodGlucose]
     func syncDate() -> Date
+    func filterTooFrequentGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose]
 }
 
 final class BaseGlucoseStorage: GlucoseStorage, Injectable {
@@ -13,6 +14,10 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
     @Injected() private var storage: FileStorage!
     @Injected() private var broadcaster: Broadcaster!
 
+    private enum Config {
+        static let filterTime: TimeInterval = 4.75 * 60
+    }
+
     init(resolver: Resolver) {
         injectServices(resolver)
     }
@@ -44,20 +49,19 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
         else {
             return Date().addingTimeInterval(-1.days.timeInterval)
         }
-        return recent.dateString.addingTimeInterval(1.minutes.timeInterval)
+        return recent.dateString.addingTimeInterval(Config.filterTime)
     }
 
     func recent() -> [BloodGlucose] {
         storage.retrieve(OpenAPS.Monitor.glucose, as: [BloodGlucose].self)?.reversed() ?? []
     }
 
-    private func filterTooFrequentGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose] {
+    func filterTooFrequentGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose] {
         var lastDate = recent().first?.dateString ?? .distantPast
-        let filterTime: TimeInterval = 4.75 * 60
         var filtered: [BloodGlucose] = []
 
         for entry in glucose.reversed() {
-            guard entry.dateString.addingTimeInterval(-filterTime) > lastDate else {
+            guard entry.dateString.addingTimeInterval(-Config.filterTime) > lastDate else {
                 continue
             }
             filtered.append(entry)