Przeglądaj źródła

Upload treatments in chunks

Ivan Valkou 5 lat temu
rodzic
commit
1dffa985b6

+ 6 - 2
FreeAPS/Sources/APS/FetchTreatmentsManager.swift

@@ -31,8 +31,12 @@ final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
                 ).eraseToAnyPublisher()
             }
             .sink { carbs, targets in
-                self.carbsStorage.storeCarbs(carbs)
-                self.tempTargetsStorage.storeTempTargets(targets)
+                if carbs.isNotEmpty {
+                    self.carbsStorage.storeCarbs(carbs)
+                }
+                if targets.isNotEmpty {
+                    self.tempTargetsStorage.storeTempTargets(targets)
+                }
             }
             .store(in: &lifetime)
         timer.resume()

+ 1 - 1
FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift

@@ -75,7 +75,7 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
     func nightscoutTretmentsNotUploaded() -> [NigtscoutTreatment] {
         let uploaded = storage.retrieve(OpenAPS.Nightscout.uploadedTempTargets, as: [NigtscoutTreatment].self) ?? []
 
-        let eventsManual = recent().filter { $0.enteredBy == CarbsEntry.manual }
+        let eventsManual = recent().filter { $0.enteredBy == TempTarget.manual }
         let treatments = eventsManual.map {
             NigtscoutTreatment(
                 duration: Int($0.duration),

+ 5 - 0
FreeAPS/Sources/Modules/Settings/View/SettingsRootView.swift

@@ -75,6 +75,11 @@ extension Settings {
                             Text("Autotune").chevronCell()
                                 .navigationLink(to: .configEditor(file: OpenAPS.Settings.autotune), from: self)
                         }
+
+                        Group {
+                            Text("Target presets").chevronCell()
+                                .navigationLink(to: .configEditor(file: OpenAPS.FreeAPS.tempTargetsPresets), from: self)
+                        }
                     }
                 }
             }

+ 11 - 1
FreeAPS/Sources/Services/Network/NightscoutManager.swift

@@ -225,7 +225,17 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
         }
 
         processQueue.async {
-            nightscout.uploadTreatments(treatments)
+            treatments.chunks(ofCount: 100)
+                .map { chunk -> AnyPublisher<Void, Error> in
+                    nightscout.uploadTreatments(Array(chunk))
+                }
+                .reduce(
+                    Just(()).setFailureType(to: Error.self)
+                        .eraseToAnyPublisher()
+                ) { (result, next) -> AnyPublisher<Void, Error> in
+                    Publishers.Concatenate(prefix: result, suffix: next).eraseToAnyPublisher()
+                }
+                .dropFirst()
                 .sink { completion in
                     switch completion {
                     case .finished: