DeviceDataManager.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. doseStore = DoseStore(
  26. healthStore: healthStore,
  27. cacheStore: cacheStore,
  28. insulinModelProvider: PresetInsulinModelProvider(defaultRapidActingModel: ExponentialInsulinModelPreset.rapidActingAdult),
  29. longestEffectDuration: ExponentialInsulinModelPreset.rapidActingAdult.effectDuration,
  30. basalProfile: basalRateSchedule,
  31. insulinSensitivitySchedule: insulinSensitivitySchedule,
  32. provenanceIdentifier: HKSource.default().bundleIdentifier
  33. )
  34. glucoseStore = GlucoseStore(healthStore: healthStore,
  35. cacheStore: cacheStore,
  36. provenanceIdentifier: HKSource.default().bundleIdentifier)
  37. }
  38. // Data stores
  39. let carbStore: CarbStore!
  40. let doseStore: DoseStore
  41. let glucoseStore: GlucoseStore!
  42. // Settings
  43. var basalRateSchedule = UserDefaults.standard.basalRateSchedule {
  44. didSet {
  45. UserDefaults.standard.basalRateSchedule = basalRateSchedule
  46. doseStore.basalProfile = basalRateSchedule
  47. }
  48. }
  49. var carbRatioSchedule = UserDefaults.standard.carbRatioSchedule {
  50. didSet {
  51. UserDefaults.standard.carbRatioSchedule = carbRatioSchedule
  52. carbStore?.carbRatioSchedule = carbRatioSchedule
  53. }
  54. }
  55. var insulinSensitivitySchedule = UserDefaults.standard.insulinSensitivitySchedule {
  56. didSet {
  57. UserDefaults.standard.insulinSensitivitySchedule = insulinSensitivitySchedule
  58. carbStore?.insulinSensitivitySchedule = insulinSensitivitySchedule
  59. doseStore.insulinSensitivitySchedule = insulinSensitivitySchedule
  60. }
  61. }
  62. var glucoseTargetRangeSchedule = UserDefaults.standard.glucoseTargetRangeSchedule {
  63. didSet {
  64. UserDefaults.standard.glucoseTargetRangeSchedule = glucoseTargetRangeSchedule
  65. }
  66. }
  67. public var preMealTargetRange: DoubleRange? = UserDefaults.standard.preMealTargetRange {
  68. didSet {
  69. UserDefaults.standard.preMealTargetRange = preMealTargetRange
  70. }
  71. }
  72. public var legacyWorkoutTargetRange: DoubleRange? = UserDefaults.standard.legacyWorkoutTargetRange {
  73. didSet {
  74. UserDefaults.standard.legacyWorkoutTargetRange = legacyWorkoutTargetRange
  75. }
  76. }
  77. var pumpID = UserDefaults.standard.pumpID {
  78. didSet {
  79. UserDefaults.standard.pumpID = pumpID
  80. if pumpID != oldValue {
  81. doseStore.resetPumpData()
  82. }
  83. }
  84. }
  85. // MARK: CarbStoreDelegate
  86. func carbStoreHasUpdatedCarbData(_ carbStore: CarbStore) {}
  87. func carbStore(_ carbStore: CarbStore, didError error: CarbStore.CarbStoreError) {
  88. print("carbstore error: \(error)")
  89. }
  90. }