// // DeviceDataManager.swift // LoopKit // // Created by Nathan Racklyeft on 3/18/16. // Copyright © 2016 Nathan Racklyeft. All rights reserved. // import Foundation import HealthKit import LoopKit class DeviceDataManager { init() { let healthStore = HKHealthStore() let cacheStore = PersistenceController(directoryURL: FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!) carbStore = CarbStore( healthStore: healthStore, cacheStore: cacheStore, cacheLength: .hours(24), defaultAbsorptionTimes: (fast: .minutes(30), medium: .hours(3), slow: .hours(5)), observationInterval: .hours(24), carbRatioSchedule: carbRatioSchedule, insulinSensitivitySchedule: insulinSensitivitySchedule, provenanceIdentifier: HKSource.default().bundleIdentifier ) let insulinModelSetting: InsulinModelSettings? if let actionDuration = insulinActionDuration { let insulinModel = WalshInsulinModel(actionDuration: actionDuration) insulinModelSetting = InsulinModelSettings(model: insulinModel) } else { insulinModelSetting = nil } doseStore = DoseStore( healthStore: healthStore, cacheStore: cacheStore, pumpInsulinModelSetting: insulinModelSetting, basalProfile: basalRateSchedule, insulinSensitivitySchedule: insulinSensitivitySchedule, provenanceIdentifier: HKSource.default().bundleIdentifier ) glucoseStore = GlucoseStore(healthStore: healthStore, cacheStore: cacheStore, provenanceIdentifier: HKSource.default().bundleIdentifier) } // Data stores let carbStore: CarbStore! let doseStore: DoseStore let glucoseStore: GlucoseStore! // Settings var basalRateSchedule = UserDefaults.standard.basalRateSchedule { didSet { UserDefaults.standard.basalRateSchedule = basalRateSchedule doseStore.basalProfile = basalRateSchedule } } var carbRatioSchedule = UserDefaults.standard.carbRatioSchedule { didSet { UserDefaults.standard.carbRatioSchedule = carbRatioSchedule carbStore?.carbRatioSchedule = carbRatioSchedule } } var insulinActionDuration = UserDefaults.standard.insulinActionDuration { didSet { UserDefaults.standard.insulinActionDuration = insulinActionDuration if let duration = insulinActionDuration { let model = WalshInsulinModel(actionDuration: duration) doseStore.insulinModelSettings = InsulinModelSettings(model: model) } } } var insulinSensitivitySchedule = UserDefaults.standard.insulinSensitivitySchedule { didSet { UserDefaults.standard.insulinSensitivitySchedule = insulinSensitivitySchedule carbStore?.insulinSensitivitySchedule = insulinSensitivitySchedule doseStore.insulinSensitivitySchedule = insulinSensitivitySchedule } } var glucoseTargetRangeSchedule = UserDefaults.standard.glucoseTargetRangeSchedule { didSet { UserDefaults.standard.glucoseTargetRangeSchedule = glucoseTargetRangeSchedule } } public var preMealTargetRange: DoubleRange? = UserDefaults.standard.preMealTargetRange { didSet { UserDefaults.standard.preMealTargetRange = preMealTargetRange } } public var legacyWorkoutTargetRange: DoubleRange? = UserDefaults.standard.legacyWorkoutTargetRange { didSet { UserDefaults.standard.legacyWorkoutTargetRange = legacyWorkoutTargetRange } } var pumpID = UserDefaults.standard.pumpID { didSet { UserDefaults.standard.pumpID = pumpID if pumpID != oldValue { doseStore.resetPumpData() } } } // MARK: CarbStoreDelegate func carbStoreHasUpdatedCarbData(_ carbStore: CarbStore) {} func carbStore(_ carbStore: CarbStore, didError error: CarbStore.CarbStoreError) { print("carbstore error: \(error)") } }