RemoteSettingsViewModel.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. private var storage = Storage.shared
  22. private var cancellables = Set<AnyCancellable>()
  23. init() {
  24. self.remoteType = storage.remoteType.value
  25. self.user = storage.user.value
  26. self.sharedSecret = storage.sharedSecret.value
  27. self.apnsKey = storage.apnsKey.value
  28. self.keyId = storage.keyId.value
  29. self.maxBolus = storage.maxBolus.value
  30. self.maxCarbs = storage.maxCarbs.value
  31. self.maxProtein = storage.maxProtein.value
  32. self.maxFat = storage.maxFat.value
  33. setupBindings()
  34. }
  35. private func setupBindings() {
  36. $remoteType
  37. .sink { [weak self] in self?.storage.remoteType.value = $0 }
  38. .store(in: &cancellables)
  39. $user
  40. .sink { [weak self] in self?.storage.user.value = $0 }
  41. .store(in: &cancellables)
  42. $sharedSecret
  43. .sink { [weak self] in self?.storage.sharedSecret.value = $0 }
  44. .store(in: &cancellables)
  45. $apnsKey
  46. .sink { [weak self] in self?.storage.apnsKey.value = $0 }
  47. .store(in: &cancellables)
  48. $keyId
  49. .sink { [weak self] in self?.storage.keyId.value = $0 }
  50. .store(in: &cancellables)
  51. $maxBolus
  52. .sink { [weak self] in self?.storage.maxBolus.value = $0 }
  53. .store(in: &cancellables)
  54. $maxCarbs
  55. .sink { [weak self] in self?.storage.maxCarbs.value = $0 }
  56. .store(in: &cancellables)
  57. $maxProtein
  58. .sink { [weak self] in self?.storage.maxProtein.value = $0 }
  59. .store(in: &cancellables)
  60. $maxFat
  61. .sink { [weak self] in self?.storage.maxFat.value = $0 }
  62. .store(in: &cancellables)
  63. }
  64. }