Ivan Valkou 4 лет назад
Родитель
Сommit
885222df30

+ 4 - 1
FreeAPS/Sources/APS/APSManager.swift

@@ -288,7 +288,7 @@ final class BaseAPSManager: APSManager, Injectable {
     func roundBolus(amount: Decimal) -> Decimal {
         guard let pump = pumpManager else { return amount }
         let rounded = Decimal(pump.roundToSupportedBolusVolume(units: Double(amount)))
-        let maxBolus = Decimal(pump.roundToSupportedBolusVolume(units: Double(settingsManager.pumpSettings.maxBolus))) 
+        let maxBolus = Decimal(pump.roundToSupportedBolusVolume(units: Double(settingsManager.pumpSettings.maxBolus)))
         return min(rounded, maxBolus)
     }
 
@@ -345,6 +345,9 @@ final class BaseAPSManager: APSManager, Injectable {
                 debug(.apsManager, "Temp Basal succeeded")
                 let temp = TempBasal(duration: Int(duration / 60), rate: Decimal(rate), temp: .absolute, timestamp: Date())
                 self.storage.save(temp, as: OpenAPS.Monitor.tempBasal)
+                if rate == 0, duration == 0 {
+                    self.pumpHistoryStorage.saveCancelTempEvents()
+                }
             case let .failure(error):
                 debug(.apsManager, "Temp Basal failed with error: \(error.localizedDescription)")
                 self.processError(APSError.pumpError(error))

+ 49 - 8
FreeAPS/Sources/APS/Storage/PumpHistoryStorage.swift

@@ -13,6 +13,7 @@ protocol PumpHistoryStorage {
     func storeJournalCarbs(_ carbs: Int)
     func recent() -> [PumpHistoryEvent]
     func nightscoutTretmentsNotUploaded() -> [NigtscoutTreatment]
+    func saveCancelTempEvents()
 }
 
 final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
@@ -45,26 +46,34 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
                         carbInput: nil
                     )]
                 case .tempBasal:
-                    // get only start of TBR
-                    guard let dose = event.dose, dose.deliveredUnits ?? 0 == 0 else { return [] }
+                    guard let dose = event.dose else { return [] }
+
                     let rate = Decimal(string: dose.unitsPerHour.description)
-                    let minutes = Int((dose.endDate - dose.startDate).timeInterval / 60)
+                    let minutes = (dose.endDate - dose.startDate).timeInterval / 60
+                    let delivered = dose.deliveredUnits
+                    let date = event.date
+
+                    let isCancel = !event.isMutable && delivered != nil
+                    guard !isCancel else { return [] }
+
+                    let basalID = UUID().uuidString
+
                     return [
                         PumpHistoryEvent(
-                            id: id,
+                            id: basalID,
                             type: .tempBasalDuration,
-                            timestamp: event.date,
+                            timestamp: date,
                             amount: nil,
                             duration: nil,
-                            durationMin: minutes,
+                            durationMin: Int(round(minutes)),
                             rate: nil,
                             temp: nil,
                             carbInput: nil
                         ),
                         PumpHistoryEvent(
-                            id: "_" + id,
+                            id: "_" + basalID,
                             type: .tempBasal,
-                            timestamp: event.date,
+                            timestamp: date,
                             amount: nil,
                             duration: nil,
                             durationMin: nil,
@@ -259,4 +268,36 @@ final class BasePumpHistoryStorage: PumpHistoryStorage, Injectable {
 
         return treatments.sorted { $0.createdAt! > $1.createdAt! }
     }
+
+    func saveCancelTempEvents() {
+        let basalID = UUID().uuidString
+        let date = Date()
+
+        let events = [
+            PumpHistoryEvent(
+                id: basalID,
+                type: .tempBasalDuration,
+                timestamp: date,
+                amount: nil,
+                duration: nil,
+                durationMin: 0,
+                rate: nil,
+                temp: nil,
+                carbInput: nil
+            ),
+            PumpHistoryEvent(
+                id: "_" + basalID,
+                type: .tempBasal,
+                timestamp: date,
+                amount: nil,
+                duration: nil,
+                durationMin: nil,
+                rate: 0,
+                temp: .absolute,
+                carbInput: nil
+            )
+        ]
+
+        storeEvents(events)
+    }
 }

+ 3 - 3
FreeAPS/Sources/Modules/DataTable/DataTableDataFlow.swift

@@ -71,8 +71,8 @@ enum DataTable {
         }
 
         var amountText: String {
-            guard let amount = amount else {
-                return ""
+            guard let amount = amount, amount > 0 else {
+                return "Cancel temp"
             }
 
             switch type {
@@ -120,7 +120,7 @@ enum DataTable {
         }
 
         var durationText: String? {
-            guard let duration = duration else {
+            guard let duration = duration, duration > 0 else {
                 return nil
             }
             return numberFormater.string(from: duration as NSNumber)! + " min"

+ 2 - 0
FreeAPS/Sources/Modules/Settings/View/SettingsRootView.swift

@@ -90,6 +90,8 @@ extension Settings {
                                 .navigationLink(to: .configEditor(file: OpenAPS.FreeAPS.tempTargetsPresets), from: self)
                             Text("Calibrations")
                                 .navigationLink(to: .configEditor(file: OpenAPS.FreeAPS.calibrations), from: self)
+                            Text("Current Temp")
+                                .navigationLink(to: .configEditor(file: OpenAPS.Monitor.tempBasal), from: self)
                             Text("Middleware")
                                 .navigationLink(to: .configEditor(file: OpenAPS.Middleware.determineBasal), from: self)
                             Text("Edit settings json")