AutotuneConfigViewModel.swift 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import Combine
  2. import SwiftUI
  3. extension AutotuneConfig {
  4. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: AutotuneConfigProvider {
  5. @Injected() var settingsManager: SettingsManager!
  6. @Injected() var apsManager: APSManager!
  7. @Published var useAutotune = false
  8. @Published var autotune: Autotune?
  9. private(set) var units: GlucoseUnits = .mmolL
  10. override func subscribe() {
  11. autotune = provider.autotune
  12. units = settingsManager.settings.units
  13. useAutotune = settingsManager.settings.useAutotune
  14. $useAutotune
  15. .removeDuplicates()
  16. .flatMap { use -> AnyPublisher<Bool, Never> in
  17. self.settingsManager.settings.useAutotune = use
  18. return self.apsManager.makeProfiles()
  19. }
  20. .sink { _ in }
  21. .store(in: &lifetime)
  22. }
  23. func run() {
  24. provider.runAutotune()
  25. .receive(on: DispatchQueue.main)
  26. .flatMap { result -> AnyPublisher<Bool, Never> in
  27. self.autotune = result
  28. return self.apsManager.makeProfiles()
  29. }
  30. .sink { _ in }.store(in: &lifetime)
  31. }
  32. func delete() {
  33. provider.deleteAutotune()
  34. autotune = nil
  35. }
  36. }
  37. }