Skip to content

Commit ac00c18

Browse files
authored
Merge pull request #288 from loopandlearn/glucose-data-handling
Implement Display of Manual BG Values and Standardize Unit Conversion
2 parents 191ffe9 + 4a905be commit ac00c18

File tree

7 files changed

+40
-16
lines changed

7 files changed

+40
-16
lines changed

LoopFollow.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
DD7E19882ACDA5DA00DBD158 /* Notes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD7E19872ACDA5DA00DBD158 /* Notes.swift */; };
2727
DD7E198A2ACDA62600DBD158 /* SensorStart.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD7E19892ACDA62600DBD158 /* SensorStart.swift */; };
2828
DD7FFAFD2A72953000C3A304 /* EKEventStore+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD7FFAFC2A72953000C3A304 /* EKEventStore+Extensions.swift */; };
29+
DD91E4DD2BDEC3F8002D9E97 /* GlucoseConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD91E4DC2BDEC3F8002D9E97 /* GlucoseConversion.swift */; };
2930
DD98F54424BCEFEE0007425A /* ShareClientExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD98F54324BCEFEE0007425A /* ShareClientExtension.swift */; };
3031
DDB0AF522BB1A8BE00AFA48B /* BuildDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB0AF512BB1A8BE00AFA48B /* BuildDetails.swift */; };
3132
DDB0AF552BB1B24A00AFA48B /* BuildDetails.plist in Resources */ = {isa = PBXBuildFile; fileRef = DDB0AF542BB1B24A00AFA48B /* BuildDetails.plist */; };
@@ -212,6 +213,7 @@
212213
DD7E19872ACDA5DA00DBD158 /* Notes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notes.swift; sourceTree = "<group>"; };
213214
DD7E19892ACDA62600DBD158 /* SensorStart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SensorStart.swift; sourceTree = "<group>"; };
214215
DD7FFAFC2A72953000C3A304 /* EKEventStore+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EKEventStore+Extensions.swift"; sourceTree = "<group>"; };
216+
DD91E4DC2BDEC3F8002D9E97 /* GlucoseConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseConversion.swift; sourceTree = "<group>"; };
215217
DD98F54324BCEFEE0007425A /* ShareClientExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareClientExtension.swift; sourceTree = "<group>"; };
216218
DDB0AF502BB1A84500AFA48B /* capture-build-details.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "capture-build-details.sh"; sourceTree = "<group>"; };
217219
DDB0AF512BB1A8BE00AFA48B /* BuildDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildDetails.swift; sourceTree = "<group>"; };
@@ -689,6 +691,7 @@
689691
FC8589BE252B54F500C8FC73 /* Mobileprovision.swift */,
690692
DD07B5C829E2F9C400C6A635 /* NightscoutUtils.swift */,
691693
DDB0AF512BB1A8BE00AFA48B /* BuildDetails.swift */,
694+
DD91E4DC2BDEC3F8002D9E97 /* GlucoseConversion.swift */,
692695
);
693696
path = helpers;
694697
sourceTree = "<group>";
@@ -1007,6 +1010,7 @@
10071010
DD493AE92ACF2445009A6922 /* BGData.swift in Sources */,
10081011
FCC6886B24898FD800A0279D /* ObservationToken.swift in Sources */,
10091012
DD98F54424BCEFEE0007425A /* ShareClientExtension.swift in Sources */,
1013+
DD91E4DD2BDEC3F8002D9E97 /* GlucoseConversion.swift in Sources */,
10101014
FCC6886D2489909D00A0279D /* AnyConvertible.swift in Sources */,
10111015
FC97881A2485969B00A7906C /* SceneDelegate.swift in Sources */,
10121016
DD7E198A2ACDA62600DBD158 /* SensorStart.swift in Sources */,

LoopFollow/Controllers/Nightscout/Treatments/BGCheck.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@ extension MainViewController {
1919
guard let dateStr = currentEntry["timestamp"] as? String ?? currentEntry["created_at"] as? String else { return }
2020

2121
guard let parsedDate = NightscoutUtils.parseDate(dateStr),
22-
let sgv = currentEntry["glucose"] as? Int else {
23-
if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "ERROR: Non-Int Glucose entry") }
22+
let glucose = currentEntry["glucose"] as? Double else {
23+
if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "ERROR: Non-Double Glucose entry") }
2424
return
2525
}
2626

27+
let units = currentEntry["units"] as? String ?? "mg/dl"
28+
let convertedGlucose: Double = units == "mmol" ? glucose * GlucoseConversion.mmolToMgDl : glucose
29+
2730
let dateTimeStamp = parsedDate.timeIntervalSince1970
2831
if dateTimeStamp < (dateTimeUtils.getNowTimeIntervalUTC() + (60 * 60)) {
29-
let dot = ShareGlucoseData(sgv: sgv, date: Double(dateTimeStamp), direction: "")
32+
let dot = ShareGlucoseData(sgv: Int(convertedGlucose.rounded()), date: Double(dateTimeStamp), direction: "")
3033
bgCheckData.append(dot)
3134
}
3235
}
@@ -36,3 +39,4 @@ extension MainViewController {
3639
}
3740
}
3841
}
42+

LoopFollow/Controllers/Stats.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class StatsData {
7070

7171
stdDev = sqrt(partialSum / Float(bgData.count))
7272
if UserDefaultsRepository.units.value != "mg/dL" {
73-
stdDev = stdDev / 18
73+
stdDev = stdDev * Float(GlucoseConversion.mgDlToMmolL)
7474
}
7575

7676
if UserDefaultsRepository.useIFCC.value {

LoopFollow/Extensions/ShareClientExtension.swift

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,31 @@
99
import Foundation
1010
import ShareClient
1111

12-
public struct ShareGlucoseData: Codable {
12+
public struct ShareGlucoseData: Decodable {
1313
var sgv: Int
1414
var date: TimeInterval
1515
var direction: String?
1616

1717
enum CodingKeys: String, CodingKey {
18-
case sgv
18+
case sgv // Sensor Blood Glucose
19+
case mbg // Manual Blood Glucose
1920
case date
2021
case direction
2122
}
2223

24+
// Decoder initializer for handling JSON data
2325
public init(from decoder: Decoder) throws {
2426
let container = try decoder.container(keyedBy: CodingKeys.self)
25-
26-
if let sgvAsDouble = try? container.decode(Double.self, forKey: .sgv) {
27-
sgv = Int(sgvAsDouble.rounded())
28-
} else if let sgvAsInt = try? container.decode(Int.self, forKey: .sgv) {
29-
sgv = sgvAsInt
27+
28+
if let glucoseValue = try? container.decode(Double.self, forKey: .sgv) {
29+
sgv = Int(glucoseValue.rounded())
30+
} else if let mbgValue = try? container.decode(Double.self, forKey: .mbg) {
31+
sgv = Int(mbgValue.rounded())
3032
} else {
31-
throw DecodingError.dataCorruptedError(forKey: .sgv, in: container, debugDescription: "Expected to decode an Integer or Double.")
33+
throw DecodingError.dataCorruptedError(forKey: .sgv, in: container, debugDescription: "Expected to decode Double for sgv or mbg.")
3234
}
33-
34-
// Decode the other properties
35+
36+
// Decode the date and optional direction
3537
date = try container.decode(TimeInterval.self, forKey: .date)
3638
direction = try container.decodeIfPresent(String.self, forKey: .direction)
3739
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// GlucoseConversion.swift
3+
// LoopFollow
4+
//
5+
// Created by Jonas Björkert on 2024-04-28.
6+
// Copyright © 2024 Jon Fawcett. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
struct GlucoseConversion {
12+
static let mgDlToMmolL: Double = 0.0555
13+
static let mmolToMgDl: Double = 18.01559
14+
}

LoopFollow/helpers/NightscoutUtils.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class NightscoutUtils {
3333
case .cage, .carbsToday, .sage, .treatments:
3434
return "/api/v1/treatments.json"
3535
case .sgv:
36-
return "/api/v1/entries/sgv.json"
36+
return "/api/v1/entries.json"
3737
case .profile:
3838
return "/api/v1/profile/current.json"
3939
case .deviceStatus:

LoopFollow/helpers/bgUnits.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class bgUnits {
2929
let numberValue = NSNumber(value: number)
3030
return numberFormatter.string(from: numberValue) ?? value
3131
} else {
32-
let mmolValue = number / 18
32+
let mmolValue = Double(number) * GlucoseConversion.mgDlToMmolL // Convert number to Double
3333
let numberValue = NSNumber(value: mmolValue)
3434
return numberFormatter.string(from: numberValue) ?? value
3535
}

0 commit comments

Comments
 (0)