From 3d5a15292b5f1f9ae03d971ff880b84b648ee29a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 18 Apr 2025 19:34:40 -0700 Subject: [PATCH 1/2] update two patches that incorporated PR 2163, now merged into dev --- meal_days/dev_meal_days.patch | 79 +++++++++++++++++++++++++++++++++++ meal_week/dev_meal_week.patch | 79 +++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 meal_days/dev_meal_days.patch create mode 100644 meal_week/dev_meal_week.patch diff --git a/meal_days/dev_meal_days.patch b/meal_days/dev_meal_days.patch new file mode 100644 index 0000000..ed4ec7b --- /dev/null +++ b/meal_days/dev_meal_days.patch @@ -0,0 +1,79 @@ +Submodule Loop contains modified content +diff --git a/Loop/Loop/Managers/LoopDataManager.swift b/Loop/Loop/Managers/LoopDataManager.swift +index 2319f4ec..920ad2f9 100644 +--- a/Loop/Loop/Managers/LoopDataManager.swift ++++ b/Loop/Loop/Managers/LoopDataManager.swift +@@ -992,6 +992,6 @@ extension LoopDataManager { + + let retrospectiveStart = lastGlucoseDate.addingTimeInterval(-type(of: retrospectiveCorrection).retrospectionInterval) + +- let earliestEffectDate = Date(timeInterval: .hours(-24), since: now()) ++ let earliestEffectDate = Date(timeInterval: .hours(-2*24), since: now()) + let nextCounteractionEffectDate = insulinCounteractionEffects.last?.endDate ?? earliestEffectDate + let insulinEffectStartDate = nextCounteractionEffectDate.addingTimeInterval(.minutes(-5)) +diff --git a/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift b/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift +index fc770192..0b85b4c2 100644 +--- a/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift ++++ b/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift +@@ -139,7 +139,7 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + charts.updateEndDate(chartStartDate.addingTimeInterval(.hours(totalHours+1))) // When there is no data, this allows presenting current hour + 1 + + let midnight = Calendar.current.startOfDay(for: Date()) +- let listStart = min(midnight, chartStartDate, Date(timeIntervalSinceNow: -deviceManager.carbStore.maximumAbsorptionTimeInterval)) ++ let earliestMidnight = midnight - .hours(1*24) + + let reloadGroup = DispatchGroup() + let shouldUpdateGlucose = currentContext.contains(.glucose) +@@ -158,11 +158,19 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + let allInsulinCounteractionEffects = state.insulinCounteractionEffects + insulinCounteractionEffects = allInsulinCounteractionEffects.filterDateRange(chartStartDate, nil) + ++ let earliestCounteractionEffect = allInsulinCounteractionEffects.first?.startDate ?? Date() ++ // Show carb entries back through midnight a week ago, or only as far back as counteraction effects are available ++ let boundOnCarbList = max(earliestMidnight, earliestCounteractionEffect) ++ // If counteraction effects are missing, at least show all the entries for today and those on the chart ++ let displayListStart = min(boundOnCarbList, midnight, chartStartDate) ++ // To estimate dynamic carb absorption for the entry at the start of the list, we need to fetch samples that might still be absorbing ++ let fetchEntriesStart = displayListStart.addingTimeInterval(-self.deviceManager.carbStore.maximumAbsorptionTimeInterval) ++ + reloadGroup.enter() +- self.deviceManager.carbStore.getCarbStatus(start: listStart, end: nil, effectVelocities: allInsulinCounteractionEffects) { (result) in ++ self.deviceManager.carbStore.getCarbStatus(start: fetchEntriesStart, end: nil, effectVelocities: allInsulinCounteractionEffects) { (result) in + switch result { + case .success(let status): +- carbStatuses = status ++ carbStatuses = status.filterDateRange(displayListStart, nil) + carbsOnBoard = status.getClampedCarbsOnBoard() + case .failure(let error): + self.log.error("CarbStore failed to get carbStatus: %{public}@", String(describing: error)) +@@ -287,6 +295,14 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + return formatter + }() + ++ private lazy var relativeTimeFormatter: DateFormatter = { ++ let formatter = DateFormatter() ++ formatter.dateStyle = .medium ++ formatter.doesRelativeDateFormatting = true ++ formatter.timeStyle = .short ++ return formatter ++ }() ++ + override func numberOfSections(in tableView: UITableView) -> Int { + return Section.count + } +@@ -343,7 +359,14 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + } + + // Entry time +- let startTime = timeFormatter.string(from: status.entry.startDate) ++ let startTime: String ++ // Indicate if an entry is from the previous day to avoid potential confusion ++ let midnight = Calendar.current.startOfDay(for: Date()) ++ if status.entry.startDate < midnight { ++ startTime = relativeTimeFormatter.string(from: status.entry.startDate) ++ } else { ++ startTime = timeFormatter.string(from: status.entry.startDate) ++ } + if let absorptionTime = status.entry.absorptionTime, + let duration = absorptionFormatter.string(from: absorptionTime) + { diff --git a/meal_week/dev_meal_week.patch b/meal_week/dev_meal_week.patch new file mode 100644 index 0000000..f38a0cc --- /dev/null +++ b/meal_week/dev_meal_week.patch @@ -0,0 +1,79 @@ +Submodule Loop contains modified content +diff --git a/Loop/Loop/Managers/LoopDataManager.swift b/Loop/Loop/Managers/LoopDataManager.swift +index 2319f4ec..920ad2f9 100644 +--- a/Loop/Loop/Managers/LoopDataManager.swift ++++ b/Loop/Loop/Managers/LoopDataManager.swift +@@ -992,6 +992,6 @@ extension LoopDataManager { + + let retrospectiveStart = lastGlucoseDate.addingTimeInterval(-type(of: retrospectiveCorrection).retrospectionInterval) + +- let earliestEffectDate = Date(timeInterval: .hours(-24), since: now()) ++ let earliestEffectDate = Date(timeInterval: .hours(-7*24), since: now()) + let nextCounteractionEffectDate = insulinCounteractionEffects.last?.endDate ?? earliestEffectDate + let insulinEffectStartDate = nextCounteractionEffectDate.addingTimeInterval(.minutes(-5)) +diff --git a/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift b/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift +index fc770192..0b85b4c2 100644 +--- a/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift ++++ b/Loop/Loop/View Controllers/CarbAbsorptionViewController.swift +@@ -139,7 +139,7 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + charts.updateEndDate(chartStartDate.addingTimeInterval(.hours(totalHours+1))) // When there is no data, this allows presenting current hour + 1 + + let midnight = Calendar.current.startOfDay(for: Date()) +- let listStart = min(midnight, chartStartDate, Date(timeIntervalSinceNow: -deviceManager.carbStore.maximumAbsorptionTimeInterval)) ++ let earliestMidnight = midnight - .hours(6*24) + + let reloadGroup = DispatchGroup() + let shouldUpdateGlucose = currentContext.contains(.glucose) +@@ -158,11 +158,19 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + let allInsulinCounteractionEffects = state.insulinCounteractionEffects + insulinCounteractionEffects = allInsulinCounteractionEffects.filterDateRange(chartStartDate, nil) + ++ let earliestCounteractionEffect = allInsulinCounteractionEffects.first?.startDate ?? Date() ++ // Show carb entries back through midnight a week ago, or only as far back as counteraction effects are available ++ let boundOnCarbList = max(earliestMidnight, earliestCounteractionEffect) ++ // If counteraction effects are missing, at least show all the entries for today and those on the chart ++ let displayListStart = min(boundOnCarbList, midnight, chartStartDate) ++ // To estimate dynamic carb absorption for the entry at the start of the list, we need to fetch samples that might still be absorbing ++ let fetchEntriesStart = displayListStart.addingTimeInterval(-self.deviceManager.carbStore.maximumAbsorptionTimeInterval) ++ + reloadGroup.enter() +- self.deviceManager.carbStore.getCarbStatus(start: listStart, end: nil, effectVelocities: allInsulinCounteractionEffects) { (result) in ++ self.deviceManager.carbStore.getCarbStatus(start: fetchEntriesStart, end: nil, effectVelocities: allInsulinCounteractionEffects) { (result) in + switch result { + case .success(let status): +- carbStatuses = status ++ carbStatuses = status.filterDateRange(displayListStart, nil) + carbsOnBoard = status.getClampedCarbsOnBoard() + case .failure(let error): + self.log.error("CarbStore failed to get carbStatus: %{public}@", String(describing: error)) +@@ -287,6 +295,14 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + return formatter + }() + ++ private lazy var relativeTimeFormatter: DateFormatter = { ++ let formatter = DateFormatter() ++ formatter.dateStyle = .medium ++ formatter.doesRelativeDateFormatting = true ++ formatter.timeStyle = .short ++ return formatter ++ }() ++ + override func numberOfSections(in tableView: UITableView) -> Int { + return Section.count + } +@@ -343,7 +359,14 @@ final class CarbAbsorptionViewController: LoopChartsTableViewController, Identif + } + + // Entry time +- let startTime = timeFormatter.string(from: status.entry.startDate) ++ let startTime: String ++ // Indicate if an entry is from the previous day to avoid potential confusion ++ let midnight = Calendar.current.startOfDay(for: Date()) ++ if status.entry.startDate < midnight { ++ startTime = relativeTimeFormatter.string(from: status.entry.startDate) ++ } else { ++ startTime = timeFormatter.string(from: status.entry.startDate) ++ } + if let absorptionTime = status.entry.absorptionTime, + let duration = absorptionFormatter.string(from: absorptionTime) + { From 3ef3f15018c90605a6f972a3281d47582ad1d4e3 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 18 Apr 2025 19:55:05 -0700 Subject: [PATCH 2/2] rename files to ensure main branch gets appropriate patch --- meal_days/{meal_days.patch => 01_meal_days.patch} | 0 meal_week/{meal_week.patch => 01_meal_week.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename meal_days/{meal_days.patch => 01_meal_days.patch} (100%) rename meal_week/{meal_week.patch => 01_meal_week.patch} (100%) diff --git a/meal_days/meal_days.patch b/meal_days/01_meal_days.patch similarity index 100% rename from meal_days/meal_days.patch rename to meal_days/01_meal_days.patch diff --git a/meal_week/meal_week.patch b/meal_week/01_meal_week.patch similarity index 100% rename from meal_week/meal_week.patch rename to meal_week/01_meal_week.patch