MainViewController+updateStats.swift 2.9 KB

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