AutotuneConfigViewModel.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. @Published var publishedDate = Date()
  11. @Persisted(key: "lastAutotuneDate") private var lastAutotuneDate = Date() {
  12. didSet {
  13. publishedDate = lastAutotuneDate
  14. }
  15. }
  16. override func subscribe() {
  17. autotune = provider.autotune
  18. units = settingsManager.settings.units
  19. useAutotune = settingsManager.settings.useAutotune
  20. publishedDate = lastAutotuneDate
  21. $useAutotune
  22. .removeDuplicates()
  23. .flatMap { use -> AnyPublisher<Bool, Never> in
  24. self.settingsManager.settings.useAutotune = use
  25. return self.apsManager.makeProfiles()
  26. }
  27. .sink { _ in }
  28. .store(in: &lifetime)
  29. }
  30. func run() {
  31. provider.runAutotune()
  32. .receive(on: DispatchQueue.main)
  33. .flatMap { result -> AnyPublisher<Bool, Never> in
  34. self.autotune = result
  35. return self.apsManager.makeProfiles()
  36. }
  37. .sink { _ in
  38. self.lastAutotuneDate = Date()
  39. }.store(in: &lifetime)
  40. }
  41. func delete() {
  42. provider.deleteAutotune()
  43. autotune = nil
  44. apsManager.makeProfiles()
  45. .sink { _ in }
  46. .store(in: &lifetime)
  47. }
  48. }
  49. }