From 41f7bdca9970bcd7b04a411ef340a6dab36eba04 Mon Sep 17 00:00:00 2001 From: atsunatsu Date: Sat, 8 Aug 2026 20:30:08 +0800 Subject: [PATCH] fix: recalculate passes when station position changes Use combine(selectedIds, stationPosition) in SatelliteRepo.initRepository so that passes are recalculated on either satellite selection change or station position change. StateFlow already emits distinct values. --- .../core/data/repository/SatelliteRepo.kt | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SatelliteRepo.kt b/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SatelliteRepo.kt index def16e02..464f870b 100644 --- a/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SatelliteRepo.kt +++ b/core/data/src/main/java/com/rtbishop/look4sat/core/data/repository/SatelliteRepo.kt @@ -34,6 +34,7 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.update import kotlinx.coroutines.withContext import java.util.TimeZone @@ -64,19 +65,23 @@ class SatelliteRepo( override suspend fun getRadiosWithId(id: Int) = localStorage.getRadiosWithId(id) override suspend fun initRepository() = withContext(dispatcher) { - settingsRepo.selectedIds.collect { selectedIds -> - _satellites.update { localStorage.getEntriesWithIds(selectedIds) } - val settings = settingsRepo.passesSettings.value - calculatePasses( - time = System.currentTimeMillis(), - hoursAhead = settings.hoursAhead, - minElevation = settings.minElevation, - aosStartMinute = settings.aosStartMinute, - aosEndMinute = settings.aosEndMinute, - invertAosTimeWindow = settings.invertAosTimeWindow, - modes = settingsRepo.selectedSatModes.value - ) - } + combine( + settingsRepo.selectedIds, + settingsRepo.stationPosition + ) { selectedIds, _ -> selectedIds } + .collect { selectedIds -> + _satellites.update { localStorage.getEntriesWithIds(selectedIds) } + val settings = settingsRepo.passesSettings.value + calculatePasses( + time = System.currentTimeMillis(), + hoursAhead = settings.hoursAhead, + minElevation = settings.minElevation, + aosStartMinute = settings.aosStartMinute, + aosEndMinute = settings.aosEndMinute, + invertAosTimeWindow = settings.invertAosTimeWindow, + modes = settingsRepo.selectedSatModes.value + ) + } } override suspend fun getPosition(sat: OrbitalObject, pos: GeoPos, time: Long): OrbitalPos {