diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesViewModel.kt index d87a2fdb..c8ba1e61 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passes/PassesViewModel.kt @@ -89,14 +89,14 @@ class PassesViewModel( processing?.cancelAndJoin() settingsRepo.setPassesSettings(PassesSettings(hoursAhead, minElevation, modes)) _uiState.value = _uiState.value.copy(hours = hoursAhead, elevation = minElevation, modes = modes) - satelliteRepo.calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation) + satelliteRepo.calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation, modes) } private fun refreshPasses() = viewModelScope.launch { _uiState.value = _uiState.value.copy(isRefreshing = true) processing?.cancelAndJoin() - val (hoursAhead, minElevation) = settingsRepo.passesSettings.value - satelliteRepo.calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation) + val (hoursAhead, minElevation, modes) = settingsRepo.passesSettings.value + satelliteRepo.calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation, modes) } private fun setPassInfo(passes: List, timeNow: Long) { diff --git a/data/src/main/java/com/rtbishop/look4sat/data/database/dao/StorageDao.kt b/data/src/main/java/com/rtbishop/look4sat/data/database/dao/StorageDao.kt index 4475b4db..1e1e7708 100644 --- a/data/src/main/java/com/rtbishop/look4sat/data/database/dao/StorageDao.kt +++ b/data/src/main/java/com/rtbishop/look4sat/data/database/dao/StorageDao.kt @@ -46,6 +46,9 @@ interface StorageDao { @Query("DELETE FROM entries") suspend fun deleteEntries() + @Query("SELECT catnum FROM radios WHERE mode IN (:modes)") + suspend fun getIdsWithModes(modes: List): List + @Query("SELECT COUNT(*) FROM radios") suspend fun getRadiosTotal(): Int diff --git a/data/src/main/java/com/rtbishop/look4sat/data/repository/SatelliteRepo.kt b/data/src/main/java/com/rtbishop/look4sat/data/repository/SatelliteRepo.kt index b5d5c28e..9d5c0d45 100644 --- a/data/src/main/java/com/rtbishop/look4sat/data/repository/SatelliteRepo.kt +++ b/data/src/main/java/com/rtbishop/look4sat/data/repository/SatelliteRepo.kt @@ -50,8 +50,8 @@ class SatelliteRepo( override suspend fun initRepository() = withContext(dispatcher) { settingsRepo.selectedIds.collect { selectedIds -> _satellites.update { localStorage.getEntriesWithIds(selectedIds) } - val (hoursAhead, minElevation) = settingsRepo.passesSettings.value - calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation) + val (hoursAhead, minElevation, modes) = settingsRepo.passesSettings.value + calculatePasses(System.currentTimeMillis(), hoursAhead, minElevation, modes) } } @@ -99,15 +99,17 @@ class SatelliteRepo( } } - override suspend fun calculatePasses(time: Long, hoursAhead: Int, minElevation: Double) { + override suspend fun calculatePasses(time: Long, hoursAhead: Int, minElevation: Double, modes: List) { if (_satellites.value.isNotEmpty()) { withContext(dispatcher) { - val allPasses = mutableListOf() - val stationPos = settingsRepo.stationPosition.value + val newPasses = mutableListOf() + val idsWithModes = localStorage.getIdsWithModes(modes) _satellites.value.forEach { satellite -> - allPasses.addAll(satellite.getPasses(stationPos, time, hoursAhead)) + if (idsWithModes.isEmpty() || satellite.data.catnum in idsWithModes) { + newPasses.addAll(satellite.getPasses(settingsRepo.stationPosition.value, time, hoursAhead)) + } } - _passes.update { allPasses.filter(time, hoursAhead, minElevation) } + _passes.update { newPasses.filter(time, hoursAhead, minElevation) } } } else { _passes.update { emptyList() } diff --git a/data/src/main/java/com/rtbishop/look4sat/data/source/LocalSource.kt b/data/src/main/java/com/rtbishop/look4sat/data/source/LocalSource.kt index adab3a16..6d72612e 100644 --- a/data/src/main/java/com/rtbishop/look4sat/data/source/LocalSource.kt +++ b/data/src/main/java/com/rtbishop/look4sat/data/source/LocalSource.kt @@ -53,6 +53,8 @@ class LocalSource(private val storageDao: StorageDao) : ILocalSource { override suspend fun deleteEntries() = storageDao.deleteEntries() + override suspend fun getIdsWithModes(modes: List) = storageDao.getIdsWithModes(modes) + private fun DomainEntry.toFramework() = FrameworkEntry(this.data, this.comment) private fun FrameworkItem.toDomain() = DomainItem(this.catnum, this.name, false) diff --git a/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISatelliteRepo.kt b/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISatelliteRepo.kt index a8047716..f4327deb 100644 --- a/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISatelliteRepo.kt +++ b/domain/src/main/java/com/rtbishop/look4sat/domain/repository/ISatelliteRepo.kt @@ -16,5 +16,5 @@ interface ISatelliteRepo { suspend fun getTrack(sat: Satellite, pos: GeoPos, start: Long, end: Long): List suspend fun getRadios(sat: Satellite, pos: GeoPos, radios: List, time: Long): List suspend fun processPasses(passList: List, time: Long): List - suspend fun calculatePasses(time: Long, hoursAhead: Int = 8, minElevation: Double = 16.0) + suspend fun calculatePasses(time: Long, hoursAhead: Int, minElevation: Double, modes: List) } diff --git a/domain/src/main/java/com/rtbishop/look4sat/domain/source/ILocalSource.kt b/domain/src/main/java/com/rtbishop/look4sat/domain/source/ILocalSource.kt index 610b229c..185f2f3a 100644 --- a/domain/src/main/java/com/rtbishop/look4sat/domain/source/ILocalSource.kt +++ b/domain/src/main/java/com/rtbishop/look4sat/domain/source/ILocalSource.kt @@ -28,6 +28,7 @@ interface ILocalSource { suspend fun getEntriesWithIds(ids: List): List suspend fun insertEntries(entries: List) suspend fun deleteEntries() + suspend fun getIdsWithModes(modes: List): List suspend fun getRadiosTotal(): Int suspend fun getRadiosWithId(id: Int): List suspend fun insertRadios(radios: List)