AutotuneConfigStateModel.swift 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import Combine
  2. import SwiftUI
  3. extension AutotuneConfig {
  4. final class StateModel: BaseStateModel<Provider> {
  5. @Injected() var apsManager: APSManager!
  6. @Published var useAutotune = false
  7. @Published var autotune: Autotune?
  8. private(set) var units: GlucoseUnits = .mmolL
  9. @Published var publishedDate = Date()
  10. @Persisted(key: "lastAutotuneDate") private var lastAutotuneDate = Date() {
  11. didSet {
  12. DispatchQueue.main.async {
  13. self.publishedDate = self.lastAutotuneDate
  14. }
  15. }
  16. }
  17. override func subscribe() {
  18. autotune = provider.autotune
  19. units = settingsManager.settings.units
  20. useAutotune = settingsManager.settings.useAutotune
  21. publishedDate = lastAutotuneDate
  22. $useAutotune
  23. .removeDuplicates()
  24. .flatMap { [weak self] use -> AnyPublisher<Bool, Never> in
  25. guard let self = self else {
  26. return Just(false).eraseToAnyPublisher()
  27. }
  28. self.settingsManager.settings.useAutotune = use
  29. return self.apsManager.makeProfiles()
  30. }
  31. .cancellable()
  32. .store(in: &lifetime)
  33. }
  34. func run() {
  35. provider.runAutotune()
  36. .receive(on: DispatchQueue.main)
  37. .flatMap { [weak self] result -> AnyPublisher<Bool, Never> in
  38. guard let self = self else {
  39. return Just(false).eraseToAnyPublisher()
  40. }
  41. self.autotune = result
  42. return self.apsManager.makeProfiles()
  43. }
  44. .sink { [weak self] _ in
  45. self?.lastAutotuneDate = Date()
  46. }.store(in: &lifetime)
  47. }
  48. func delete() {
  49. provider.deleteAutotune()
  50. autotune = nil
  51. apsManager.makeProfiles()
  52. .cancellable()
  53. .store(in: &lifetime)
  54. }
  55. }
  56. }