HealthKitStateModel.swift 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. } else {
  30. warning(.service, "Permission not granted for HealthKitManager")
  31. }
  32. } catch {
  33. warning(.service, "Error requesting permission for HealthKitManager", error: error)
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. extension AppleHealthKit.StateModel: SettingsObserver {
  41. func settingsDidChange(_: FreeAPSSettings) {
  42. units = settingsManager.settings.units
  43. }
  44. }