|
|
@@ -5,6 +5,7 @@ import DanaKit
|
|
|
import Foundation
|
|
|
import LoopKit
|
|
|
import LoopKitUI
|
|
|
+import MedtrumKit
|
|
|
import MinimedKit
|
|
|
import MockKit
|
|
|
import OmniBLE
|
|
|
@@ -27,6 +28,7 @@ protocol DeviceDataManager: GlucoseSource {
|
|
|
var errorSubject: PassthroughSubject<Error, Never> { get }
|
|
|
var pumpName: CurrentValueSubject<String, Never> { get }
|
|
|
var pumpExpiresAtDate: CurrentValueSubject<Date?, Never> { get }
|
|
|
+ var pumpActivatedAtDate: CurrentValueSubject<Date?, Never> { get }
|
|
|
|
|
|
func heartbeat(date: Date)
|
|
|
func createBolusProgressReporter() -> DoseProgressReporter?
|
|
|
@@ -38,6 +40,7 @@ private let staticPumpManagers: [PumpManagerUI.Type] = [
|
|
|
OmnipodPumpManager.self,
|
|
|
OmniBLEPumpManager.self,
|
|
|
DanaKitPumpManager.self,
|
|
|
+ MedtrumPumpManager.self,
|
|
|
MockPumpManager.self
|
|
|
]
|
|
|
|
|
|
@@ -46,6 +49,7 @@ private let staticPumpManagersByIdentifier: [String: PumpManagerUI.Type] = [
|
|
|
OmnipodPumpManager.pluginIdentifier: OmnipodPumpManager.self,
|
|
|
OmniBLEPumpManager.pluginIdentifier: OmniBLEPumpManager.self,
|
|
|
DanaKitPumpManager.pluginIdentifier: DanaKitPumpManager.self,
|
|
|
+ MedtrumPumpManager.pluginIdentifier: MedtrumPumpManager.self,
|
|
|
MockPumpManager.pluginIdentifier: MockPumpManager.self
|
|
|
]
|
|
|
|
|
|
@@ -106,6 +110,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
|
|
|
storage.save(modifiedPreferences, as: OpenAPS.Settings.preferences)
|
|
|
|
|
|
if let omnipod = pumpManager as? OmnipodPumpManager {
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
guard let endTime = omnipod.state.podState?.expiresAt else {
|
|
|
pumpExpiresAtDate.send(nil)
|
|
|
return
|
|
|
@@ -113,12 +118,27 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
|
|
|
pumpExpiresAtDate.send(endTime)
|
|
|
}
|
|
|
if let omnipodBLE = pumpManager as? OmniBLEPumpManager {
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
guard let endTime = omnipodBLE.state.podState?.expiresAt else {
|
|
|
pumpExpiresAtDate.send(nil)
|
|
|
return
|
|
|
}
|
|
|
pumpExpiresAtDate.send(endTime)
|
|
|
}
|
|
|
+ if let medtrumPump = pumpManager as? MedtrumPumpManager {
|
|
|
+ guard let endTime = medtrumPump.state.patchExpiresAt else {
|
|
|
+ pumpExpiresAtDate.send(nil)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ pumpExpiresAtDate.send(endTime)
|
|
|
+
|
|
|
+ switch medtrumPump.state.expiryMode {
|
|
|
+ case .default:
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
+ case .extended:
|
|
|
+ pumpActivatedAtDate.send(medtrumPump.state.patchActivatedAt)
|
|
|
+ }
|
|
|
+ }
|
|
|
if let simulatorPump = pumpManager as? MockPumpManager {
|
|
|
pumpDisplayState.value = PumpDisplayState(name: simulatorPump.localizedTitle, image: simulatorPump.smallImage)
|
|
|
pumpName.send(simulatorPump.localizedTitle)
|
|
|
@@ -163,6 +183,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
|
|
|
} else {
|
|
|
pumpDisplayState.value = nil
|
|
|
pumpExpiresAtDate.send(nil)
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
pumpName.send("")
|
|
|
// Reset bolusIncrement setting to default value, which is 0.1 U
|
|
|
var modifiedPreferences = settingsManager.preferences
|
|
|
@@ -202,6 +223,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
|
|
|
|
|
|
let pumpDisplayState = CurrentValueSubject<PumpDisplayState?, Never>(nil)
|
|
|
let pumpExpiresAtDate = CurrentValueSubject<Date?, Never>(nil)
|
|
|
+ let pumpActivatedAtDate = CurrentValueSubject<Date?, Never>(nil)
|
|
|
let pumpName = CurrentValueSubject<String, Never>("Pump")
|
|
|
|
|
|
init(resolver: Resolver) {
|
|
|
@@ -460,6 +482,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
|
|
|
manualTempBasal.send(false)
|
|
|
}
|
|
|
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
guard let endTime = omnipod.state.podState?.expiresAt else {
|
|
|
pumpExpiresAtDate.send(nil)
|
|
|
return
|
|
|
@@ -493,6 +516,7 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
|
|
|
manualTempBasal.send(false)
|
|
|
}
|
|
|
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
guard let endTime = omnipodBLE.state.podState?.expiresAt else {
|
|
|
pumpExpiresAtDate.send(nil)
|
|
|
return
|
|
|
@@ -504,6 +528,26 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if let medtrumPump = pumpManager as? MedtrumPumpManager {
|
|
|
+ storage.save(Decimal(medtrumPump.state.reservoir), as: OpenAPS.Monitor.reservoir)
|
|
|
+ broadcaster.notify(PumpReservoirObserver.self, on: processQueue) {
|
|
|
+ $0.pumpReservoirDidChange(Decimal(medtrumPump.state.reservoir))
|
|
|
+ }
|
|
|
+
|
|
|
+ guard let endTime = medtrumPump.state.patchExpiresAt else {
|
|
|
+ pumpExpiresAtDate.send(nil)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ pumpExpiresAtDate.send(endTime)
|
|
|
+
|
|
|
+ switch medtrumPump.state.expiryMode {
|
|
|
+ case .default:
|
|
|
+ pumpActivatedAtDate.send(nil)
|
|
|
+ case .extended:
|
|
|
+ pumpActivatedAtDate.send(medtrumPump.state.patchActivatedAt)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if let simulatorPump = pumpManager as? MockPumpManager {
|
|
|
broadcaster.notify(PumpReservoirObserver.self, on: processQueue) {
|
|
|
$0.pumpReservoirDidChange(Decimal(simulatorPump.state.reservoirUnitsRemaining))
|