Jelajahi Sumber

Glucose sorting fix

Ivan Valkou 4 tahun lalu
induk
melakukan
a1e28790ef

+ 1 - 1
FreeAPS/Sources/APS/CGM/GlucoseSimulatorSource.swift

@@ -79,7 +79,7 @@ final class GlucoseSimulatorSource: GlucoseSource {
             lastFetchDate = Date()
         }
 
-        return Just(glucoses.reversed()).eraseToAnyPublisher()
+        return Just(glucoses).eraseToAnyPublisher()
     }
 }
 

+ 14 - 11
FreeAPS/Sources/APS/FetchGlucoseManager.swift

@@ -70,19 +70,22 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
                 .eraseToAnyPublisher()
             }
             .sink { date, syncDate, glucose, glucoseFromHealth in
+                let allGlucose = glucose + glucoseFromHealth
+                guard allGlucose.isNotEmpty else { return }
                 // Because of Spike dosn't respect a date query
-                let filteredByDate = (glucose + glucoseFromHealth).filter { $0.dateString > syncDate }
+                let filteredByDate = allGlucose.filter { $0.dateString > syncDate }
                 let filtered = self.glucoseStorage.filterTooFrequentGlucose(filteredByDate, at: syncDate)
-                if filtered.isNotEmpty {
-                    debug(.nightscout, "New glucose found")
-                    self.glucoseStorage.storeGlucose(filtered)
-                    self.apsManager.heartbeat(date: date, force: false)
-                    self.nightscoutManager.uploadGlucose()
-                    let glucoseForHealth = filteredByDate.filter { !glucoseFromHealth.contains($0) }
-                    if glucoseForHealth.isNotEmpty {
-                        self.healthKitManager.save(bloodGlucoses: glucoseForHealth, completion: nil)
-                    }
-                }
+
+                guard filtered.isNotEmpty else { return }
+                debug(.nightscout, "New glucose found")
+
+                self.glucoseStorage.storeGlucose(filtered)
+                self.apsManager.heartbeat(date: date, force: false)
+                self.nightscoutManager.uploadGlucose()
+                let glucoseForHealth = filteredByDate.filter { !glucoseFromHealth.contains($0) }
+
+                guard glucoseForHealth.isNotEmpty else { return }
+                self.healthKitManager.save(bloodGlucoses: glucoseForHealth, completion: nil)
             }
             .store(in: &lifetime)
         timer.fire()

+ 2 - 1
FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

@@ -91,8 +91,9 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
     func filterTooFrequentGlucose(_ glucose: [BloodGlucose], at date: Date) -> [BloodGlucose] {
         var lastDate = date
         var filtered: [BloodGlucose] = []
+        let sorted = glucose.sorted { $0.date < $1.date }
 
-        for entry in glucose.reversed() {
+        for entry in sorted {
             guard entry.dateString.addingTimeInterval(-Config.filterTime) > lastDate else {
                 continue
             }