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

Deduplicate Nightscout treatment entries by id field (#569)

Nightscout can return duplicate treatment entries with the same "id"
(Trio/Loop UUID) but different "_id" (MongoDB ObjectId), causing
duplicate boluses, carbs, etc. on the graph. Filter duplicates at the
top of updateTreatments before classification.
Jonas Björkert 2 месяцев назад
Родитель
Сommit
2e72194838
1 измененных файлов с 8 добавлено и 1 удалено
  1. 8 1
      LoopFollow/Controllers/Nightscout/Treatments.swift

+ 8 - 1
LoopFollow/Controllers/Nightscout/Treatments.swift

@@ -35,6 +35,13 @@ extension MainViewController {
 
     // Process and split out treatments to individual tasks
     func updateTreatments(entries: [[String: AnyObject]]) {
+        // Deduplicate entries by "id" field (Trio/Loop UUID)
+        var seenIDs = Set<String>()
+        let uniqueEntries = entries.filter { entry in
+            guard let id = entry["id"] as? String else { return true }
+            return seenIDs.insert(id).inserted
+        }
+
         var tempBasal: [[String: AnyObject]] = []
         var bolus: [[String: AnyObject]] = []
         var smb: [[String: AnyObject]] = []
@@ -49,7 +56,7 @@ extension MainViewController {
         var cgmSensorStart: [sageData] = []
         var insulinCartridge: [iageData] = []
 
-        for entry in entries {
+        for entry in uniqueEntries {
             guard let eventType = entry["eventType"] as? String else {
                 continue
             }