MainViewController+updateStats.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // LoopFollow
  2. // MainViewController+updateStats.swift
  3. import Foundation
  4. extension MainViewController {
  5. func updateStats() {
  6. if bgData.count > 0 {
  7. var lastDayOfData = bgData
  8. let graphHours = 24 * Storage.shared.downloadDays.value
  9. // If we loaded more than 1 day of data, only use the last day for the stats
  10. if graphHours > 24 {
  11. let oneDayAgo = dateTimeUtils.getTimeIntervalNHoursAgo(N: 24)
  12. var startIndex = 0
  13. while startIndex < bgData.count, bgData[startIndex].date < oneDayAgo {
  14. startIndex += 1
  15. }
  16. lastDayOfData = Array(bgData.dropFirst(startIndex))
  17. }
  18. let stats = StatsData(bgData: lastDayOfData)
  19. statsDisplayModel.lowPercent = String(format: "%.1f%%", stats.percentLow)
  20. statsDisplayModel.inRangePercent = String(format: "%.1f%%", stats.percentRange)
  21. statsDisplayModel.highPercent = String(format: "%.1f%%", stats.percentHigh)
  22. statsDisplayModel.avgBG = Localizer.toDisplayUnits(String(format: "%.0f", stats.avgBG))
  23. statsDisplayModel.estA1CTitle = UnitSettingsStore.shared.glycemicMetricMode == .gmi ? "GMI:" : "Est. A1C:"
  24. if UnitSettingsStore.shared.glycemicOutputUnit == .mmolMol {
  25. statsDisplayModel.estA1C = String(format: "%.0f", stats.a1C)
  26. } else {
  27. statsDisplayModel.estA1C = String(format: "%.1f", stats.a1C)
  28. }
  29. if UnitSettingsStore.shared.variabilityMetricMode == .stdDeviation {
  30. statsDisplayModel.stdDevTitle = "Std Dev:"
  31. if UnitSettingsStore.shared.glucoseUnit == .mgdL {
  32. statsDisplayModel.stdDev = String(format: "%.0f", stats.stdDev)
  33. } else {
  34. statsDisplayModel.stdDev = String(format: "%.1f", stats.stdDev)
  35. }
  36. } else {
  37. statsDisplayModel.stdDevTitle = "CV:"
  38. statsDisplayModel.stdDev = String(format: "%.1f%%", stats.coefficientOfVariation)
  39. }
  40. statsDisplayModel.pieLow = Double(stats.percentLow)
  41. statsDisplayModel.pieRange = Double(stats.percentRange)
  42. statsDisplayModel.pieHigh = Double(stats.percentHigh)
  43. }
  44. }
  45. }