RemoteSettingsViewModel.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 deviceToken: String
  15. @Published var sharedSecret: String
  16. @Published var productionEnvironment: Bool
  17. @Published var apnsKey: String
  18. @Published var teamId: String
  19. @Published var keyId: String
  20. @Published var bundleId: String
  21. @Published var maxBolus: HKQuantity
  22. @Published var maxCarbs: HKQuantity
  23. @Published var maxProtein: HKQuantity
  24. @Published var maxFat: HKQuantity
  25. private var storage = Storage.shared
  26. private var cancellables = Set<AnyCancellable>()
  27. init() {
  28. self.remoteType = storage.remoteType.value
  29. self.user = storage.user.value
  30. self.deviceToken = storage.deviceToken.value
  31. self.sharedSecret = storage.sharedSecret.value
  32. self.productionEnvironment = storage.productionEnvironment.value
  33. self.apnsKey = storage.apnsKey.value
  34. self.teamId = storage.teamId.value
  35. self.keyId = storage.keyId.value
  36. self.bundleId = storage.bundleId.value
  37. self.maxBolus = storage.maxBolus.value
  38. self.maxCarbs = storage.maxCarbs.value
  39. self.maxProtein = storage.maxProtein.value
  40. self.maxFat = storage.maxFat.value
  41. setupBindings()
  42. }
  43. private func setupBindings() {
  44. $remoteType
  45. .sink { [weak self] in self?.storage.remoteType.value = $0 }
  46. .store(in: &cancellables)
  47. $user
  48. .sink { [weak self] in self?.storage.user.value = $0 }
  49. .store(in: &cancellables)
  50. $deviceToken
  51. .sink { [weak self] in self?.storage.deviceToken.value = $0 }
  52. .store(in: &cancellables)
  53. $sharedSecret
  54. .sink { [weak self] in self?.storage.sharedSecret.value = $0 }
  55. .store(in: &cancellables)
  56. $productionEnvironment
  57. .sink { [weak self] in self?.storage.productionEnvironment.value = $0 }
  58. .store(in: &cancellables)
  59. $apnsKey
  60. .sink { [weak self] in self?.storage.apnsKey.value = $0 }
  61. .store(in: &cancellables)
  62. $teamId
  63. .sink { [weak self] in self?.storage.teamId.value = $0 }
  64. .store(in: &cancellables)
  65. $keyId
  66. .sink { [weak self] in self?.storage.keyId.value = $0 }
  67. .store(in: &cancellables)
  68. $bundleId
  69. .sink { [weak self] in self?.storage.bundleId.value = $0 }
  70. .store(in: &cancellables)
  71. $maxBolus
  72. .sink { [weak self] in self?.storage.maxBolus.value = $0 }
  73. .store(in: &cancellables)
  74. $maxCarbs
  75. .sink { [weak self] in self?.storage.maxCarbs.value = $0 }
  76. .store(in: &cancellables)
  77. $maxProtein
  78. .sink { [weak self] in self?.storage.maxProtein.value = $0 }
  79. .store(in: &cancellables)
  80. $maxFat
  81. .sink { [weak self] in self?.storage.maxFat.value = $0 }
  82. .store(in: &cancellables)
  83. }
  84. }