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

Check is looping before pump update

Ivan Valkou пре 4 година
родитељ
комит
9a214ebffb
2 измењених фајлова са 19 додато и 3 уклоњено
  1. 6 0
      FreeAPS/Sources/APS/APSManager.swift
  2. 13 3
      FreeAPS/Sources/APS/DeviceDataManager.swift

+ 6 - 0
FreeAPS/Sources/APS/APSManager.swift

@@ -106,6 +106,12 @@ final class BaseAPSManager: APSManager, Injectable {
         openAPS = OpenAPS(storage: storage)
         subscribe()
         lastLoopDateSubject.send(lastLoopDate)
+
+        isLooping
+            .sink { value in
+                self.deviceDataManager.loopInProgress = value
+            }
+            .store(in: &lifetime)
     }
 
     private func subscribe() {

+ 13 - 3
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -12,6 +12,7 @@ import UserNotifications
 
 protocol DeviceDataManager: GlucoseSource {
     var pumpManager: PumpManagerUI? { get set }
+    var loopInProgress: Bool { get set }
     var pumpDisplayState: CurrentValueSubject<PumpDisplayState?, Never> { get }
     var recommendsLoop: PassthroughSubject<Void, Never> { get }
     var bolusTrigger: PassthroughSubject<Bool, Never> { get }
@@ -51,6 +52,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
     let pumpNewStatus = PassthroughSubject<Void, Never>()
     @SyncAccess private var pumpUpdateCancellable: AnyCancellable?
     private var pumpUpdatePromise: Future<Bool, Never>.Promise?
+    @SyncAccess var loopInProgress: Bool = false
 
     var pumpManager: PumpManagerUI? {
         didSet {
@@ -100,7 +102,12 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
 
     func heartbeat(date: Date) {
         guard pumpUpdateCancellable == nil else {
-            warning(.deviceManager, "Pump updating already in progress")
+            warning(.deviceManager, "Pump updating already in progress. Skip updating.")
+            return
+        }
+
+        guard !loopInProgress else {
+            warning(.deviceManager, "Loop in progress. Skip updating.")
             return
         }
 
@@ -139,9 +146,12 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         pumpUpdateCancellable = nil
         pumpUpdatePromise = nil
         if !recommendsLoop {
-            warning(.deviceManager, "Loop recommendation time out or got error. Starting loop right now.")
+            warning(.deviceManager, "Loop recommendation time out or got error. Trying to loop right now.")
+        }
+        guard !loopInProgress else {
+            warning(.deviceManager, "Loop already in progress. Skip recommendation.")
+            return
         }
-
         self.recommendsLoop.send()
     }