diff --git a/OmniBLE/PumpManager/OmniBLEPumpManager.swift b/OmniBLE/PumpManager/OmniBLEPumpManager.swift index 3387449a..1b37a0ce 100644 --- a/OmniBLE/PumpManager/OmniBLEPumpManager.swift +++ b/OmniBLE/PumpManager/OmniBLEPumpManager.swift @@ -206,6 +206,13 @@ public class OmniBLEPumpManager: DeviceManager { delegate?.deviceManager(self, logEventForDeviceIdentifier: podAddress, type: type, message: message, completion: nil) } } + + // Not persisted + var provideHeartbeat: Bool = false + + public func setMustProvideBLEHeartbeat(_ mustProvideBLEHeartbeat: Bool) { + provideHeartbeat = mustProvideBLEHeartbeat + } private let pumpDelegate = WeakSynchronizedDelegate() @@ -1504,12 +1511,7 @@ extension OmniBLEPumpManager: PumpManager { public func removeStatusObserver(_ observer: PumpManagerStatusObserver) { statusObservers.removeElement(observer) } - - public func setMustProvideBLEHeartbeat(_ mustProvideBLEHeartbeat: Bool) { - // We can't implement this service for Dash (unless we can find some Dash hook for this). - // XXX PumpManager protocol probably should be updated to not to assume that this service is always available. - } - + public func ensureCurrentPumpData(completion: ((Date?) -> Void)?) { let shouldFetchStatus = setStateWithResult { (state) -> Bool? in guard state.hasActivePod else { @@ -2088,11 +2090,20 @@ extension OmniBLEPumpManager: PodCommsDelegate { case .success(let session): let _ = try? session.getStatus(confirmationBeepType: .none) self.silenceAcknowledgedAlerts() + session.dosesForStorage() { (doses) -> Bool in + return self.store(doses: doses, in: session) + } + if self.provideHeartbeat { + self.pumpDelegate.notify { (delegate) in + delegate?.pumpManagerBLEHeartbeatDidFire(self) + } + } case .failure: // Errors can be ignored here. break } } + } func podComms(_ podComms: PodComms, didChange podState: PodState) { diff --git a/OmniBLE/PumpManager/PodComms.swift b/OmniBLE/PumpManager/PodComms.swift index 1083d5be..840a8e96 100644 --- a/OmniBLE/PumpManager/PodComms.swift +++ b/OmniBLE/PumpManager/PodComms.swift @@ -379,11 +379,11 @@ public class PodComms: CustomDebugStringConvertible { // Use to serialize a set of Pod Commands for a given session func runSession(withName name: String, _ block: @escaping (_ result: SessionRunResult) -> Void) { - guard let manager = manager else { + guard let manager = manager, manager.peripheral.state == .connected else { block(.failure(PodCommsError.podNotConnected)) return } - + manager.runSession(withName: name) { () in guard self.podState != nil else { block(.failure(PodCommsError.noPodPaired)) diff --git a/OmniBLE/PumpManager/PumpManagerAlert.swift b/OmniBLE/PumpManager/PumpManagerAlert.swift index 0ddf7cea..440eb5b7 100644 --- a/OmniBLE/PumpManager/PumpManagerAlert.swift +++ b/OmniBLE/PumpManager/PumpManagerAlert.swift @@ -233,7 +233,7 @@ extension PumpManagerAlert: RawRepresentable { extension PodAlert { var isIgnored: Bool { switch self { - case .podSuspendedReminder: + case .podSuspendedReminder, .finishSetupReminder: return true default: return false