RemoteSettingsViewModel.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 teamId: String
  17. @Published var keyId: String
  18. @Published var maxBolus: HKQuantity
  19. @Published var maxCarbs: HKQuantity
  20. @Published var maxProtein: HKQuantity
  21. @Published var maxFat: HKQuantity
  22. private var storage = Storage.shared
  23. private var cancellables = Set<AnyCancellable>()
  24. init() {
  25. self.remoteType = storage.remoteType.value
  26. self.user = storage.user.value
  27. self.sharedSecret = storage.sharedSecret.value
  28. self.apnsKey = storage.apnsKey.value
  29. self.teamId = storage.teamId.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. setupBindings()
  36. }
  37. private func setupBindings() {
  38. $remoteType
  39. .sink { [weak self] in self?.storage.remoteType.value = $0 }
  40. .store(in: &cancellables)
  41. $user
  42. .sink { [weak self] in self?.storage.user.value = $0 }
  43. .store(in: &cancellables)
  44. $sharedSecret
  45. .sink { [weak self] in self?.storage.sharedSecret.value = $0 }
  46. .store(in: &cancellables)
  47. $apnsKey
  48. .sink { [weak self] in self?.storage.apnsKey.value = $0 }
  49. .store(in: &cancellables)
  50. $teamId
  51. .sink { [weak self] in self?.storage.teamId.value = $0 }
  52. .store(in: &cancellables)
  53. $keyId
  54. .sink { [weak self] in self?.storage.keyId.value = $0 }
  55. .store(in: &cancellables)
  56. $maxBolus
  57. .sink { [weak self] in self?.storage.maxBolus.value = $0 }
  58. .store(in: &cancellables)
  59. $maxCarbs
  60. .sink { [weak self] in self?.storage.maxCarbs.value = $0 }
  61. .store(in: &cancellables)
  62. $maxProtein
  63. .sink { [weak self] in self?.storage.maxProtein.value = $0 }
  64. .store(in: &cancellables)
  65. $maxFat
  66. .sink { [weak self] in self?.storage.maxFat.value = $0 }
  67. .store(in: &cancellables)
  68. }
  69. }