ソースを参照

Fallback on suggested if enacted is not present

Jonas Björkert 1 年間 前
コミット
91ea26dc13
1 ファイル変更20 行追加15 行削除
  1. 20 15
      LoopFollow/Controllers/Nightscout/DeviceStatusOpenAPS.swift

+ 20 - 15
LoopFollow/Controllers/Nightscout/DeviceStatusOpenAPS.swift

@@ -17,17 +17,22 @@ extension MainViewController {
                 LoopStatusLabel.text = "X"
                 LoopStatusLabel.text = "X"
                 latestLoopStatusString = "X"
                 latestLoopStatusString = "X"
             } else {
             } else {
-                guard let enacted = lastLoopRecord["enacted"] as? [String: AnyObject] else {
+                guard let enactedOrSuggested = lastLoopRecord["enacted"] as? [String: AnyObject] ?? lastLoopRecord["suggested"] as? [String: AnyObject] else {
                     LoopStatusLabel.text = "↻"
                     LoopStatusLabel.text = "↻"
                     latestLoopStatusString = "↻"
                     latestLoopStatusString = "↻"
                     evaluateNotLooping(lastLoopTime: lastLoopTime)
                     evaluateNotLooping(lastLoopTime: lastLoopTime)
                     return
                     return
                 }
                 }
-                let wasEnacted = true
 
 
-                // Updated
-                if let enactedTimestamp = enacted["timestamp"] as? String,
-                   let enactedTime = formatter.date(from: enactedTimestamp)?.timeIntervalSince1970 {
+                var wasEnacted : Bool
+                if let enacted = lastLoopRecord["enacted"] as? [String: AnyObject] {
+                    wasEnacted = NSDictionary(dictionary: enacted).isEqual(to: enactedOrSuggested)
+                } else {
+                    wasEnacted = false
+                }
+
+                if let timestamp = enactedOrSuggested["timestamp"] as? String,
+                   let enactedTime = formatter.date(from: timestamp)?.timeIntervalSince1970 {
                     let formattedTime = Localizer.formatTimestampToLocalString(enactedTime)
                     let formattedTime = Localizer.formatTimestampToLocalString(enactedTime)
                     infoManager.updateInfoData(type: .updated, value: formattedTime)
                     infoManager.updateInfoData(type: .updated, value: formattedTime)
                 }
                 }
@@ -35,7 +40,7 @@ extension MainViewController {
                 // ISF
                 // ISF
                 let profileISF = profileManager.currentISF()
                 let profileISF = profileManager.currentISF()
                 var enactedISF: HKQuantity?
                 var enactedISF: HKQuantity?
-                if let enactedISFValue = enacted["ISF"] as? Double {
+                if let enactedISFValue = enactedOrSuggested["ISF"] as? Double {
                     var determinedISFUnit: HKUnit = .milligramsPerDeciliter
                     var determinedISFUnit: HKUnit = .milligramsPerDeciliter
                     if enactedISFValue < 15 {
                     if enactedISFValue < 15 {
                         determinedISFUnit = .millimolesPerLiter
                         determinedISFUnit = .millimolesPerLiter
@@ -51,7 +56,7 @@ extension MainViewController {
                 // Carb Ratio (CR)
                 // Carb Ratio (CR)
                 let profileCR = profileManager.currentCarbRatio()
                 let profileCR = profileManager.currentCarbRatio()
                 var enactedCR: Double?
                 var enactedCR: Double?
-                if let reasonString = enacted["reason"] as? String {
+                if let reasonString = enactedOrSuggested["reason"] as? String {
                     let pattern = "CR: (\\d+(?:\\.\\d+)?)"
                     let pattern = "CR: (\\d+(?:\\.\\d+)?)"
                     if let regex = try? NSRegularExpression(pattern: pattern) {
                     if let regex = try? NSRegularExpression(pattern: pattern) {
                         let nsString = reasonString as NSString
                         let nsString = reasonString as NSString
@@ -75,10 +80,10 @@ extension MainViewController {
                 }
                 }
 
 
                 // COB
                 // COB
-                if let cobMetric = CarbMetric(from: enacted, key: "COB") {
+                if let cobMetric = CarbMetric(from: enactedOrSuggested, key: "COB") {
                     infoManager.updateInfoData(type: .cob, value: cobMetric)
                     infoManager.updateInfoData(type: .cob, value: cobMetric)
                     latestCOB = cobMetric
                     latestCOB = cobMetric
-                } else if let reasonString = enacted["reason"] as? String {
+                } else if let reasonString = enactedOrSuggested["reason"] as? String {
                     // Fallback: Extract COB from reason string
                     // Fallback: Extract COB from reason string
                     let cobPattern = "COB: (\\d+(?:\\.\\d+)?)"
                     let cobPattern = "COB: (\\d+(?:\\.\\d+)?)"
                     if let cobRegex = try? NSRegularExpression(pattern: cobPattern),
                     if let cobRegex = try? NSRegularExpression(pattern: cobPattern),
@@ -101,7 +106,7 @@ extension MainViewController {
                 }
                 }
 
 
                 // Insulin Required
                 // Insulin Required
-                if let insulinReqMetric = InsulinMetric(from: enacted, key: "insulinReq") {
+                if let insulinReqMetric = InsulinMetric(from: enactedOrSuggested, key: "insulinReq") {
                     infoManager.updateInfoData(type: .recBolus, value: insulinReqMetric)
                     infoManager.updateInfoData(type: .recBolus, value: insulinReqMetric)
                     UserDefaultsRepository.deviceRecBolus.value = insulinReqMetric.value
                     UserDefaultsRepository.deviceRecBolus.value = insulinReqMetric.value
                 } else {
                 } else {
@@ -109,13 +114,13 @@ extension MainViewController {
                 }
                 }
 
 
                 // Autosens
                 // Autosens
-                if let sens = enacted["sensitivityRatio"] as? Double {
+                if let sens = enactedOrSuggested["sensitivityRatio"] as? Double {
                     let formattedSens = String(format: "%.0f", sens * 100.0) + "%"
                     let formattedSens = String(format: "%.0f", sens * 100.0) + "%"
                     infoManager.updateInfoData(type: .autosens, value: formattedSens)
                     infoManager.updateInfoData(type: .autosens, value: formattedSens)
                 }
                 }
 
 
                 // Eventual BG
                 // Eventual BG
-                if let eventualBGValue = enacted["eventualBG"] as? Double {
+                if let eventualBGValue = enactedOrSuggested["eventualBG"] as? Double {
                     let eventualBGQuantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: eventualBGValue)
                     let eventualBGQuantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: eventualBGValue)
                     PredictionLabel.text = Localizer.formatQuantity(eventualBGQuantity)
                     PredictionLabel.text = Localizer.formatQuantity(eventualBGQuantity)
                 }
                 }
@@ -123,7 +128,7 @@ extension MainViewController {
                 // Target
                 // Target
                 let profileTargetHigh = profileManager.currentTargetHigh()
                 let profileTargetHigh = profileManager.currentTargetHigh()
                 var enactedTarget: HKQuantity?
                 var enactedTarget: HKQuantity?
-                if let enactedTargetValue = enacted["current_target"] as? Double {
+                if let enactedTargetValue = enactedOrSuggested["current_target"] as? Double {
                     var targetUnit = HKUnit.milligramsPerDeciliter
                     var targetUnit = HKUnit.milligramsPerDeciliter
                     if enactedTargetValue < 40 {
                     if enactedTargetValue < 40 {
                         targetUnit = .millimolesPerLiter
                         targetUnit = .millimolesPerLiter
@@ -145,14 +150,14 @@ extension MainViewController {
                 }
                 }
 
 
                 // TDD
                 // TDD
-                if let tddMetric = InsulinMetric(from: enacted, key: "TDD") {
+                if let tddMetric = InsulinMetric(from: enactedOrSuggested, key: "TDD") {
                     infoManager.updateInfoData(type: .tdd, value: tddMetric)
                     infoManager.updateInfoData(type: .tdd, value: tddMetric)
                 }
                 }
 
 
                 let predictioncolor = UIColor.systemGray
                 let predictioncolor = UIColor.systemGray
                 PredictionLabel.textColor = predictioncolor
                 PredictionLabel.textColor = predictioncolor
                 topPredictionBG = UserDefaultsRepository.minBGScale.value
                 topPredictionBG = UserDefaultsRepository.minBGScale.value
-                if let predbgdata = enacted["predBGs"] as? [String: AnyObject] {
+                if let predbgdata = enactedOrSuggested["predBGs"] as? [String: AnyObject] {
                     let predictionTypes: [(type: String, colorName: String, dataIndex: Int)] = [
                     let predictionTypes: [(type: String, colorName: String, dataIndex: Int)] = [
                         ("ZT", "ZT", 12),
                         ("ZT", "ZT", 12),
                         ("IOB", "Insulin", 13),
                         ("IOB", "Insulin", 13),