DeviceDataManager.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // DeviceDataManager.swift
  3. // LoopKit
  4. //
  5. // Created by Nathan Racklyeft on 3/18/16.
  6. // Copyright © 2016 Nathan Racklyeft. All rights reserved.
  7. //
  8. import Foundation
  9. import HealthKit
  10. import LoopKit
  11. class DeviceDataManager : CarbStoreDelegate {
  12. init() {
  13. let healthStore = HKHealthStore()
  14. let cacheStore = PersistenceController(directoryURL: FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!)
  15. carbStore = CarbStore(
  16. healthStore: healthStore,
  17. cacheStore: cacheStore,
  18. carbRatioSchedule: carbRatioSchedule,
  19. insulinSensitivitySchedule: insulinSensitivitySchedule
  20. )
  21. let insulinModel: WalshInsulinModel?
  22. if let actionDuration = insulinActionDuration {
  23. insulinModel = WalshInsulinModel(actionDuration: actionDuration)
  24. } else {
  25. insulinModel = nil
  26. }
  27. doseStore = DoseStore(
  28. healthStore: healthStore,
  29. cacheStore: cacheStore,
  30. insulinModel: insulinModel,
  31. basalProfile: basalRateSchedule,
  32. insulinSensitivitySchedule: insulinSensitivitySchedule
  33. )
  34. glucoseStore = GlucoseStore(healthStore: healthStore, cacheStore: cacheStore)
  35. carbStore?.delegate = self
  36. }
  37. // Data stores
  38. let carbStore: CarbStore!
  39. let doseStore: DoseStore
  40. let glucoseStore: GlucoseStore!
  41. // Settings
  42. var basalRateSchedule = UserDefaults.standard.basalRateSchedule {
  43. didSet {
  44. UserDefaults.standard.basalRateSchedule = basalRateSchedule
  45. doseStore.basalProfile = basalRateSchedule
  46. }
  47. }
  48. var carbRatioSchedule = UserDefaults.standard.carbRatioSchedule {
  49. didSet {
  50. UserDefaults.standard.carbRatioSchedule = carbRatioSchedule
  51. carbStore?.carbRatioSchedule = carbRatioSchedule
  52. }
  53. }
  54. var insulinActionDuration = UserDefaults.standard.insulinActionDuration {
  55. didSet {
  56. UserDefaults.standard.insulinActionDuration = insulinActionDuration
  57. if let duration = insulinActionDuration {
  58. doseStore.insulinModel = WalshInsulinModel(actionDuration: duration)
  59. }
  60. }
  61. }
  62. var insulinSensitivitySchedule = UserDefaults.standard.insulinSensitivitySchedule {
  63. didSet {
  64. UserDefaults.standard.insulinSensitivitySchedule = insulinSensitivitySchedule
  65. carbStore?.insulinSensitivitySchedule = insulinSensitivitySchedule
  66. doseStore.insulinSensitivitySchedule = insulinSensitivitySchedule
  67. }
  68. }
  69. var glucoseTargetRangeSchedule = UserDefaults.standard.glucoseTargetRangeSchedule {
  70. didSet {
  71. UserDefaults.standard.glucoseTargetRangeSchedule = glucoseTargetRangeSchedule
  72. }
  73. }
  74. public var preMealTargetRange: DoubleRange? = UserDefaults.standard.preMealTargetRange {
  75. didSet {
  76. UserDefaults.standard.preMealTargetRange = preMealTargetRange
  77. }
  78. }
  79. public var legacyWorkoutTargetRange: DoubleRange? = UserDefaults.standard.legacyWorkoutTargetRange {
  80. didSet {
  81. UserDefaults.standard.legacyWorkoutTargetRange = legacyWorkoutTargetRange
  82. }
  83. }
  84. var pumpID = UserDefaults.standard.pumpID {
  85. didSet {
  86. UserDefaults.standard.pumpID = pumpID
  87. if pumpID != oldValue {
  88. doseStore.resetPumpData()
  89. }
  90. }
  91. }
  92. // MARK: CarbStoreDelegate
  93. func carbStore(_ carbStore: CarbStore, didError error: CarbStore.CarbStoreError) {
  94. print("carbstore error: \(error)")
  95. }
  96. }