@@ -30,7 +30,7 @@ final class DeviceDataManager {
3030 /// Should be accessed only on the main queue
3131 private( set) var lastError : ( date: Date , error: Error ) ?
3232
33- /// The last time a BLE heartbeat was received by the pump manager
33+ /// The last time a BLE heartbeat was received and acted upon.
3434 private var lastBLEDrivenUpdate = Date . distantPast
3535
3636 // MARK: - CGM
@@ -157,6 +157,40 @@ final class DeviceDataManager {
157157
158158 return Manager . init ( rawState: rawState) as? PumpManagerUI
159159 }
160+
161+ private func processCGMResult( _ manager: CGMManager , result: CGMResult ) {
162+ switch result {
163+ case . newData( let values) :
164+ log. default ( " CGMManager: \( type ( of: manager) ) did update with \( values. count) values " )
165+
166+ loopManager. addGlucose ( values) { result in
167+ if manager. shouldSyncToRemoteService {
168+ switch result {
169+ case . success( let values) :
170+ self . nightscoutDataManager. uploadGlucose ( values, sensorState: manager. sensorState)
171+ case . failure:
172+ break
173+ }
174+ }
175+
176+ self . log. default ( " Asserting current pump data " )
177+ self . pumpManager? . assertCurrentPumpData ( )
178+ }
179+ case . noData:
180+ log. default ( " CGMManager: \( type ( of: manager) ) did update with no data " )
181+
182+ pumpManager? . assertCurrentPumpData ( )
183+ case . error( let error) :
184+ log. default ( " CGMManager: \( type ( of: manager) ) did update with error: \( error) " )
185+
186+ self . setLastError ( error: error)
187+ log. default ( " Asserting current pump data " )
188+ pumpManager? . assertCurrentPumpData ( )
189+ }
190+
191+ updatePumpManagerBLEHeartbeatPreference ( )
192+ }
193+
160194
161195 var availableCGMManagers : [ AvailableDevice ] {
162196 return pluginManager. availableCGMManagers + availableStaticCGMManagers
@@ -294,36 +328,8 @@ extension DeviceDataManager: CGMManagerDelegate {
294328
295329 func cgmManager( _ manager: CGMManager , didUpdateWith result: CGMResult ) {
296330 dispatchPrecondition ( condition: . onQueue( queue) )
297- switch result {
298- case . newData( let values) :
299- log. default ( " CGMManager:%{public}@ did update with %d values " , String ( describing: type ( of: manager) ) , values. count)
300-
301- loopManager. addGlucose ( values) { result in
302- if manager. shouldSyncToRemoteService {
303- switch result {
304- case . success( let values) :
305- self . remoteDataServicesManager. upload ( glucoseValues: values, sensorState: manager. sensorState)
306- case . failure:
307- break
308- }
309- }
310-
311- self . log. default ( " Asserting current pump data " )
312- self . pumpManager? . assertCurrentPumpData ( )
313- }
314- case . noData:
315- log. default ( " CGMManager:%{public}@ did update with no data " , String ( describing: type ( of: manager) ) )
316-
317- pumpManager? . assertCurrentPumpData ( )
318- case . error( let error) :
319- log. default ( " CGMManager:%{public}@ did update with error: %{public}@ " , String ( describing: type ( of: manager) ) , String ( describing: error) )
320-
321- self . setLastError ( error: error)
322- log. default ( " Asserting current pump data " )
323- pumpManager? . assertCurrentPumpData ( )
324- }
325-
326- updatePumpManagerBLEHeartbeatPreference ( )
331+ lastBLEDrivenUpdate = Date ( )
332+ processCGMResult ( manager, result: result) ;
327333 }
328334
329335 func startDateToFilterNewData( for manager: CGMManager ) -> Date ? {
@@ -377,7 +383,11 @@ extension DeviceDataManager: PumpManagerDelegate {
377383 bleHeartbeatUpdateInterval = . minutes( 1 )
378384 case let interval? :
379385 // If we looped successfully less than 5 minutes ago, ignore the heartbeat.
386+ <<<<<<< HEAD
380387 log. default ( " PumpManager:%{public}@ ignoring heartbeat. Last loop completed %{public}@ minutes ago " , String ( describing: type ( of: pumpManager) ) , String ( describing: interval. minutes) )
388+ =======
389+ log. default ( " PumpManager: \( type ( of: pumpManager) ) ignoring pumpManager heartbeat. Last loop completed \( - interval. minutes) minutes ago " )
390+ >>>>>>> origin/ dev
381391 return
382392 }
383393
@@ -394,7 +404,7 @@ extension DeviceDataManager: PumpManagerDelegate {
394404
395405 if let manager = self . cgmManager {
396406 self . queue. async {
397- self . cgmManager ( manager, didUpdateWith : result)
407+ self . processCGMResult ( manager, result : result)
398408 }
399409 }
400410 }
@@ -671,3 +681,22 @@ extension Notification.Name {
671681 static let PumpManagerChanged = Notification . Name ( rawValue: " com.loopKit.notification.PumpManagerChanged " )
672682 static let PumpEventsAdded = Notification . Name ( rawValue: " com.loopKit.notification.PumpEventsAdded " )
673683}
684+
685+ // MARK: - Remote Notification Handling
686+ extension DeviceDataManager {
687+ func handleRemoteNotification( _ notification: [ String : AnyObject ] ) {
688+
689+ if let command = RemoteCommand ( notification: notification, allowedPresets: loopManager. settings. overridePresets) {
690+ switch command {
691+ case . temporaryScheduleOverride( let override) :
692+ log. default ( " Enacting remote temporary override: \( override) " )
693+ loopManager. settings. scheduleOverride = override
694+ case . cancelTemporaryOverride:
695+ log. default ( " Canceling temporary override from remote command " )
696+ loopManager. settings. scheduleOverride = nil
697+ }
698+ } else {
699+ log. info ( " Unhandled remote notification: \( notification) " )
700+ }
701+ }
702+ }
0 commit comments