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

Filter out carbs and temp targets for non manual entries

Jonas Björkert пре 1 година
родитељ
комит
3f3d6662dd

+ 8 - 8
Trio/Sources/APS/FetchTreatmentsManager.swift

@@ -35,17 +35,17 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
                         async let carbs = self.nightscoutManager.fetchCarbs()
                         async let tempTargets = self.nightscoutManager.fetchTempTargets()
 
-                        // Filter and store if not from "Trio"
-                        let filteredCarbs = await carbs.filter { $0.enteredBy != CarbsEntry.local }
-                        if filteredCarbs.isNotEmpty {
-                            try await self.carbsStorage.storeCarbs(filteredCarbs, areFetchedFromRemote: true)
+                        // Store carbs directly (no filtering, as it's done in fetchCarbs)
+                        let fetchedCarbs = await carbs
+                        if fetchedCarbs.isNotEmpty {
+                            try await self.carbsStorage.storeCarbs(fetchedCarbs, areFetchedFromRemote: true)
                         }
 
-                        // Filter and store if not from Trio
-                        let filteredTargets = await tempTargets.filter { $0.enteredBy != TempTarget.local }
-                        if filteredTargets.isNotEmpty {
+                        // Store temp targets directly (no filtering, as it's done in fetchTempTargets)
+                        let fetchedTargets = await tempTargets
+                        if fetchedTargets.isNotEmpty {
                             // Sort temp targets by creation date
-                            let sortedTargets = filteredTargets.sorted { $0.createdAt < $1.createdAt }
+                            let sortedTargets = fetchedTargets.sorted { $0.createdAt < $1.createdAt }
 
                             // Iterate and store each temp target
                             for (index, tempTarget) in sortedTargets.enumerated() {

+ 30 - 20
Trio/Sources/Services/Network/Nightscout/NightscoutAPI.swift

@@ -20,6 +20,14 @@ class NightscoutAPI {
         static let timeout: TimeInterval = 60
     }
 
+    private let excludedEnteredBy: [String] = [
+        NightscoutTreatment.local,
+        "AndroidAPS",
+        "openaps://AndroidAPS",
+        "iAPS",
+        "loop://iPhone"
+    ]
+
     enum Error: LocalizedError {
         case badStatusCode
         case missingURL
@@ -98,23 +106,29 @@ extension NightscoutAPI {
         }
     }
 
+    private func makeNeQueryItems() -> [URLQueryItem] {
+        excludedEnteredBy.enumerated().map { idx, value in
+            URLQueryItem(
+                name: "find[$and][\(idx)][enteredBy][$ne]",
+                value: value
+            )
+        }
+    }
+
     func fetchCarbs(sinceDate: Date? = nil) async throws -> [CarbsEntry] {
         var components = URLComponents()
         components.scheme = url.scheme
         components.host = url.host
         components.port = url.port
         components.path = Config.treatmentsPath
-        components.queryItems = [
-            URLQueryItem(name: "find[carbs][$exists]", value: "true"),
-            URLQueryItem(
-                name: "find[enteredBy][$ne]",
-                value: CarbsEntry.local.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
-            ),
-            URLQueryItem(
-                name: "find[enteredBy][$ne]",
-                value: NightscoutTreatment.local.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
-            )
+
+        var items: [URLQueryItem] = [
+            URLQueryItem(name: "find[carbs][$exists]", value: "true")
         ]
+
+        items.append(contentsOf: makeNeQueryItems())
+        components.queryItems = items
+
         if let date = sinceDate {
             let dateItem = URLQueryItem(
                 name: "find[created_at][$gt]",
@@ -137,7 +151,6 @@ extension NightscoutAPI {
             guard let httpResponse = response as? HTTPURLResponse, (200 ... 299).contains(httpResponse.statusCode) else {
                 throw URLError(.badServerResponse)
             }
-
             let carbs = try JSONCoding.decoder.decode([CarbsEntry].self, from: data)
             return carbs
         } catch {
@@ -243,18 +256,15 @@ extension NightscoutAPI {
         components.host = url.host
         components.port = url.port
         components.path = Config.treatmentsPath
-        components.queryItems = [
+
+        var items: [URLQueryItem] = [
             URLQueryItem(name: "find[eventType]", value: "Temporary+Target"),
-            URLQueryItem(
-                name: "find[enteredBy][$ne]",
-                value: TempTarget.local.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
-            ),
-            URLQueryItem(
-                name: "find[enteredBy][$ne]",
-                value: NightscoutTreatment.local.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
-            ),
             URLQueryItem(name: "find[duration][$exists]", value: "true")
         ]
+
+        items.append(contentsOf: makeNeQueryItems())
+        components.queryItems = items
+
         if let date = sinceDate {
             let dateItem = URLQueryItem(
                 name: "find[created_at][$gt]",