| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import Combine
- import Foundation
- import SwiftDate
- import Swinject
- protocol FetchTreatmentsManager {}
- final class BaseFetchTreatmentsManager: FetchTreatmentsManager, Injectable {
- private let processQueue = DispatchQueue(label: "BaseFetchTreatmentsManager.processQueue")
- @Injected() var nightscoutManager: NightscoutManager!
- @Injected() var tempTargetsStorage: TempTargetsStorage!
- @Injected() var carbsStorage: CarbsStorage!
- private var lifetime = Lifetime()
- private let timer = DispatchTimer(timeInterval: 1.minutes.timeInterval)
- init(resolver: Resolver) {
- injectServices(resolver)
- subscribe()
- }
- private func subscribe() {
- timer.publisher
- .receive(on: processQueue)
- .flatMap { _ -> AnyPublisher<([CarbsEntry], [TempTarget]), Never> in
- debug(.nightscout, "FetchTreatmentsManager heartbeat")
- debug(.nightscout, "Start fetching carbs and temptargets")
- return Publishers.CombineLatest(
- self.nightscoutManager.fetchCarbs(),
- self.nightscoutManager.fetchTempTargets()
- ).eraseToAnyPublisher()
- }
- .sink { carbs, targets in
- let filteredCarbs = carbs.filter { !($0.enteredBy?.contains(CarbsEntry.manual) ?? false) }
- if filteredCarbs.isNotEmpty {
- self.carbsStorage.storeCarbs(filteredCarbs)
- }
- let filteredTargets = targets.filter { !($0.enteredBy?.contains(TempTarget.manual) ?? false) }
- if filteredTargets.isNotEmpty {
- self.tempTargetsStorage.storeTempTargets(filteredTargets)
- }
- }
- .store(in: &lifetime)
- timer.fire()
- timer.resume()
- }
- }
|