Skip to content

Commit 0b47111

Browse files
authored
Recommended bolus for Trio (#466)
1 parent 5b9c66a commit 0b47111

File tree

14 files changed

+404
-147
lines changed

14 files changed

+404
-147
lines changed

LoopFollow.xcodeproj/project.pbxproj

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
656F8C102E49F36F0008DC1D /* QRCodeDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656F8C0F2E49F36F0008DC1D /* QRCodeDisplayView.swift */; };
1717
656F8C122E49F3780008DC1D /* QRCodeGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656F8C112E49F3780008DC1D /* QRCodeGenerator.swift */; };
1818
656F8C142E49F3D20008DC1D /* RemoteCommandSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 656F8C132E49F3D20008DC1D /* RemoteCommandSettings.swift */; };
19-
65E153C32E4BB69100693A4F /* URLTokenValidationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E153C22E4BB69100693A4F /* URLTokenValidationView.swift */; };
2019
6584B1012E4A263900135D4D /* TOTPService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6584B1002E4A263900135D4D /* TOTPService.swift */; };
20+
65E153C32E4BB69100693A4F /* URLTokenValidationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E153C22E4BB69100693A4F /* URLTokenValidationView.swift */; };
2121
65E8A2862E44B0300065037B /* VolumeButtonHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E8A2852E44B0300065037B /* VolumeButtonHandler.swift */; };
2222
DD0247592DB2E89600FCADF6 /* AlarmCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0247582DB2E89600FCADF6 /* AlarmCondition.swift */; };
2323
DD0247712DB4337700FCADF6 /* BuildExpireCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD02475B2DB2E8FB00FCADF6 /* BuildExpireCondition.swift */; };
24+
DD026E592EA2C8A200A39CB5 /* InsulinPrecisionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD026E582EA2C8A200A39CB5 /* InsulinPrecisionManager.swift */; };
25+
DD026E5B2EA2C9C300A39CB5 /* InsulinFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD026E5A2EA2C9C300A39CB5 /* InsulinFormatter.swift */; };
2426
DD0650A92DCA8A10004D3B41 /* AlarmBGSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0650A82DCA8A10004D3B41 /* AlarmBGSection.swift */; };
2527
DD0650EB2DCE8385004D3B41 /* LowBGCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0650EA2DCE8385004D3B41 /* LowBGCondition.swift */; };
2628
DD0650ED2DCE9371004D3B41 /* HighBgAlarmEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD0650EC2DCE9371004D3B41 /* HighBgAlarmEditor.swift */; };
@@ -408,12 +410,14 @@
408410
656F8C0F2E49F36F0008DC1D /* QRCodeDisplayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeDisplayView.swift; sourceTree = "<group>"; };
409411
656F8C112E49F3780008DC1D /* QRCodeGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeGenerator.swift; sourceTree = "<group>"; };
410412
656F8C132E49F3D20008DC1D /* RemoteCommandSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteCommandSettings.swift; sourceTree = "<group>"; };
411-
65E153C22E4BB69100693A4F /* URLTokenValidationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLTokenValidationView.swift; sourceTree = "<group>"; };
412413
6584B1002E4A263900135D4D /* TOTPService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TOTPService.swift; sourceTree = "<group>"; };
414+
65E153C22E4BB69100693A4F /* URLTokenValidationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLTokenValidationView.swift; sourceTree = "<group>"; };
413415
65E8A2852E44B0300065037B /* VolumeButtonHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VolumeButtonHandler.swift; sourceTree = "<group>"; };
414416
A7D55B42A22051DAD69E89D0 /* Pods_LoopFollow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LoopFollow.framework; sourceTree = BUILT_PRODUCTS_DIR; };
415417
DD0247582DB2E89600FCADF6 /* AlarmCondition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmCondition.swift; sourceTree = "<group>"; };
416418
DD02475B2DB2E8FB00FCADF6 /* BuildExpireCondition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildExpireCondition.swift; sourceTree = "<group>"; };
419+
DD026E582EA2C8A200A39CB5 /* InsulinPrecisionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsulinPrecisionManager.swift; sourceTree = "<group>"; };
420+
DD026E5A2EA2C9C300A39CB5 /* InsulinFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsulinFormatter.swift; sourceTree = "<group>"; };
417421
DD0650A82DCA8A10004D3B41 /* AlarmBGSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmBGSection.swift; sourceTree = "<group>"; };
418422
DD0650EA2DCE8385004D3B41 /* LowBGCondition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LowBGCondition.swift; sourceTree = "<group>"; };
419423
DD0650EC2DCE9371004D3B41 /* HighBgAlarmEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighBgAlarmEditor.swift; sourceTree = "<group>"; };
@@ -1505,6 +1509,8 @@
15051509
FCC688542489367300A0279D /* Helpers */ = {
15061510
isa = PBXGroup;
15071511
children = (
1512+
DD026E5A2EA2C9C300A39CB5 /* InsulinFormatter.swift */,
1513+
DD026E582EA2C8A200A39CB5 /* InsulinPrecisionManager.swift */,
15081514
656F8C112E49F3780008DC1D /* QRCodeGenerator.swift */,
15091515
DD4A407D2E6AFEE6007B318B /* AuthService.swift */,
15101516
DD1D52B82E1EB5DC00432050 /* TabPosition.swift */,
@@ -1971,6 +1977,7 @@
19711977
DD48780E2C7B74A40048F05C /* TrioRemoteControlViewModel.swift in Sources */,
19721978
DDEF503A2D31615000999A5D /* LogManager.swift in Sources */,
19731979
DD4878172C7B75350048F05C /* BolusView.swift in Sources */,
1980+
DD026E592EA2C8A200A39CB5 /* InsulinPrecisionManager.swift in Sources */,
19741981
DD493AE72ACF23CF009A6922 /* DeviceStatus.swift in Sources */,
19751982
DDC7E5162DBCFA7F00EB1127 /* SnoozerView.swift in Sources */,
19761983
FCFEECA2248857A600402A7F /* SettingsViewController.swift in Sources */,
@@ -2085,6 +2092,7 @@
20852092
DD0C0C662C46E54C00DBADDF /* InfoDataSeparator.swift in Sources */,
20862093
DD58171C2D299F940041FB98 /* BluetoothDevice.swift in Sources */,
20872094
DD7E198A2ACDA62600DBD158 /* SensorStart.swift in Sources */,
2095+
DD026E5B2EA2C9C300A39CB5 /* InsulinFormatter.swift in Sources */,
20882096
DD5334B02D1447C500CDD6EA /* BLEManager.swift in Sources */,
20892097
DD4878032C7B297E0048F05C /* StorageValue.swift in Sources */,
20902098
DD4878192C7C56D60048F05C /* TrioNightscoutRemoteController.swift in Sources */,

LoopFollow/Controllers/Nightscout/DeviceStatus.swift

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import Charts
55
import Foundation
6+
import HealthKit
67
import UIKit
78

89
extension MainViewController {
@@ -95,36 +96,56 @@ extension MainViewController {
9596
.withTime,
9697
.withDashSeparatorInDate,
9798
.withColonSeparatorInTime]
99+
100+
Observable.shared.previousAlertLastLoopTime.value = Observable.shared.alertLastLoopTime.value
101+
98102
if let lastPumpRecord = lastDeviceStatus?["pump"] as! [String: AnyObject]? {
99-
if let lastPumpTime = formatter.date(from: (lastPumpRecord["clock"] as! String))?.timeIntervalSince1970 {
103+
if let bolusIncrement = lastPumpRecord["bolusIncrement"] as? Double, bolusIncrement > 0 {
104+
Storage.shared.bolusIncrement.value = HKQuantity(unit: .internationalUnit(), doubleValue: bolusIncrement)
105+
Storage.shared.bolusIncrementDetected.value = true
106+
} else if let model = lastPumpRecord["model"] as? String, model == "Dash" {
107+
Storage.shared.bolusIncrement.value = HKQuantity(unit: .internationalUnit(), doubleValue: 0.05)
108+
Storage.shared.bolusIncrementDetected.value = true
109+
} else {
110+
Storage.shared.bolusIncrementDetected.value = false
111+
}
112+
113+
if let clockString = lastPumpRecord["clock"] as? String,
114+
let lastPumpTime = formatter.date(from: clockString)?.timeIntervalSince1970
115+
{
116+
let storedTime = Observable.shared.alertLastLoopTime.value ?? 0
117+
if lastPumpTime > storedTime {
118+
Observable.shared.alertLastLoopTime.value = lastPumpTime
119+
}
120+
100121
if let reservoirData = lastPumpRecord["reservoir"] as? Double {
101122
latestPumpVolume = reservoirData
102123
infoManager.updateInfoData(type: .pump, value: String(format: "%.0f", reservoirData) + "U")
103124
} else {
104125
latestPumpVolume = 50.0
105126
infoManager.updateInfoData(type: .pump, value: "50+U")
106127
}
128+
}
107129

108-
if let uploader = lastDeviceStatus?["uploader"] as? [String: AnyObject],
109-
let upbat = uploader["battery"] as? Double
110-
{
111-
let batteryText: String
112-
if let isCharging = uploader["isCharging"] as? Bool, isCharging {
113-
batteryText = "⚡️ " + String(format: "%.0f", upbat) + "%"
114-
} else {
115-
batteryText = String(format: "%.0f", upbat) + "%"
116-
}
117-
infoManager.updateInfoData(type: .battery, value: batteryText)
118-
Observable.shared.deviceBatteryLevel.value = upbat
130+
if let uploader = lastDeviceStatus?["uploader"] as? [String: AnyObject],
131+
let upbat = uploader["battery"] as? Double
132+
{
133+
let batteryText: String
134+
if let isCharging = uploader["isCharging"] as? Bool, isCharging {
135+
batteryText = "⚡️ " + String(format: "%.0f", upbat) + "%"
136+
} else {
137+
batteryText = String(format: "%.0f", upbat) + "%"
138+
}
139+
infoManager.updateInfoData(type: .battery, value: batteryText)
140+
Observable.shared.deviceBatteryLevel.value = upbat
119141

120-
let timestamp = uploader["timestamp"] as? Date ?? Date()
121-
let currentBattery = DataStructs.batteryStruct(batteryLevel: upbat, timestamp: timestamp)
122-
deviceBatteryData.append(currentBattery)
142+
let timestamp = uploader["timestamp"] as? Date ?? Date()
143+
let currentBattery = DataStructs.batteryStruct(batteryLevel: upbat, timestamp: timestamp)
144+
deviceBatteryData.append(currentBattery)
123145

124-
// store only the last 30 battery readings
125-
if deviceBatteryData.count > 30 {
126-
deviceBatteryData.removeFirst()
127-
}
146+
// store only the last 30 battery readings
147+
if deviceBatteryData.count > 30 {
148+
deviceBatteryData.removeFirst()
128149
}
129150
}
130151
}

0 commit comments

Comments
 (0)