RemoteSettingsViewModel.swift 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // RemoteSettingsViewModel.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2024-08-25.
  6. // Copyright © 2024 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. import Combine
  10. import HealthKit
  11. class RemoteSettingsViewModel: ObservableObject {
  12. @Published var remoteType: RemoteType
  13. @Published var user: String
  14. @Published var sharedSecret: String
  15. @Published var apnsKey: String
  16. @Published var keyId: String
  17. @Published var maxBolus: HKQuantity
  18. @Published var maxCarbs: HKQuantity
  19. @Published var maxProtein: HKQuantity
  20. @Published var maxFat: HKQuantity
  21. @Published var mealWithBolus: Bool
  22. @Published var mealWithFatProtein: Bool
  23. private var storage = Storage.shared
  24. private var cancellables = Set<AnyCancellable>()
  25. init() {
  26. self.remoteType = storage.remoteType.value
  27. self.user = storage.user.value
  28. self.sharedSecret = storage.sharedSecret.value
  29. self.apnsKey = storage.apnsKey.value
  30. self.keyId = storage.keyId.value
  31. self.maxBolus = storage.maxBolus.value
  32. self.maxCarbs = storage.maxCarbs.value
  33. self.maxProtein = storage.maxProtein.value
  34. self.maxFat = storage.maxFat.value
  35. self.mealWithBolus = storage.mealWithBolus.value
  36. self.mealWithFatProtein = storage.mealWithFatProtein.value
  37. setupBindings()
  38. }
  39. private func setupBindings() {
  40. $remoteType
  41. .sink { [weak self] in self?.storage.remoteType.value = $0 }
  42. .store(in: &cancellables)
  43. $user
  44. .sink { [weak self] in self?.storage.user.value = $0 }
  45. .store(in: &cancellables)
  46. $sharedSecret
  47. .sink { [weak self] in self?.storage.sharedSecret.value = $0 }
  48. .store(in: &cancellables)
  49. $apnsKey
  50. .sink { [weak self] in self?.storage.apnsKey.value = $0 }
  51. .store(in: &cancellables)
  52. $keyId
  53. .sink { [weak self] in self?.storage.keyId.value = $0 }
  54. .store(in: &cancellables)
  55. $maxBolus
  56. .sink { [weak self] in self?.storage.maxBolus.value = $0 }
  57. .store(in: &cancellables)
  58. $maxCarbs
  59. .sink { [weak self] in self?.storage.maxCarbs.value = $0 }
  60. .store(in: &cancellables)
  61. $maxProtein
  62. .sink { [weak self] in self?.storage.maxProtein.value = $0 }
  63. .store(in: &cancellables)
  64. $maxFat
  65. .sink { [weak self] in self?.storage.maxFat.value = $0 }
  66. .store(in: &cancellables)
  67. $mealWithBolus
  68. .sink { [weak self] in self?.storage.mealWithBolus.value = $0 }
  69. .store(in: &cancellables)
  70. $mealWithFatProtein
  71. .sink { [weak self] in self?.storage.mealWithFatProtein.value = $0 }
  72. .store(in: &cancellables)
  73. }
  74. }