|
|
@@ -54,34 +54,32 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
|
|
|
private func subscribe() {
|
|
|
timer.publisher
|
|
|
.receive(on: processQueue)
|
|
|
- .flatMap { date -> AnyPublisher<(Date, Date, [BloodGlucose]), Never> in
|
|
|
+ .flatMap { date -> AnyPublisher<(Date, Date, [BloodGlucose], [BloodGlucose]), Never> in
|
|
|
debug(.nightscout, "FetchGlucoseManager heartbeat")
|
|
|
debug(.nightscout, "Start fetching glucose")
|
|
|
self.updateGlucoseSource()
|
|
|
- return Publishers.CombineLatest3(
|
|
|
+ return Publishers.CombineLatest4(
|
|
|
Just(date),
|
|
|
Just(self.glucoseStorage.syncDate()),
|
|
|
- self.glucoseSource.fetch()
|
|
|
+ self.glucoseSource.fetch(),
|
|
|
+ self.healthKitManager.fetch()
|
|
|
)
|
|
|
.eraseToAnyPublisher()
|
|
|
}
|
|
|
.sink { date, syncDate, glucose, glucoseFromHealth in
|
|
|
- let allGlucose = glucose + glucoseFromHealth
|
|
|
- guard allGlucose.isNotEmpty else { return }
|
|
|
// Because of Spike dosn't respect a date query
|
|
|
- let filteredByDate = allGlucose.filter { $0.dateString > syncDate }
|
|
|
+ let filteredByDate = (glucose + glucoseFromHealth).filter { $0.dateString > syncDate }
|
|
|
let filtered = self.glucoseStorage.filterTooFrequentGlucose(filteredByDate, at: syncDate)
|
|
|
-
|
|
|
- guard filtered.isNotEmpty else { return }
|
|
|
- debug(.nightscout, "New glucose found")
|
|
|
-
|
|
|
- self.glucoseStorage.storeGlucose(filtered)
|
|
|
- self.apsManager.heartbeat(date: date, force: false)
|
|
|
- self.nightscoutManager.uploadGlucose()
|
|
|
- let glucoseForHealth = filteredByDate.filter { !glucoseFromHealth.contains($0) }
|
|
|
-
|
|
|
- guard glucoseForHealth.isNotEmpty else { return }
|
|
|
- self.healthKitManager.save(bloodGlucoses: glucoseForHealth, completion: nil)
|
|
|
+ if filtered.isNotEmpty {
|
|
|
+ debug(.nightscout, "New glucose found")
|
|
|
+ self.glucoseStorage.storeGlucose(filtered)
|
|
|
+ self.apsManager.heartbeat(date: date, force: false)
|
|
|
+ self.nightscoutManager.uploadGlucose()
|
|
|
+ let glucoseForHealth = filteredByDate.filter { !glucoseFromHealth.contains($0) }
|
|
|
+ if glucoseForHealth.isNotEmpty {
|
|
|
+ self.healthKitManager.save(bloodGlucoses: glucoseForHealth, completion: nil)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.store(in: &lifetime)
|
|
|
timer.fire()
|