Explorar el Código

Add mmol parsing for Target: X→Y

Daniel Snällfot hace 1 año
padre
commit
804bf52807

+ 7 - 4
Trio/Sources/Services/Network/Nightscout/NightscoutManager.swift

@@ -1353,7 +1353,7 @@ extension BaseNightscoutManager {
     // TODO: Consolidate all mmol parsing methods (in TagCloudView, NightscoutManager and HomeRootView) to one central func
     // TODO: Consolidate all mmol parsing methods (in TagCloudView, NightscoutManager and HomeRootView) to one central func
     func parseReasonGlucoseValuesToMmolL(_ reason: String) -> String {
     func parseReasonGlucoseValuesToMmolL(_ reason: String) -> String {
         let patterns = [
         let patterns = [
-            "ISF:\\s*-?\\d+\\.?\\d*→-?\\d+\\.?\\d*", // ISF with arrow
+            "(?:ISF|Target):\\s*-?\\d+\\.?\\d*→-?\\d+\\.?\\d*", // ISF or Target with arrow
             "Dev:\\s*-?\\d+\\.?\\d*", // Dev pattern
             "Dev:\\s*-?\\d+\\.?\\d*", // Dev pattern
             "BGI:\\s*-?\\d+\\.?\\d*", // BGI pattern
             "BGI:\\s*-?\\d+\\.?\\d*", // BGI pattern
             "Target:\\s*-?\\d+\\.?\\d*", // Target pattern
             "Target:\\s*-?\\d+\\.?\\d*", // Target pattern
@@ -1382,13 +1382,16 @@ extension BaseNightscoutManager {
             let glucoseValueString = String(reason[range])
             let glucoseValueString = String(reason[range])
 
 
             if glucoseValueString.contains("→") {
             if glucoseValueString.contains("→") {
-                // Handle ISF: X→Y
+                // Handle ISF: X→Y or Target: X→Y
                 let values = glucoseValueString.components(separatedBy: "→")
                 let values = glucoseValueString.components(separatedBy: "→")
-                let firstNumber = values[0].components(separatedBy: ":")[1].trimmingCharacters(in: .whitespaces)
+                let prefixAndFirstNumber = values[0].components(separatedBy: ":")
+                guard prefixAndFirstNumber.count == 2 else { continue }
+                let prefix = prefixAndFirstNumber[0].trimmingCharacters(in: .whitespaces)
+                let firstNumber = prefixAndFirstNumber[1].trimmingCharacters(in: .whitespaces)
                 let secondNumber = values[1].trimmingCharacters(in: .whitespaces)
                 let secondNumber = values[1].trimmingCharacters(in: .whitespaces)
                 let firstValue = convertToMmolL(firstNumber)
                 let firstValue = convertToMmolL(firstNumber)
                 let secondValue = convertToMmolL(secondNumber)
                 let secondValue = convertToMmolL(secondNumber)
-                let formattedString = "ISF: \(firstValue)→\(secondValue)"
+                let formattedString = "\(prefix): \(firstValue)→\(secondValue)"
                 updatedReason.replaceSubrange(range, with: formattedString)
                 updatedReason.replaceSubrange(range, with: formattedString)
 
 
             } else if glucoseValueString.contains("Eventual BG"), glucoseValueString.contains("<") {
             } else if glucoseValueString.contains("Eventual BG"), glucoseValueString.contains("<") {

+ 7 - 5
Trio/Sources/Views/TagCloudView.swift

@@ -116,7 +116,7 @@ struct TagCloudView: View {
     // TODO: Consolidate all mmol parsing methods (in TagCloudView, NightscoutManager and HomeRootView) to one central func
     // TODO: Consolidate all mmol parsing methods (in TagCloudView, NightscoutManager and HomeRootView) to one central func
     private func formatGlucoseTags(_ tag: String, isMmolL: Bool) -> String {
     private func formatGlucoseTags(_ tag: String, isMmolL: Bool) -> String {
         let patterns = [
         let patterns = [
-            "ISF:\\s*-?\\d+\\.?\\d*→-?\\d+\\.?\\d*",
+            "(?:ISF|Target):\\s*-?\\d+\\.?\\d*→-?\\d+\\.?\\d*",
             "Dev:\\s*-?\\d+\\.?\\d*",
             "Dev:\\s*-?\\d+\\.?\\d*",
             "BGI:\\s*-?\\d+\\.?\\d*",
             "BGI:\\s*-?\\d+\\.?\\d*",
             "Target:\\s*-?\\d+\\.?\\d*",
             "Target:\\s*-?\\d+\\.?\\d*",
@@ -143,14 +143,16 @@ struct TagCloudView: View {
             let glucoseValueString = String(tag[range])
             let glucoseValueString = String(tag[range])
 
 
             if glucoseValueString.contains("→") {
             if glucoseValueString.contains("→") {
-                // -- Handle ISF: X→Y
+                // -- Handle ISF: X→Y or Target: X→Y
                 let values = glucoseValueString.components(separatedBy: "→")
                 let values = glucoseValueString.components(separatedBy: "→")
-                // For example "ISF: 162"
-                let firstNumber = values[0].components(separatedBy: ":")[1].trimmingCharacters(in: .whitespaces)
+                let prefixAndFirstNumber = values[0].components(separatedBy: ":")
+                guard prefixAndFirstNumber.count == 2 else { continue }
+                let prefix = prefixAndFirstNumber[0].trimmingCharacters(in: .whitespaces)
+                let firstNumber = prefixAndFirstNumber[1].trimmingCharacters(in: .whitespaces)
                 let secondNumber = values[1].trimmingCharacters(in: .whitespaces)
                 let secondNumber = values[1].trimmingCharacters(in: .whitespaces)
                 let firstValue = convertToMmolL(firstNumber)
                 let firstValue = convertToMmolL(firstNumber)
                 let secondValue = convertToMmolL(secondNumber)
                 let secondValue = convertToMmolL(secondNumber)
-                let formattedString = "ISF: \(firstValue)→\(secondValue)"
+                let formattedString = "\(prefix): \(firstValue)→\(secondValue)"
                 updatedTag.replaceSubrange(range, with: formattedString)
                 updatedTag.replaceSubrange(range, with: formattedString)
 
 
             } else if glucoseValueString.starts(with: "Dev:") {
             } else if glucoseValueString.starts(with: "Dev:") {