Kaynağa Gözat

Fix infinite red loop

(cherry picked from commit f4b069175082c99c0f23825ed4823c71fbf2c227)
Ivan Valkou 5 yıl önce
ebeveyn
işleme
2a9f7eb8d0

+ 1 - 1
FreeAPS.xcodeproj/project.pbxproj

@@ -1101,9 +1101,9 @@
 				38E98A2C25F52DC400C0CED0 /* NSLocking+Extensions.swift */,
 				38C4D33925E9A1ED00D30B77 /* NSObject+AssociatedValues.swift */,
 				3811DE5725C9D4D500A708ED /* ProgressBar.swift */,
-				3811DEE325CA063400A708ED /* PropertyWrappers */,
 				3811DE5525C9D4D500A708ED /* Publisher.swift */,
 				38E98A3625F5509500C0CED0 /* String+Extensions.swift */,
+				3811DEE325CA063400A708ED /* PropertyWrappers */,
 			);
 			path = Helpers;
 			sourceTree = "<group>";

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

@@ -141,6 +141,11 @@ final class BaseAPSManager: APSManager, Injectable {
     }
 
     private func loop() {
+        guard !isLooping.value else {
+            warning(.apsManager, "Already looping, skip")
+            return
+        }
+
         debug(.apsManager, "Starting loop")
         isLooping.send(true)
         determineBasal()
@@ -198,6 +203,7 @@ final class BaseAPSManager: APSManager, Injectable {
     }
 
     func determineBasal() -> AnyPublisher<Bool, Never> {
+        debug(.apsManager, "Start determine basal")
         guard let glucose = storage.retrieve(OpenAPS.Monitor.glucose, as: [BloodGlucose].self), glucose.count >= 36 else {
             debug(.apsManager, "Not enough glucose data")
             processError(APSError.glucoseError(message: "Not enough glucose data"))

+ 3 - 1
FreeAPS/Sources/Application/FreeAPSApp.swift

@@ -41,9 +41,11 @@ private extension Swinject.Resolver {
         FreeAPSApp.loadServices()
     }
 
+    private let mainView = Main.Builder(resolver: FreeAPSApp.resolver).buildView()
+
     var body: some Scene {
         WindowGroup {
-            Main.Builder(resolver: FreeAPSApp.resolver).buildView()
+            mainView
         }
         .onChange(of: scenePhase) { newScenePhase in
             switch newScenePhase {

+ 2 - 1
FreeAPS/Sources/Modules/Bolus/BolusViewModel.swift

@@ -31,7 +31,8 @@ extension Bolus {
             if waitForSuggestionInitial {
                 apsManager.determineBasal()
                     .receive(on: DispatchQueue.main)
-                    .sink { ok in
+                    .sink { [weak self] ok in
+                        guard let self = self else { return }
                         if !ok {
                             self.waitForSuggestion = false
                             self.inslinRequired = 0