From bf873e304e5332628897465119d9836ef0780232 Mon Sep 17 00:00:00 2001 From: Sergey Zorchenko Date: Mon, 12 Sep 2022 13:33:15 +0300 Subject: [PATCH] daily TDD calculation now uses unified flow to benefit from caches --- .../androidaps/utils/stats/TddCalculator.kt | 37 ++----------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt index 02c505525e..009671e58a 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/stats/TddCalculator.kt @@ -41,6 +41,7 @@ class TddCalculator @Inject constructor( fun calculate(days: Long): LongSparseArray { var startTime = MidnightTime.calc(dateUtil.now() - T.days(days).msecs()) val endTime = MidnightTime.calc(dateUtil.now()) + val stepSize = T.hours(24).msecs() val result = LongSparseArray() // Try to load cached values @@ -48,47 +49,17 @@ class TddCalculator @Inject constructor( val tdd = repository.getCalculatedTotalDailyDose(startTime).blockingGet() if (tdd is ValueWrapper.Existing) result.put(startTime, tdd.value) else break - startTime += T.hours(24).msecs() + startTime += stepSize } if (endTime > startTime) { - repository.getBolusesDataFromTimeToTime(startTime, endTime, true).blockingGet() - .filter { it.type != Bolus.Type.PRIMING } - .forEach { t -> - val midnight = MidnightTime.calc(t.timestamp) - val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.bolusAmount += t.amount - result.put(midnight, tdd) - } - repository.getCarbsDataFromTimeToTimeExpanded(startTime, endTime, true).blockingGet().forEach { t -> - val midnight = MidnightTime.calc(t.timestamp) - val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - tdd.carbs += t.amount - result.put(midnight, tdd) - } - - val calculationStep = T.mins(5).msecs() - val tempBasals = iobCobCalculator.getTempBasalIncludingConvertedExtendedForRange(startTime, endTime, calculationStep) - for (t in startTime until endTime step calculationStep) { - val midnight = MidnightTime.calc(t) - val tdd = result[midnight] ?: TotalDailyDose(timestamp = midnight) - val tbr = tempBasals[t] - val profile = profileFunction.getProfile(t) ?: continue - val absoluteRate = tbr?.convertedToAbsolute(t, profile) ?: profile.getBasal(t) - tdd.basalAmount += absoluteRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble() - - if (!activePlugin.activePump.isFakingTempsByExtendedBoluses) { - // they are not included in TBRs - val eb = iobCobCalculator.getExtendedBolus(t) - val absoluteEbRate = eb?.rate ?: 0.0 - tdd.bolusAmount += absoluteEbRate / T.mins(60).msecs().toDouble() * calculationStep.toDouble() - } + for (midnight in startTime until endTime step stepSize) { + val tdd = calculate(midnight, midnight + stepSize) result.put(midnight, tdd) } } for (i in 0 until result.size()) { val tdd = result.valueAt(i) - tdd.totalAmount = tdd.bolusAmount + tdd.basalAmount if (tdd.interfaceIDs.pumpType != InterfaceIDs.PumpType.CACHE) { tdd.interfaceIDs.pumpType = InterfaceIDs.PumpType.CACHE aapsLogger.debug(LTag.CORE, "Storing TDD $tdd")