Kaynağa Gözat

Revert "Merge pull request #331 from nightscout/fix-processqueue-precondition"

This reverts commit 3774f4af3623e6e3e583eb62044f52db451cfdc3, reversing
changes made to 47cec889196dff2ee55e8ea827b97fcc06433960.
Deniz Cengiz 1 yıl önce
ebeveyn
işleme
cb79dacdcc

+ 31 - 63
Trio/Sources/APS/CGM/PluginSource.swift

@@ -105,81 +105,53 @@ extension PluginSource: CGMManagerDelegate {
     func recordRetractedAlert(_: LoopKit.Alert, at _: Date) {}
     func recordRetractedAlert(_: LoopKit.Alert, at _: Date) {}
 
 
     func cgmManagerWantsDeletion(_ manager: CGMManager) {
     func cgmManagerWantsDeletion(_ manager: CGMManager) {
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
-            debug(.deviceManager, " CGM Manager with identifier \(manager.pluginIdentifier) wants deletion")
-            self.glucoseManager?.deleteGlucoseSource()
-        }
+        dispatchPrecondition(condition: .onQueue(processQueue))
+        debug(.deviceManager, " CGM Manager with identifier \(manager.pluginIdentifier) wants deletion")
+        glucoseManager?.deleteGlucoseSource()
     }
     }
 
 
     func cgmManager(_: CGMManager, hasNew readingResult: CGMReadingResult) {
     func cgmManager(_: CGMManager, hasNew readingResult: CGMReadingResult) {
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
-            self.promise?(self.readCGMResult(readingResult: readingResult))
-            debug(.deviceManager, "CGM PLUGIN - Direct return done")
-        }
+        dispatchPrecondition(condition: .onQueue(processQueue))
+        promise?(readCGMResult(readingResult: readingResult))
+        debug(.deviceManager, "CGM PLUGIN - Direct return done")
     }
     }
 
 
     func cgmManager(_: LoopKit.CGMManager, hasNew events: [LoopKit.PersistedCgmEvent]) {
     func cgmManager(_: LoopKit.CGMManager, hasNew events: [LoopKit.PersistedCgmEvent]) {
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
-            // TODO: Events in APS ?
-            // currently only display in log the date of the event
-            events.forEach { event in
-                debug(.deviceManager, "events from CGM at \(event.date)")
-
-                if event.type == .sensorStart {
-                    self.glucoseManager?.removeCalibrations()
-                }
+        dispatchPrecondition(condition: .onQueue(processQueue))
+        // TODO: Events in APS ?
+        // currently only display in log the date of the event
+        events.forEach { event in
+            debug(.deviceManager, "events from CGM at \(event.date)")
+
+            if event.type == .sensorStart {
+                self.glucoseManager?.removeCalibrations()
             }
             }
         }
         }
     }
     }
 
 
     func startDateToFilterNewData(for _: CGMManager) -> Date? {
     func startDateToFilterNewData(for _: CGMManager) -> Date? {
-        var date: Date?
-
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
-            date = glucoseStorage.lastGlucoseDate()
-        }
-
-        return date
+        dispatchPrecondition(condition: .onQueue(processQueue))
+        return glucoseStorage.lastGlucoseDate()
     }
     }
 
 
     func cgmManagerDidUpdateState(_ cgmManager: CGMManager) {
     func cgmManagerDidUpdateState(_ cgmManager: CGMManager) {
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
-            guard let fetchGlucoseManager = self.glucoseManager else {
-                debug(
-                    .deviceManager,
-                    "Could not gracefully unwrap FetchGlucoseManager upon observing LoopKit's cgmManagerDidUpdateState"
-                )
-                return
-            }
-            // Adjust app-specific NS Upload setting value when CGM setting is changed
-            fetchGlucoseManager.settingsManager.settings.uploadGlucose = cgmManager.shouldSyncToRemoteService
+        dispatchPrecondition(condition: .onQueue(processQueue))
 
 
-            fetchGlucoseManager.updateGlucoseSource(
-                cgmGlucoseSourceType: fetchGlucoseManager.settingsManager.settings.cgm,
-                cgmGlucosePluginId: fetchGlucoseManager.settingsManager.settings.cgmPluginIdentifier,
-                newManager: cgmManager as? CGMManagerUI
+        guard let fetchGlucoseManager = glucoseManager else {
+            debug(
+                .deviceManager,
+                "Could not gracefully unwrap FetchGlucoseManager upon observing LoopKit's cgmManagerDidUpdateState"
             )
             )
+            return
         }
         }
+        // Adjust app-specific NS Upload setting value when CGM setting is changed
+        fetchGlucoseManager.settingsManager.settings.uploadGlucose = cgmManager.shouldSyncToRemoteService
+
+        fetchGlucoseManager.updateGlucoseSource(
+            cgmGlucoseSourceType: fetchGlucoseManager.settingsManager.settings.cgm,
+            cgmGlucosePluginId: fetchGlucoseManager.settingsManager.settings.cgmPluginIdentifier,
+            newManager: cgmManager as? CGMManagerUI
+        )
     }
     }
 
 
     func credentialStoragePrefix(for _: CGMManager) -> String {
     func credentialStoragePrefix(for _: CGMManager) -> String {
@@ -190,11 +162,7 @@ extension PluginSource: CGMManagerDelegate {
     func cgmManager(_: CGMManager, didUpdate status: CGMManagerStatus) {
     func cgmManager(_: CGMManager, didUpdate status: CGMManagerStatus) {
         debug(.deviceManager, "CGM Manager did update state to \(status)")
         debug(.deviceManager, "CGM Manager did update state to \(status)")
 
 
-        processQueue.async { [weak self] in
-            guard let self = self else { return }
-
-            dispatchPrecondition(condition: .onQueue(self.processQueue))
-
+        processQueue.async {
             if self.cgmHasValidSensorSession != status.hasValidSensorSession {
             if self.cgmHasValidSensorSession != status.hasValidSensorSession {
                 self.cgmHasValidSensorSession = status.hasValidSensorSession
                 self.cgmHasValidSensorSession = status.hasValidSensorSession
             }
             }

+ 7 - 3
Trio/Sources/APS/FetchGlucoseManager.swift

@@ -164,9 +164,13 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
         debug(.apsManager, "plugin : \(String(describing: cgmManager?.pluginIdentifier))")
         debug(.apsManager, "plugin : \(String(describing: cgmManager?.pluginIdentifier))")
 
 
         if let manager = newManager {
         if let manager = newManager {
-            removeCalibrations()
-            cgmManager = manager
-            glucoseSource = nil
+            // If the pointer to manager is the *same* as our current `cgmManager`, skip re-init
+            if manager !== cgmManager {
+                // or do a more thorough check to see if it is the same class & state
+                removeCalibrations()
+                cgmManager = manager
+                glucoseSource = nil
+            }
         } else if self.cgmGlucoseSourceType == .plugin, cgmManager == nil, let rawCGMManager = rawCGMManager {
         } else if self.cgmGlucoseSourceType == .plugin, cgmManager == nil, let rawCGMManager = rawCGMManager {
             cgmManager = cgmManagerFromRawValue(rawCGMManager)
             cgmManager = cgmManagerFromRawValue(rawCGMManager)
             updateManagerUnits(cgmManager)
             updateManagerUnits(cgmManager)