DeviceDataManager.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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 {
  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. cacheLength: .hours(24),
  19. defaultAbsorptionTimes: (fast: .minutes(30), medium: .hours(3), slow: .hours(5)),
  20. observationInterval: .hours(24),
  21. carbRatioSchedule: carbRatioSchedule,
  22. insulinSensitivitySchedule: insulinSensitivitySchedule,
  23. provenanceIdentifier: HKSource.default().bundleIdentifier
  24. )
  25. let insulinModelSetting: InsulinModelSettings?
  26. if let actionDuration = insulinActionDuration {
  27. let insulinModel = WalshInsulinModel(actionDuration: actionDuration)
  28. insulinModelSetting = InsulinModelSettings(model: insulinModel)
  29. } else {
  30. insulinModelSetting = nil
  31. }
  32. doseStore = DoseStore(
  33. healthStore: healthStore,
  34. cacheStore: cacheStore,
  35. pumpInsulinModelSetting: insulinModelSetting,
  36. basalProfile: basalRateSchedule,
  37. insulinSensitivitySchedule: insulinSensitivitySchedule,
  38. provenanceIdentifier: HKSource.default().bundleIdentifier
  39. )
  40. glucoseStore = GlucoseStore(healthStore: healthStore,
  41. cacheStore: cacheStore,
  42. provenanceIdentifier: HKSource.default().bundleIdentifier)
  43. }
  44. // Data stores
  45. let carbStore: CarbStore!
  46. let doseStore: DoseStore
  47. let glucoseStore: GlucoseStore!
  48. // Settings
  49. var basalRateSchedule = UserDefaults.standard.basalRateSchedule {
  50. didSet {
  51. UserDefaults.standard.basalRateSchedule = basalRateSchedule
  52. doseStore.basalProfile = basalRateSchedule
  53. }
  54. }
  55. var carbRatioSchedule = UserDefaults.standard.carbRatioSchedule {
  56. didSet {
  57. UserDefaults.standard.carbRatioSchedule = carbRatioSchedule
  58. carbStore?.carbRatioSchedule = carbRatioSchedule
  59. }
  60. }
  61. var insulinActionDuration = UserDefaults.standard.insulinActionDuration {
  62. didSet {
  63. UserDefaults.standard.insulinActionDuration = insulinActionDuration
  64. if let duration = insulinActionDuration {
  65. let model = WalshInsulinModel(actionDuration: duration)
  66. doseStore.insulinModelSettings = InsulinModelSettings(model: model)
  67. }
  68. }
  69. }
  70. var insulinSensitivitySchedule = UserDefaults.standard.insulinSensitivitySchedule {
  71. didSet {
  72. UserDefaults.standard.insulinSensitivitySchedule = insulinSensitivitySchedule
  73. carbStore?.insulinSensitivitySchedule = insulinSensitivitySchedule
  74. doseStore.insulinSensitivitySchedule = insulinSensitivitySchedule
  75. }
  76. }
  77. var glucoseTargetRangeSchedule = UserDefaults.standard.glucoseTargetRangeSchedule {
  78. didSet {
  79. UserDefaults.standard.glucoseTargetRangeSchedule = glucoseTargetRangeSchedule
  80. }
  81. }
  82. public var preMealTargetRange: DoubleRange? = UserDefaults.standard.preMealTargetRange {
  83. didSet {
  84. UserDefaults.standard.preMealTargetRange = preMealTargetRange
  85. }
  86. }
  87. public var legacyWorkoutTargetRange: DoubleRange? = UserDefaults.standard.legacyWorkoutTargetRange {
  88. didSet {
  89. UserDefaults.standard.legacyWorkoutTargetRange = legacyWorkoutTargetRange
  90. }
  91. }
  92. var pumpID = UserDefaults.standard.pumpID {
  93. didSet {
  94. UserDefaults.standard.pumpID = pumpID
  95. if pumpID != oldValue {
  96. doseStore.resetPumpData()
  97. }
  98. }
  99. }
  100. // MARK: CarbStoreDelegate
  101. func carbStoreHasUpdatedCarbData(_ carbStore: CarbStore) {}
  102. func carbStore(_ carbStore: CarbStore, didError error: CarbStore.CarbStoreError) {
  103. print("carbstore error: \(error)")
  104. }
  105. }