Explorar o código

Merge pull request #164 from bjorkert/carb_bolus_debounce

Debounce Nightscout Uploads to Avoid Duplicates
Deniz Cengiz hai 1 ano
pai
achega
e5fe04ab46

+ 24 - 8
FreeAPS/Sources/Services/Network/Nightscout/NightscoutManager.swift

@@ -42,6 +42,8 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
     @Injected() var healthkitManager: HealthKitManager!
 
     private let uploadOverridesSubject = PassthroughSubject<Void, Never>()
+    private let uploadPumpHistorySubject = PassthroughSubject<Void, Never>()
+    private let uploadCarbsSubject = PassthroughSubject<Void, Never>()
     private let processQueue = DispatchQueue(label: "BaseNetworkManager.processQueue")
     private var ping: TimeInterval?
 
@@ -111,6 +113,26 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
             }
             .store(in: &subscriptions)
 
+        uploadPumpHistorySubject
+            .debounce(for: .seconds(1), scheduler: DispatchQueue.global(qos: .background))
+            .sink { [weak self] in
+                guard let self = self else { return }
+                Task {
+                    await self.uploadPumpHistory()
+                }
+            }
+            .store(in: &subscriptions)
+
+        uploadCarbsSubject
+            .debounce(for: .seconds(1), scheduler: DispatchQueue.global(qos: .background))
+            .sink { [weak self] in
+                guard let self = self else { return }
+                Task {
+                    await self.uploadCarbs()
+                }
+            }
+            .store(in: &subscriptions)
+
         registerHandlers()
         setupNotification()
     }
@@ -154,17 +176,11 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }.store(in: &subscriptions)
 
         coreDataPublisher?.filterByEntityName("PumpEventStored").sink { [weak self] _ in
-            guard let self = self else { return }
-            Task.detached {
-                await self.uploadPumpHistory()
-            }
+            self?.uploadPumpHistorySubject.send()
         }.store(in: &subscriptions)
 
         coreDataPublisher?.filterByEntityName("CarbEntryStored").sink { [weak self] _ in
-            guard let self = self else { return }
-            Task.detached {
-                await self.uploadCarbs()
-            }
+            self?.uploadCarbsSubject.send()
         }.store(in: &subscriptions)
 
         coreDataPublisher?.filterByEntityName("GlucoseStored").sink { [weak self] _ in