MainViewController+updateStats.swift 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // LoopFollow
  2. // MainViewController+updateStats.swift
  3. import Charts
  4. import Foundation
  5. import UIKit
  6. extension MainViewController {
  7. func updateStats() {
  8. if bgData.count > 0 {
  9. var lastDayOfData = bgData
  10. let graphHours = 24 * Storage.shared.downloadDays.value
  11. // If we loaded more than 1 day of data, only use the last day for the stats
  12. if graphHours > 24 {
  13. let oneDayAgo = dateTimeUtils.getTimeIntervalNHoursAgo(N: 24)
  14. var startIndex = 0
  15. while startIndex < bgData.count, bgData[startIndex].date < oneDayAgo {
  16. startIndex += 1
  17. }
  18. lastDayOfData = Array(bgData.dropFirst(startIndex))
  19. }
  20. let stats = StatsData(bgData: lastDayOfData)
  21. statsLowPercent.text = String(format: "%.1f%%", stats.percentLow)
  22. statsInRangePercent.text = String(format: "%.1f%%", stats.percentRange)
  23. statsHighPercent.text = String(format: "%.1f%%", stats.percentHigh)
  24. statsAvgBG.text = Localizer.toDisplayUnits(String(format: "%.0f", stats.avgBG))
  25. if Storage.shared.useIFCC.value {
  26. statsEstA1C.text = String(format: "%.0f", stats.a1C)
  27. } else {
  28. statsEstA1C.text = String(format: "%.1f", stats.a1C)
  29. }
  30. statsStdDev.text = String(format: "%.2f", stats.stdDev)
  31. createStatsPie(pieData: stats.pie)
  32. }
  33. }
  34. fileprivate func createStatsPie(pieData: [DataStructs.pieData]) {
  35. statsPieChart.legend.enabled = false
  36. statsPieChart.drawEntryLabelsEnabled = false
  37. statsPieChart.drawHoleEnabled = false
  38. statsPieChart.rotationEnabled = false
  39. var chartEntry = [PieChartDataEntry]()
  40. var colors = [NSUIColor]()
  41. for i in 0 ..< pieData.count {
  42. var slice = Double(pieData[i].value)
  43. if slice == 0 { slice = 0.1 }
  44. let value = PieChartDataEntry(value: slice)
  45. chartEntry.append(value)
  46. if pieData[i].name == "high" {
  47. colors.append(NSUIColor.systemYellow)
  48. } else if pieData[i].name == "low" {
  49. colors.append(NSUIColor.systemRed)
  50. } else {
  51. colors.append(NSUIColor.systemGreen)
  52. }
  53. }
  54. let set = PieChartDataSet(entries: chartEntry, label: "")
  55. set.drawIconsEnabled = false
  56. set.sliceSpace = 2
  57. set.drawValuesEnabled = false
  58. set.valueLineWidth = 0
  59. set.formLineWidth = 0
  60. set.sliceSpace = 0
  61. set.colors.removeAll()
  62. if colors.count > 0 {
  63. for i in 0 ..< colors.count {
  64. set.addColor(colors[i])
  65. }
  66. }
  67. let data = PieChartData(dataSet: set)
  68. statsPieChart.data = data
  69. }
  70. }