HealthKitStateModel.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import Combine
  2. import SwiftUI
  3. extension AppleHealthKit {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Injected() var healthKitManager: HealthKitManager!
  6. @Published var units: GlucoseUnits = .mgdL
  7. @Published var useAppleHealth = false
  8. @Published var needShowInformationTextForSetPermissions = false
  9. override func subscribe() {
  10. units = settingsManager.settings.units
  11. useAppleHealth = settingsManager.settings.useAppleHealth
  12. needShowInformationTextForSetPermissions = healthKitManager.areAllowAllPermissions
  13. subscribeSetting(\.useAppleHealth, on: $useAppleHealth) {
  14. useAppleHealth = $0
  15. } didSet: { [weak self] value in
  16. guard let self = self else { return }
  17. guard value else {
  18. self.needShowInformationTextForSetPermissions = false
  19. return
  20. }
  21. Task {
  22. do {
  23. let permissionGranted = try await self.healthKitManager.requestPermission()
  24. await MainActor.run {
  25. self.needShowInformationTextForSetPermissions = !self.healthKitManager.checkAvailabilitySaveBG()
  26. }
  27. if permissionGranted {
  28. debug(.service, "Permission granted for HealthKitManager")
  29. self.healthKitManager.createBGObserver()
  30. self.healthKitManager.enableBackgroundDelivery()
  31. } else {
  32. warning(.service, "Permission not granted for HealthKitManager")
  33. }
  34. } catch {
  35. warning(.service, "Error requesting permission for HealthKitManager", error: error)
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. extension AppleHealthKit.StateModel: SettingsObserver {
  43. func settingsDidChange(_: FreeAPSSettings) {
  44. units = settingsManager.settings.units
  45. }
  46. }