Ivan Valkou пре 5 година
родитељ
комит
e5a09dd53b
2 измењених фајлова са 28 додато и 17 уклоњено
  1. 26 15
      FreeAPS/Sources/APS/APSManager.swift
  2. 2 2
      FreeAPS/Sources/Models/Suggestion.swift

+ 26 - 15
FreeAPS/Sources/APS/APSManager.swift

@@ -106,22 +106,33 @@ final class BaseAPSManager: APSManager, Injectable {
             return
             return
         }
         }
 
 
-        enactCancellable = pump.enactTempBasal(
-            unitsPerHour: Double(suggested.rate),
-            for: TimeInterval(suggested.duration * 60)
-        )
-        .flatMap { dose -> AnyPublisher<DoseEntry, Error> in
-            let units = suggested.units.map { Double($0) } ?? 0
-            guard units > 0 else { return Just(dose).setFailureType(to: Error.self).eraseToAnyPublisher() }
-            return pump.enactBolus(units: units, automatic: true)
-        }
-        .sink { completion in
-            if case let .failure(error) = completion {
-                print("Loop failed with error: \(error.localizedDescription)")
+        let basalPublisher: AnyPublisher<Void, Error> = {
+            guard let rate = suggested.rate, let duration = suggested.duration else {
+                return Just(()).setFailureType(to: Error.self)
+                    .eraseToAnyPublisher()
+            }
+            return pump.enactTempBasal(unitsPerHour: Double(rate), for: TimeInterval(duration * 60)).map { _ in () }
+                .eraseToAnyPublisher()
+        }()
+
+        let bolusPublisher: AnyPublisher<Void, Error> = {
+            guard let units = suggested.units else {
+                return Just(()).setFailureType(to: Error.self)
+                    .eraseToAnyPublisher()
+            }
+            return pump.enactBolus(units: Double(units), automatic: true).map { _ in () }
+                .eraseToAnyPublisher()
+        }()
+
+        enactCancellable = basalPublisher
+            .flatMap { _ in bolusPublisher }
+            .sink { completion in
+                if case let .failure(error) = completion {
+                    print("Loop failed with error: \(error.localizedDescription)")
+                }
+            } receiveValue: {
+                print("Loop succeeded")
             }
             }
-        } receiveValue: { _ in
-            print("Loop failed succeses")
-        }
     }
     }
 }
 }
 
 

+ 2 - 2
FreeAPS/Sources/Models/Suggestion.swift

@@ -6,6 +6,6 @@ struct Suggestion: JSON {
     let insulinReq: Decimal
     let insulinReq: Decimal
     let eventualBG: Int
     let eventualBG: Int
     let sensitivityRatio: Decimal
     let sensitivityRatio: Decimal
-    let rate: Decimal
-    let duration: Int
+    let rate: Decimal?
+    let duration: Int?
 }
 }