|
|
@@ -682,6 +682,7 @@ final class BaseAPSManager: APSManager, Injectable {
|
|
|
|
|
|
let rateValue = determination.rate
|
|
|
let durationValue = determination.duration
|
|
|
+ let smbToDeliver = determination.smbToDeliver
|
|
|
|
|
|
let basalPublisher: AnyPublisher<Void, Error> = Deferred { () -> AnyPublisher<Void, Error> in
|
|
|
if let error = self.verifyStatus() {
|
|
|
@@ -697,15 +698,14 @@ final class BaseAPSManager: APSManager, Injectable {
|
|
|
unitsPerHour: Double(truncating: rate as NSNumber),
|
|
|
for: TimeInterval(durationValue * 60)
|
|
|
).map { _ in
|
|
|
- self.privateContext.perform {
|
|
|
- let temp = TempBasal(
|
|
|
- duration: Int(durationValue),
|
|
|
- rate: ((rateValue ?? 0) as NSDecimalNumber) as Decimal,
|
|
|
- temp: .absolute,
|
|
|
- timestamp: Date()
|
|
|
- )
|
|
|
- self.storage.save(temp, as: OpenAPS.Monitor.tempBasal)
|
|
|
- }
|
|
|
+ let temp = TempBasal(
|
|
|
+ duration: Int(durationValue),
|
|
|
+ rate: ((rateValue ?? 0) as NSDecimalNumber) as Decimal,
|
|
|
+ temp: .absolute,
|
|
|
+ timestamp: Date()
|
|
|
+ )
|
|
|
+ self.storage.save(temp, as: OpenAPS.Monitor.tempBasal)
|
|
|
+
|
|
|
return ()
|
|
|
}
|
|
|
.eraseToAnyPublisher()
|
|
|
@@ -715,12 +715,12 @@ final class BaseAPSManager: APSManager, Injectable {
|
|
|
if let error = self.verifyStatus() {
|
|
|
return Fail(error: error).eraseToAnyPublisher()
|
|
|
}
|
|
|
- guard let smbToDeliver = determination.smbToDeliver else {
|
|
|
+ guard let smbAmount = smbToDeliver else {
|
|
|
debug(.apsManager, "No bolus required")
|
|
|
return Just(()).setFailureType(to: Error.self)
|
|
|
.eraseToAnyPublisher()
|
|
|
}
|
|
|
- return pump.enactBolus(units: Double(truncating: smbToDeliver), automatic: true).map { _ in
|
|
|
+ return pump.enactBolus(units: Double(truncating: smbAmount), automatic: true).map { _ in
|
|
|
self.bolusProgress.send(0)
|
|
|
return ()
|
|
|
}
|
|
|
@@ -732,137 +732,6 @@ final class BaseAPSManager: APSManager, Injectable {
|
|
|
.eraseToAnyPublisher()
|
|
|
}
|
|
|
|
|
|
-// private func enactDetermination() -> AnyPublisher<Void, Error> {
|
|
|
-// // Fetch determination within the correct context
|
|
|
-// Future<OrefDetermination?, Error> { promise in
|
|
|
-// self.privateContext.perform {
|
|
|
-// let determination = self.fetchDetermination()
|
|
|
-// promise(.success(determination))
|
|
|
-// }
|
|
|
-// }
|
|
|
-// .flatMap { determination -> AnyPublisher<Void, Error> in
|
|
|
-// guard let determination = determination else {
|
|
|
-// return Fail(error: APSError.apsError(message: "Determination not found")).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// guard let pump = self.pumpManager else {
|
|
|
-// return Fail(error: APSError.apsError(message: "Pump not set")).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// // Unable to do temp basal during manual temp basal 😁
|
|
|
-// if self.isManualTempBasal {
|
|
|
-// return Fail(error: APSError.manualBasalTemp(message: "Loop not possible during the manual basal temp"))
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// let basalPublisher: AnyPublisher<Void, Error> = Deferred { () -> AnyPublisher<Void, Error> in
|
|
|
-// if let error = self.verifyStatus() {
|
|
|
-// return Fail(error: error).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// guard let rate = determination.rate else {
|
|
|
-// debug(.apsManager, "No temp required")
|
|
|
-// return Just(()).setFailureType(to: Error.self)
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// return pump.enactTempBasal(
|
|
|
-// unitsPerHour: Double(truncating: rate as NSNumber),
|
|
|
-// for: TimeInterval((determination.duration ?? 0) * 60)
|
|
|
-// ).map { _ in
|
|
|
-// let temp = TempBasal(
|
|
|
-// duration: Int(determination.duration ?? 0),
|
|
|
-// rate: ((determination.rate ?? 0) as NSDecimalNumber) as Decimal,
|
|
|
-// temp: .absolute,
|
|
|
-// timestamp: Date()
|
|
|
-// )
|
|
|
-// self.storage.save(temp, as: OpenAPS.Monitor.tempBasal)
|
|
|
-// return ()
|
|
|
-// }
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }.eraseToAnyPublisher()
|
|
|
-//
|
|
|
-// let bolusPublisher: AnyPublisher<Void, Error> = Deferred { () -> AnyPublisher<Void, Error> in
|
|
|
-// if let error = self.verifyStatus() {
|
|
|
-// return Fail(error: error).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// guard let smbToDeliver = determination.smbToDeliver else {
|
|
|
-// debug(.apsManager, "No bolus required")
|
|
|
-// return Just(()).setFailureType(to: Error.self)
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// return pump.enactBolus(units: Double(truncating: smbToDeliver), automatic: true).map { _ in
|
|
|
-// self.bolusProgress.send(0)
|
|
|
-// return ()
|
|
|
-// }
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }.eraseToAnyPublisher()
|
|
|
-//
|
|
|
-// return basalPublisher.flatMap { bolusPublisher }.eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-
|
|
|
-// private func enactDetermination() -> AnyPublisher<Void, Error> {
|
|
|
-// guard let determination = fetchDetermination() else {
|
|
|
-// return Fail(error: APSError.apsError(message: "Determination not found")).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// guard let pump = pumpManager else {
|
|
|
-// return Fail(error: APSError.apsError(message: "Pump not set")).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// // unable to do temp basal during manual temp basal 😁
|
|
|
-// if isManualTempBasal {
|
|
|
-// return Fail(error: APSError.manualBasalTemp(message: "Loop not possible during the manual basal temp"))
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// let basalPublisher: AnyPublisher<Void, Error> = Deferred { () -> AnyPublisher<Void, Error> in
|
|
|
-// if let error = self.verifyStatus() {
|
|
|
-// return Fail(error: error).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-//
|
|
|
-// guard let rate = determination.rate else {
|
|
|
-// debug(.apsManager, "No temp required")
|
|
|
-// return Just(()).setFailureType(to: Error.self)
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// return pump.enactTempBasal(
|
|
|
-// unitsPerHour: Double(truncating: rate),
|
|
|
-// for: TimeInterval(determination.duration * 60)
|
|
|
-// ).map { _ in
|
|
|
-// let temp = TempBasal(
|
|
|
-// duration: Int(determination.duration),
|
|
|
-// rate: ((determination.rate ?? 0) as NSDecimalNumber) as Decimal,
|
|
|
-// temp: .absolute,
|
|
|
-// timestamp: Date()
|
|
|
-// )
|
|
|
-// self.storage.save(temp, as: OpenAPS.Monitor.tempBasal)
|
|
|
-// return ()
|
|
|
-// }
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }.eraseToAnyPublisher()
|
|
|
-//
|
|
|
-// let bolusPublisher: AnyPublisher<Void, Error> = Deferred { () -> AnyPublisher<Void, Error> in
|
|
|
-// if let error = self.verifyStatus() {
|
|
|
-// return Fail(error: error).eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// guard let smbToDeliver = determination.smbToDeliver else {
|
|
|
-// debug(.apsManager, "No bolus required")
|
|
|
-// return Just(()).setFailureType(to: Error.self)
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }
|
|
|
-// return pump.enactBolus(units: Double(truncating: smbToDeliver), automatic: true).map { _ in
|
|
|
-// self.bolusProgress.send(0)
|
|
|
-// return ()
|
|
|
-// }
|
|
|
-// .eraseToAnyPublisher()
|
|
|
-// }.eraseToAnyPublisher()
|
|
|
-//
|
|
|
-// return basalPublisher.flatMap { bolusPublisher }.eraseToAnyPublisher()
|
|
|
-//
|
|
|
-// }
|
|
|
-
|
|
|
private func reportEnacted(received: Bool) {
|
|
|
privateContext.performAndWait {
|
|
|
guard let determination = fetchDetermination(), determination.deliverAt != nil else {
|