Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LoopFollow/Stats/AggregatedStatsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ struct AggregatedStatsView: View {
let startOfToday = calendar.startOfDay(for: Date())
let end = calendar.date(byAdding: .second, value: -1, to: startOfToday) ?? Date()
let endDay = calendar.startOfDay(for: end)
let startDay = calendar.date(byAdding: .day, value: -7, to: endDay) ?? endDay
let startDay = calendar.date(byAdding: .day, value: -(7 - 1), to: endDay) ?? endDay
let start = calendar.startOfDay(for: startDay)
_startDate = State(initialValue: start)
_endDate = State(initialValue: end)
Expand Down
7 changes: 5 additions & 2 deletions LoopFollow/Stats/AggregatedStatsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,11 @@ class AggregatedStatsViewModel: ObservableObject {
}

func updatePeriod(_ days: Int, completion: @escaping () -> Void = {}) {
let endDate = Date()
let startDate = dateTimeUtils.displayCalendar().date(byAdding: .day, value: -days, to: endDate) ?? endDate
let calendar = dateTimeUtils.displayCalendar()
let startOfToday = calendar.startOfDay(for: Date())
let endDate = calendar.date(byAdding: .second, value: -1, to: startOfToday) ?? Date()
let endDayStart = calendar.startOfDay(for: endDate)
let startDate = calendar.date(byAdding: .day, value: -(days - 1), to: endDayStart) ?? endDayStart
updateDateRange(start: startDate, end: endDate, completion: completion)
}

Expand Down
6 changes: 4 additions & 2 deletions LoopFollow/Stats/DateRangePicker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ struct DateRangePicker: View {

private var dayCount: Int {
let calendar = dateTimeUtils.displayCalendar()
return calendar.dateComponents([.day], from: startDate, to: endDate).day ?? 0
let startDay = calendar.startOfDay(for: startDate)
let endDay = calendar.startOfDay(for: endDate)
return (calendar.dateComponents([.day], from: startDay, to: endDay).day ?? 0) + 1
}

private var lastFullDay: Date {
Expand Down Expand Up @@ -241,7 +243,7 @@ struct DateRangePicker: View {
let calendar = dateTimeUtils.displayCalendar()
endDate = lastFullDay
let endDayStart = calendar.startOfDay(for: endDate)
let startDayStart = calendar.date(byAdding: .day, value: -days, to: endDayStart) ?? endDayStart
let startDayStart = calendar.date(byAdding: .day, value: -(days - 1), to: endDayStart) ?? endDayStart
startDate = calendar.startOfDay(for: startDayStart)
showStartDatePicker = false
showEndDatePicker = false
Expand Down
6 changes: 3 additions & 3 deletions LoopFollow/Stats/SimpleStatsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class SimpleStatsViewModel: ObservableObject {
let smbTotal = smbInPeriod.reduce(0.0) { $0 + $1.value }
let totalBolusInPeriod = bolusTotal + smbTotal

let cutoffTime = Date().timeIntervalSince1970 - (Double(dataService.daysToAnalyze) * 24 * 60 * 60)
let cutoffTime = dataService.startDate.timeIntervalSince1970
let allBolusDates = (bolusesInPeriod + smbInPeriod).map { $0.date }.filter { $0 >= cutoffTime }
let actualDays = calculateActualDaysCovered(dates: allBolusDates, requestedDays: dataService.daysToAnalyze)

Expand All @@ -93,7 +93,7 @@ class SimpleStatsViewModel: ObservableObject {

let totalCarbsInPeriod = dailyCarbs.values.reduce(0.0, +)

let daysWithData = max(dailyCarbs.count, 1)
let daysWithData = dataService.daysToAnalyze

if daysWithData > 0 {
avgCarbs = totalCarbsInPeriod / Double(daysWithData)
Expand Down Expand Up @@ -295,7 +295,7 @@ class SimpleStatsViewModel: ObservableObject {
guard !dates.isEmpty else { return requestedDays }

let calendar = dateTimeUtils.displayCalendar()
let cutoffTime = Date().timeIntervalSince1970 - (Double(requestedDays) * 24 * 60 * 60)
let cutoffTime = dataService.startDate.timeIntervalSince1970
let filteredDates = dates.filter { $0 >= cutoffTime }

var uniqueDays = Set<Date>()
Expand Down
8 changes: 5 additions & 3 deletions LoopFollow/Stats/StatsDataService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ class StatsDataService {
func updateDateRange(start: Date, end: Date) {
startDate = start
endDate = end
// Also update daysToAnalyze for compatibility with existing code
let daysBetween = dateTimeUtils.displayCalendar().dateComponents([.day], from: start, to: end).day ?? 14
daysToAnalyze = max(daysBetween, 1)
let calendar = dateTimeUtils.displayCalendar()
let startDay = calendar.startOfDay(for: start)
let endDay = calendar.startOfDay(for: end)
let daysBetween = calendar.dateComponents([.day], from: startDay, to: endDay).day ?? 13
daysToAnalyze = daysBetween + 1
}

func ensureDataAvailable(onProgress: @escaping () -> Void, completion: @escaping () -> Void) {
Expand Down
Loading