RemoteControlConfigStateModel.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import SwiftUI
  2. extension RemoteControlConfig {
  3. final class StateModel: BaseStateModel<Provider> {
  4. @Published var units: GlucoseUnits = .mgdL
  5. @Published var isTrioRemoteControlEnabled: Bool = false
  6. @Published var sharedSecret: String = ""
  7. override func subscribe() {
  8. units = settingsManager.settings.units
  9. isTrioRemoteControlEnabled = UserDefaults.standard.bool(forKey: "isTrioRemoteControlEnabled")
  10. sharedSecret = UserDefaults.standard.string(forKey: "trioRemoteControlSharedSecret") ?? generateInitialSharedSecret()
  11. $isTrioRemoteControlEnabled
  12. .receive(on: DispatchQueue.main)
  13. .sink { value in
  14. UserDefaults.standard.set(value, forKey: "isTrioRemoteControlEnabled")
  15. }
  16. .store(in: &lifetime)
  17. $sharedSecret
  18. .receive(on: DispatchQueue.main)
  19. .sink { value in
  20. UserDefaults.standard.set(value, forKey: "trioRemoteControlSharedSecret")
  21. }
  22. .store(in: &lifetime)
  23. }
  24. func generateNewSharedSecret() {
  25. let newSecret = UUID().uuidString.replacingOccurrences(of: "-", with: "")
  26. sharedSecret = newSecret
  27. UserDefaults.standard.set(newSecret, forKey: "trioRemoteControlSharedSecret")
  28. }
  29. private func generateInitialSharedSecret() -> String {
  30. let secret = UUID().uuidString.replacingOccurrences(of: "-", with: "")
  31. UserDefaults.standard.set(secret, forKey: "trioRemoteControlSharedSecret")
  32. return secret
  33. }
  34. }
  35. }
  36. extension RemoteControlConfig.StateModel: SettingsObserver {
  37. func settingsDidChange(_: FreeAPSSettings) {
  38. units = settingsManager.settings.units
  39. }
  40. }