FetchTreatmentsManager.swift 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Combine
  2. import Foundation
  3. import SwiftDate
  4. import Swinject
  5. protocol FetchTreatmentsManager {}
  6. final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
  7. private let processQueue = DispatchQueue(label: "BaseFetchTreatmentsManager.processQueue")
  8. @Injected() var nightscoutManager: NightscoutManager!
  9. @Injected() var tempTargetsStorage: TempTargetsStorage!
  10. @Injected() var carbsStorage: CarbsStorage!
  11. private var lifetime = Set<AnyCancellable>()
  12. private let timer = DispatchTimer(timeInterval: 1.minutes.timeInterval)
  13. init(resolver: Resolver) {
  14. injectServices(resolver)
  15. subscribe()
  16. }
  17. private func subscribe() {
  18. timer.publisher
  19. .receive(on: processQueue)
  20. .flatMap { _ -> AnyPublisher<([CarbsEntry], [TempTarget]), Never> in
  21. debug(.nightscout, "FetchTreatmentsManager heartbeat")
  22. debug(.nightscout, "Start fetching carbs and temptargets")
  23. return Publishers.CombineLatest(
  24. self.nightscoutManager.fetchCarbs(),
  25. self.nightscoutManager.fetchTempTargets()
  26. ).eraseToAnyPublisher()
  27. }
  28. .sink { carbs, targets in
  29. self.carbsStorage.storeCarbs(carbs)
  30. self.tempTargetsStorage.storeTempTargets(targets)
  31. }
  32. .store(in: &lifetime)
  33. timer.resume()
  34. }
  35. }