Skip to content

Commit a3fcb70

Browse files
author
Rick Pasetto
authored
LOOP-1964: change LoopSettings.glucoseTargetRangeScheduleApplyingOverrideIfActive to glucoseTargetRangeConsideringOverrides(consideringPotentialCarbEntry ...?) (LoopKit#283)
* checkpoint * checkpoint: change LoopSettings.glucoseTargetRangeScheduleApplyingOverrideIfActive to glucoseTargetRangeConsideringOverrides(consideringPotentialCarbEntry potentialCarbEntry: NewCarbEntry?) * Rename `glucoseTargetRangeScheduleMaybeApplyingOverride(consideringPotentialCarbEntry:` to `effectiveGlucoseTargetRangeSchedule(consideringPotentialCarbEntry:` * Rename glucoseTargetRangeScheduleApplyingOverrideIfActive to effectiveGlucoseTargetRangeSchedule
1 parent fc96674 commit a3fcb70

11 files changed

+107
-124
lines changed

Loop/Extensions/DeviceDataManager+BolusEntryViewModelDelegate.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,4 @@ extension DeviceDataManager: BolusEntryViewModelDelegate {
7171
return loopManager.settings
7272
}
7373

74-
func setPreMealOverride(_ preMealOverride: TemporaryScheduleOverride?) {
75-
loopManager.settings.preMealOverride = preMealOverride
76-
}
77-
7874
}

Loop/Extensions/DosingDecisionStore+SimulatedCoreData.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fileprivate extension StoredDosingDecision {
8282
RepeatingScheduleValue(startTime: .hours(18), value: DoubleRange(minValue: 90.0, maxValue: 100.0)),
8383
RepeatingScheduleValue(startTime: .hours(21), value: DoubleRange(minValue: 110.0, maxValue: 120.0))],
8484
timeZone: timeZone)!)
85-
let glucoseTargetRangeScheduleApplyingOverrideIfActive = GlucoseRangeSchedule(rangeSchedule: DailyQuantitySchedule(unit: .milligramsPerDeciliter,
85+
let effectiveGlucoseTargetRangeSchedule = GlucoseRangeSchedule(rangeSchedule: DailyQuantitySchedule(unit: .milligramsPerDeciliter,
8686
dailyItems: [RepeatingScheduleValue(startTime: .hours(0), value: DoubleRange(minValue: 100.0, maxValue: 110.0)),
8787
RepeatingScheduleValue(startTime: .hours(8), value: DoubleRange(minValue: 95.0, maxValue: 105.0)),
8888
RepeatingScheduleValue(startTime: .hours(10), value: DoubleRange(minValue: 90.0, maxValue: 100.0)),
@@ -149,7 +149,7 @@ fileprivate extension StoredDosingDecision {
149149
carbsOnBoard: carbsOnBoard,
150150
scheduleOverride: scheduleOverride,
151151
glucoseTargetRangeSchedule: glucoseTargetRangeSchedule,
152-
glucoseTargetRangeScheduleApplyingOverrideIfActive: glucoseTargetRangeScheduleApplyingOverrideIfActive,
152+
effectiveGlucoseTargetRangeSchedule: effectiveGlucoseTargetRangeSchedule,
153153
predictedGlucose: predictedGlucose,
154154
predictedGlucoseIncludingPendingInsulin: predictedGlucoseIncludingPendingInsulin,
155155
lastReservoirValue: lastReservoirValue,

Loop/Managers/LoopDataManager.swift

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ extension LoopDataManager {
630630
carbsOnBoard: state.carbsOnBoard,
631631
scheduleOverride: self.settings.scheduleOverride,
632632
glucoseTargetRangeSchedule: self.settings.glucoseTargetRangeSchedule,
633-
glucoseTargetRangeScheduleApplyingOverrideIfActive: self.settings.glucoseTargetRangeScheduleApplyingOverrideIfActive,
633+
effectiveGlucoseTargetRangeSchedule: self.settings.effectiveGlucoseTargetRangeSchedule(),
634634
predictedGlucose: state.predictedGlucose,
635635
predictedGlucoseIncludingPendingInsulin: state.predictedGlucoseIncludingPendingInsulin,
636636
lastReservoirValue: StoredDosingDecision.LastReservoirValue(self.doseStore.lastReservoirValue),
@@ -653,7 +653,7 @@ extension LoopDataManager {
653653
carbsOnBoard: bolusDosingDecision.carbsOnBoard,
654654
scheduleOverride: bolusDosingDecision.scheduleOverride,
655655
glucoseTargetRangeSchedule: bolusDosingDecision.glucoseTargetRangeSchedule,
656-
glucoseTargetRangeScheduleApplyingOverrideIfActive: bolusDosingDecision.glucoseTargetRangeScheduleApplyingOverrideIfActive,
656+
effectiveGlucoseTargetRangeSchedule: bolusDosingDecision.effectiveGlucoseTargetRangeSchedule,
657657
predictedGlucoseIncludingPendingInsulin: bolusDosingDecision.predictedGlucoseIncludingPendingInsulin,
658658
manualGlucose: bolusDosingDecision.manualGlucose.map { SimpleGlucoseValue($0) },
659659
originalCarbEntry: bolusDosingDecision.originalCarbEntry,
@@ -1149,7 +1149,7 @@ extension LoopDataManager {
11491149
let pendingInsulin = try getPendingInsulin()
11501150
let shouldIncludePendingInsulin = pendingInsulin > 0
11511151
let prediction = try predictGlucoseFromManualGlucose(glucose, potentialBolus: nil, potentialCarbEntry: potentialCarbEntry, replacingCarbEntry: replacedCarbEntry, includingPendingInsulin: shouldIncludePendingInsulin)
1152-
return try recommendBolus(forPrediction: prediction)
1152+
return try recommendBolus(forPrediction: prediction, consideringPotentialCarbEntry: potentialCarbEntry)
11531153
}
11541154

11551155
/// - Throws: LoopError.missingDataError
@@ -1164,15 +1164,16 @@ extension LoopDataManager {
11641164
let pendingInsulin = try getPendingInsulin()
11651165
let shouldIncludePendingInsulin = pendingInsulin > 0
11661166
let prediction = try predictGlucose(using: .all, potentialBolus: nil, potentialCarbEntry: potentialCarbEntry, replacingCarbEntry: replacedCarbEntry, includingPendingInsulin: shouldIncludePendingInsulin)
1167-
return try recommendBolusValidatingDataRecency(forPrediction: prediction)
1167+
return try recommendBolusValidatingDataRecency(forPrediction: prediction, consideringPotentialCarbEntry: potentialCarbEntry)
11681168
}
11691169

11701170
/// - Throws:
11711171
/// - LoopError.missingDataError
11721172
/// - LoopError.glucoseTooOld
11731173
/// - LoopError.pumpDataTooOld
11741174
/// - LoopError.configurationError
1175-
fileprivate func recommendBolusValidatingDataRecency<Sample: GlucoseValue>(forPrediction predictedGlucose: [Sample]) throws -> BolusRecommendation? {
1175+
fileprivate func recommendBolusValidatingDataRecency<Sample: GlucoseValue>(forPrediction predictedGlucose: [Sample],
1176+
consideringPotentialCarbEntry potentialCarbEntry: NewCarbEntry?) throws -> BolusRecommendation? {
11761177
guard let glucose = glucoseStore.latestGlucose else {
11771178
throw LoopError.missingDataError(.glucose)
11781179
}
@@ -1200,13 +1201,14 @@ extension LoopDataManager {
12001201
throw LoopError.missingDataError(.insulinEffect)
12011202
}
12021203

1203-
return try recommendBolus(forPrediction: predictedGlucose)
1204+
return try recommendBolus(forPrediction: predictedGlucose, consideringPotentialCarbEntry: potentialCarbEntry)
12041205
}
1205-
1206+
12061207
/// - Throws: LoopError.configurationError
1207-
private func recommendBolus<Sample: GlucoseValue>(forPrediction predictedGlucose: [Sample]) throws -> BolusRecommendation? {
1208+
private func recommendBolus<Sample: GlucoseValue>(forPrediction predictedGlucose: [Sample],
1209+
consideringPotentialCarbEntry potentialCarbEntry: NewCarbEntry?) throws -> BolusRecommendation? {
12081210
guard
1209-
let glucoseTargetRange = settings.glucoseTargetRangeScheduleApplyingOverrideIfActive,
1211+
let glucoseTargetRange = settings.effectiveGlucoseTargetRangeSchedule(consideringPotentialCarbEntry: potentialCarbEntry),
12101212
let insulinSensitivity = insulinSensitivityScheduleApplyingOverrideHistory,
12111213
let maxBolus = settings.maximumBolus,
12121214
let model = insulinModelSettings?.model
@@ -1338,7 +1340,7 @@ extension LoopDataManager {
13381340

13391341
guard
13401342
let maxBasal = settings.maximumBasalRatePerHour,
1341-
let glucoseTargetRange = settings.glucoseTargetRangeScheduleApplyingOverrideIfActive,
1343+
let glucoseTargetRange = settings.effectiveGlucoseTargetRangeSchedule(),
13421344
let insulinSensitivity = insulinSensitivityScheduleApplyingOverrideHistory,
13431345
let basalRates = basalRateScheduleApplyingOverrideHistory,
13441346
let maxBolus = settings.maximumBolus,

Loop/Managers/WatchDataManager.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,6 @@ final class WatchDataManager: NSObject {
259259
context.recommendedBolusDoseConsideringPotentialCarbEntry = recommendedBolusDoseConsideringPotentialCarbEntry.amount
260260
dosingDecision.recommendedBolus = recommendedBolusDoseConsideringPotentialCarbEntry
261261
}
262-
263262
}
264263

265264
if let glucose = glucose {
@@ -321,9 +320,9 @@ final class WatchDataManager: NSObject {
321320
dosingDecision.scheduleOverride = preMealOverride ?? scheduleOverride
322321
dosingDecision.glucoseTargetRangeSchedule = settings.glucoseTargetRangeSchedule
323322
if scheduleOverride != nil || preMealOverride != nil {
324-
dosingDecision.glucoseTargetRangeScheduleApplyingOverrideIfActive = settings.glucoseTargetRangeScheduleApplyingOverrideIfActive
323+
dosingDecision.effectiveGlucoseTargetRangeSchedule = settings.effectiveGlucoseTargetRangeSchedule(consideringPotentialCarbEntry: potentialCarbEntry)
325324
} else {
326-
dosingDecision.glucoseTargetRangeScheduleApplyingOverrideIfActive = nil
325+
dosingDecision.effectiveGlucoseTargetRangeSchedule = nil
327326
}
328327

329328
_ = updateGroup.wait(timeout: .distantFuture)

Loop/Models/BolusDosingDecision.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct BolusDosingDecision {
1313
var carbsOnBoard: CarbValue?
1414
var scheduleOverride: TemporaryScheduleOverride?
1515
var glucoseTargetRangeSchedule: GlucoseRangeSchedule?
16-
var glucoseTargetRangeScheduleApplyingOverrideIfActive: GlucoseRangeSchedule?
16+
var effectiveGlucoseTargetRangeSchedule: GlucoseRangeSchedule?
1717
var predictedGlucoseIncludingPendingInsulin: [PredictedGlucoseValue]?
1818
var manualGlucose: GlucoseValue?
1919
var originalCarbEntry: StoredCarbEntry?

Loop/Stores/DosingDecisionStore.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension StoredDosingDecision: Codable {
7070
carbsOnBoard: try container.decodeIfPresent(CarbValue.self, forKey: .carbsOnBoard),
7171
scheduleOverride: try container.decodeIfPresent(TemporaryScheduleOverride.self, forKey: .scheduleOverride),
7272
glucoseTargetRangeSchedule: try container.decodeIfPresent(GlucoseRangeSchedule.self, forKey: .glucoseTargetRangeSchedule),
73-
glucoseTargetRangeScheduleApplyingOverrideIfActive: try container.decodeIfPresent(GlucoseRangeSchedule.self, forKey: .glucoseTargetRangeScheduleApplyingOverrideIfActive),
73+
effectiveGlucoseTargetRangeSchedule: try container.decodeIfPresent(GlucoseRangeSchedule.self, forKey: .effectiveGlucoseTargetRangeSchedule),
7474
predictedGlucose: try container.decodeIfPresent([PredictedGlucoseValue].self, forKey: .predictedGlucose),
7575
predictedGlucoseIncludingPendingInsulin: try container.decodeIfPresent([PredictedGlucoseValue].self, forKey: .predictedGlucoseIncludingPendingInsulin),
7676
lastReservoirValue: try container.decodeIfPresent(LastReservoirValue.self, forKey: .lastReservoirValue),
@@ -94,7 +94,7 @@ extension StoredDosingDecision: Codable {
9494
try container.encodeIfPresent(carbsOnBoard, forKey: .carbsOnBoard)
9595
try container.encodeIfPresent(scheduleOverride, forKey: .scheduleOverride)
9696
try container.encodeIfPresent(glucoseTargetRangeSchedule, forKey: .glucoseTargetRangeSchedule)
97-
try container.encodeIfPresent(glucoseTargetRangeScheduleApplyingOverrideIfActive, forKey: .glucoseTargetRangeScheduleApplyingOverrideIfActive)
97+
try container.encodeIfPresent(effectiveGlucoseTargetRangeSchedule, forKey: .effectiveGlucoseTargetRangeSchedule)
9898
try container.encodeIfPresent(predictedGlucose, forKey: .predictedGlucose)
9999
try container.encodeIfPresent(predictedGlucoseIncludingPendingInsulin, forKey: .predictedGlucoseIncludingPendingInsulin)
100100
try container.encodeIfPresent(lastReservoirValue, forKey: .lastReservoirValue)
@@ -196,7 +196,7 @@ extension StoredDosingDecision: Codable {
196196
case carbsOnBoard
197197
case scheduleOverride
198198
case glucoseTargetRangeSchedule
199-
case glucoseTargetRangeScheduleApplyingOverrideIfActive
199+
case effectiveGlucoseTargetRangeSchedule
200200
case predictedGlucose
201201
case predictedGlucoseIncludingPendingInsulin
202202
case lastReservoirValue

Loop/View Models/BolusEntryViewModel.swift

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,6 @@ protocol BolusEntryViewModelDelegate: class {
6565

6666
///
6767
var settings: LoopSettings { get }
68-
69-
///
70-
func setPreMealOverride(_ preMealOverride: TemporaryScheduleOverride?)
7168
}
7269

7370
final class BolusEntryViewModel: ObservableObject {
@@ -198,12 +195,6 @@ final class BolusEntryViewModel: ObservableObject {
198195
update()
199196
}
200197

201-
deinit {
202-
if let savedPreMealOverride = savedPreMealOverride {
203-
delegate?.setPreMealOverride(savedPreMealOverride)
204-
}
205-
}
206-
207198
private func observeLoopUpdates() {
208199
NotificationCenter.default
209200
.publisher(for: .LoopDataUpdated)
@@ -733,15 +724,7 @@ final class BolusEntryViewModel: ObservableObject {
733724

734725
targetGlucoseSchedule = delegate?.settings.glucoseTargetRangeSchedule
735726
// Pre-meal override should be ignored if we have carbs (LOOP-1964)
736-
if potentialCarbEntry != nil {
737-
if let preMealOverrideSettings = delegate?.settings.preMealOverride {
738-
savedPreMealOverride = preMealOverrideSettings
739-
}
740-
delegate?.setPreMealOverride(nil)
741-
preMealOverride = nil
742-
} else {
743-
preMealOverride = delegate?.settings.preMealOverride
744-
}
727+
preMealOverride = potentialCarbEntry == nil ? delegate?.settings.preMealOverride : nil
745728
scheduleOverride = delegate?.settings.scheduleOverride
746729

747730
if preMealOverride?.hasFinished() == true {
@@ -759,9 +742,9 @@ final class BolusEntryViewModel: ObservableObject {
759742
dosingDecision.scheduleOverride = preMealOverride ?? scheduleOverride
760743
dosingDecision.glucoseTargetRangeSchedule = targetGlucoseSchedule
761744
if scheduleOverride != nil || preMealOverride != nil {
762-
dosingDecision.glucoseTargetRangeScheduleApplyingOverrideIfActive = delegate?.settings.glucoseTargetRangeScheduleApplyingOverrideIfActive
745+
dosingDecision.effectiveGlucoseTargetRangeSchedule = delegate?.settings.effectiveGlucoseTargetRangeSchedule(consideringPotentialCarbEntry: potentialCarbEntry)
763746
} else {
764-
dosingDecision.glucoseTargetRangeScheduleApplyingOverrideIfActive = nil
747+
dosingDecision.effectiveGlucoseTargetRangeSchedule = nil
765748
}
766749
}
767750

LoopCore/LoopSettings.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ public struct LoopSettings: Equatable {
127127
}
128128

129129
extension LoopSettings {
130-
public var glucoseTargetRangeScheduleApplyingOverrideIfActive: GlucoseRangeSchedule? {
130+
public func effectiveGlucoseTargetRangeSchedule(consideringPotentialCarbEntry potentialCarbEntry: NewCarbEntry? = nil) -> GlucoseRangeSchedule? {
131+
132+
let preMealOverride = potentialCarbEntry == nil ? self.preMealOverride : nil
133+
131134
let currentEffectiveOverride: TemporaryScheduleOverride?
132135
switch (preMealOverride, scheduleOverride) {
133136
case (let preMealOverride?, nil):

0 commit comments

Comments
 (0)