@@ -12,7 +12,7 @@ import LoopCore
1212import LoopAlgorithm
1313
1414protocol CGMStalenessMonitorDelegate : AnyObject {
15- func getLatestCGMGlucose( since: Date , completion : @escaping ( _ result : Swift . Result < StoredGlucoseSample ? , Error > ) -> Void )
15+ func getLatestCGMGlucose( since: Date ) async throws -> StoredGlucoseSample ?
1616}
1717
1818class CGMStalenessMonitor {
@@ -21,13 +21,7 @@ class CGMStalenessMonitor {
2121
2222 private var cgmStalenessTimer : Timer ?
2323
24- weak var delegate : CGMStalenessMonitorDelegate ? = nil {
25- didSet {
26- if delegate != nil {
27- checkCGMStaleness ( )
28- }
29- }
30- }
24+ weak var delegate : CGMStalenessMonitorDelegate ?
3125
3226 @Published var cgmDataIsStale : Bool = true {
3327 didSet {
@@ -57,29 +51,27 @@ class CGMStalenessMonitor {
5751 cgmStalenessTimer? . invalidate ( )
5852 cgmStalenessTimer = Timer . scheduledTimer ( withTimeInterval: expiration. timeIntervalSinceNow, repeats: false ) { [ weak self] _ in
5953 self ? . log. debug ( " cgmStalenessTimer fired " )
60- self ? . checkCGMStaleness ( )
54+ Task {
55+ await self ? . checkCGMStaleness ( )
56+ }
6157 }
6258 cgmStalenessTimer? . tolerance = CGMStalenessMonitor . cgmStalenessTimerTolerance
6359 }
6460
65- private func checkCGMStaleness( ) {
66- delegate? . getLatestCGMGlucose ( since: Date ( timeIntervalSinceNow: - LoopAlgorithm. inputDataRecencyInterval) ) { ( result) in
67- DispatchQueue . main. async {
68- self . log. debug ( " Fetched latest CGM Glucose for checkCGMStaleness: %{public}@ " , String ( describing: result) )
69- switch result {
70- case . success( let sample) :
71- if let sample = sample {
72- self . cgmDataIsStale = false
73- self . updateCGMStalenessTimer ( expiration: sample. startDate. addingTimeInterval ( LoopAlgorithm . inputDataRecencyInterval + CGMStalenessMonitor. cgmStalenessTimerTolerance) )
74- } else {
75- self . cgmDataIsStale = true
76- }
77- case . failure( let error) :
78- self . log. error ( " Unable to get latest CGM clucose: %{public}@ " , String ( describing: error) )
79- // Some kind of system error; check again in 5 minutes
80- self . updateCGMStalenessTimer ( expiration: Date ( timeIntervalSinceNow: . minutes( 5 ) ) )
81- }
61+ func checkCGMStaleness( ) async {
62+ do {
63+ let sample = try await delegate? . getLatestCGMGlucose ( since: Date ( timeIntervalSinceNow: - LoopAlgorithm. inputDataRecencyInterval) )
64+ self . log. debug ( " Fetched latest CGM Glucose for checkCGMStaleness: %{public}@ " , String ( describing: sample) )
65+ if let sample = sample {
66+ self . cgmDataIsStale = false
67+ self . updateCGMStalenessTimer ( expiration: sample. startDate. addingTimeInterval ( LoopAlgorithm . inputDataRecencyInterval + CGMStalenessMonitor. cgmStalenessTimerTolerance) )
68+ } else {
69+ self . cgmDataIsStale = true
8270 }
71+ } catch {
72+ self . log. error ( " Unable to get latest CGM clucose: %{public}@ " , String ( describing: error) )
73+ // Some kind of system error; check again in 5 minutes
74+ self . updateCGMStalenessTimer ( expiration: Date ( timeIntervalSinceNow: . minutes( 5 ) ) )
8375 }
8476 }
8577}
0 commit comments