Removed interacting use cases for the sake of code simplicity

This commit is contained in:
Arty Bishop committed 2021-05-16 19:13:10 +01:00
1 parent 0110de8104
commit c91c58ac69
12 files changed
+28 -159

No files matched your search

@@ -1,60 +0,0 @@
/*
* Look4Sat. Amateur radio satellite tracker and pass predictor.
* Copyright (C) 2019-2021 Arty Bishop (bishop.arty@gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.rtbishop.look4sat.di
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.interactors.*
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object InteractorsModule {
@Provides
fun provideGetSatItemsUseCase(satelliteRepo: SatelliteRepo): GetSatItems {
return GetSatItems(satelliteRepo)
}
@Provides
fun provideGetSelectedSatellitesUseCase(satelliteRepo: SatelliteRepo): GetSelectedSatellites {
return GetSelectedSatellites(satelliteRepo)
}
@Provides
fun provideGetSatTransmittersUseCase(satelliteRepo: SatelliteRepo): GetSatTransmitters {
return GetSatTransmitters(satelliteRepo)
}
@Provides
fun provideUpdateEntriesFromFileUseCase(satelliteRepo: SatelliteRepo): UpdateEntriesFromFile {
return UpdateEntriesFromFile(satelliteRepo)
}
@Provides
fun provideUpdateEntriesFromWebUseCase(satelliteRepo: SatelliteRepo): UpdateEntriesFromWeb {
return UpdateEntriesFromWeb(satelliteRepo)
}
@Provides
fun provideUpdateEntriesSelectionUseCase(satelliteRepo: SatelliteRepo): UpdateEntriesSelection {
return UpdateEntriesSelection(satelliteRepo)
}
}
@@ -25,13 +25,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.* import androidx.lifecycle.*
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.rtbishop.look4sat.R import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.model.SatItem import com.rtbishop.look4sat.domain.model.SatItem
import com.rtbishop.look4sat.framework.PreferencesProvider import com.rtbishop.look4sat.framework.PreferencesProvider
import com.rtbishop.look4sat.framework.model.Result import com.rtbishop.look4sat.framework.model.Result
import com.rtbishop.look4sat.interactors.GetSatItems
import com.rtbishop.look4sat.interactors.UpdateEntriesFromFile
import com.rtbishop.look4sat.interactors.UpdateEntriesFromWeb
import com.rtbishop.look4sat.interactors.UpdateEntriesSelection
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -42,16 +39,13 @@ import javax.inject.Inject
class EntriesViewModel @Inject constructor( class EntriesViewModel @Inject constructor(
private val preferenceSource: PreferencesProvider, private val preferenceSource: PreferencesProvider,
private val resolver: ContentResolver, private val resolver: ContentResolver,
private val getSatItems: GetSatItems, private val satelliteRepo: SatelliteRepo,
private val updateEntriesFromFile: UpdateEntriesFromFile,
private val updateEntriesFromWeb: UpdateEntriesFromWeb,
private val updateEntriesSelection: UpdateEntriesSelection,
) : ViewModel(), EntriesAdapter.EntriesClickListener, SearchView.OnQueryTextListener { ) : ViewModel(), EntriesAdapter.EntriesClickListener, SearchView.OnQueryTextListener {
private val transModes = MutableLiveData(preferenceSource.loadModesSelection()) private val transModes = MutableLiveData(preferenceSource.loadModesSelection())
private val currentQuery = MutableLiveData(String()) private val currentQuery = MutableLiveData(String())
private val itemsWithModes = transModes.switchMap { modes -> private val itemsWithModes = transModes.switchMap { modes ->
liveData { getSatItems().collect { emit(filterByModes(it, modes)) } } liveData { satelliteRepo.getSatItems().collect { emit(filterByModes(it, modes)) } }
} }
private val itemsWithQuery = currentQuery.switchMap { query -> private val itemsWithQuery = currentQuery.switchMap { query ->
itemsWithModes.map { items -> Result.Success(filterByQuery(items, query)) } itemsWithModes.map { items -> Result.Success(filterByQuery(items, query)) }
@@ -66,7 +60,9 @@ class EntriesViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
_satData.value = Result.InProgress _satData.value = Result.InProgress
runCatching { runCatching {
resolver.openInputStream(uri)?.use { stream -> updateEntriesFromFile(stream) } resolver.openInputStream(uri)?.use { stream ->
satelliteRepo.updateEntriesFromFile(stream)
}
}.onFailure { _satData.value = Result.Error(it) } }.onFailure { _satData.value = Result.Error(it) }
} }
} }
@@ -75,8 +71,8 @@ class EntriesViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
_satData.value = Result.InProgress _satData.value = Result.InProgress
runCatching { runCatching {
if (sources == null) updateEntriesFromWeb() if (sources == null) satelliteRepo.updateEntriesFromWeb()
else updateEntriesFromWeb(sources) else satelliteRepo.updateEntriesFromWeb(sources)
}.onFailure { _satData.value = Result.Error(it) } }.onFailure { _satData.value = Result.Error(it) }
} }
} }
@@ -129,7 +125,7 @@ class EntriesViewModel @Inject constructor(
} }
override fun updateSelection(catNums: List<Int>, isSelected: Boolean) { override fun updateSelection(catNums: List<Int>, isSelected: Boolean) {
viewModelScope.launch { updateEntriesSelection(catNums, isSelected) } viewModelScope.launch { satelliteRepo.updateEntriesSelection(catNums, isSelected) }
} }
private fun filterByModes(items: List<SatItem>, modes: List<String>): List<SatItem> { private fun filterByModes(items: List<SatItem>, modes: List<String>): List<SatItem> {
@@ -19,12 +19,12 @@ package com.rtbishop.look4sat.presentation.mapScreen
import androidx.lifecycle.* import androidx.lifecycle.*
import com.rtbishop.look4sat.data.PreferenceSource import com.rtbishop.look4sat.data.PreferenceSource
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.di.DefaultDispatcher import com.rtbishop.look4sat.di.DefaultDispatcher
import com.rtbishop.look4sat.domain.predict4kotlin.Position import com.rtbishop.look4sat.domain.predict4kotlin.Position
import com.rtbishop.look4sat.domain.predict4kotlin.Satellite import com.rtbishop.look4sat.domain.predict4kotlin.Satellite
import com.rtbishop.look4sat.domain.predict4kotlin.StationPosition import com.rtbishop.look4sat.domain.predict4kotlin.StationPosition
import com.rtbishop.look4sat.framework.model.SatData import com.rtbishop.look4sat.framework.model.SatData
import com.rtbishop.look4sat.interactors.GetSelectedSatellites
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.* import kotlinx.coroutines.*
import java.util.* import java.util.*
@@ -36,7 +36,7 @@ import kotlin.math.sqrt
@HiltViewModel @HiltViewModel
class MapViewModel @Inject constructor( class MapViewModel @Inject constructor(
private val getSelectedSatellites: GetSelectedSatellites, private val satelliteRepo: SatelliteRepo,
private val preferenceSource: PreferenceSource, private val preferenceSource: PreferenceSource,
@DefaultDispatcher private val defaultDispatcher: CoroutineDispatcher @DefaultDispatcher private val defaultDispatcher: CoroutineDispatcher
) : ViewModel() { ) : ViewModel() {
@@ -66,7 +66,7 @@ class MapViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
getSelectedSatellites().also { selectedSatellites -> satelliteRepo.getSelectedSatellites().also { selectedSatellites ->
if (selectedSatellites.isNotEmpty()) { if (selectedSatellites.isNotEmpty()) {
allSatList = selectedSatellites allSatList = selectedSatellites
selectSatellite(selectedSatellites.first()) selectSatellite(selectedSatellites.first())
@@ -21,11 +21,11 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.rtbishop.look4sat.framework.model.Result
import com.rtbishop.look4sat.data.PassesRepo import com.rtbishop.look4sat.data.PassesRepo
import com.rtbishop.look4sat.interactors.GetSelectedSatellites import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.predict4kotlin.SatPass import com.rtbishop.look4sat.domain.predict4kotlin.SatPass
import com.rtbishop.look4sat.framework.PreferencesProvider import com.rtbishop.look4sat.framework.PreferencesProvider
import com.rtbishop.look4sat.framework.model.Result
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
@@ -33,7 +33,7 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class PassesViewModel @Inject constructor( class PassesViewModel @Inject constructor(
private val getSelectedSatellites: GetSelectedSatellites, private val satelliteRepo: SatelliteRepo,
private val passesRepo: PassesRepo, private val passesRepo: PassesRepo,
private val preferenceSource: PreferencesProvider private val preferenceSource: PreferencesProvider
) : ViewModel() { ) : ViewModel() {
@@ -45,7 +45,7 @@ class PassesViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
_passes.postValue(Result.InProgress) _passes.postValue(Result.InProgress)
passesRepo.triggerCalculation(getSelectedSatellites()) passesRepo.triggerCalculation(satelliteRepo.getSelectedSatellites())
} }
viewModelScope.launch { viewModelScope.launch {
passesRepo.passes.collect { passes -> passesRepo.passes.collect { passes ->
@@ -59,7 +59,7 @@ class PassesViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
_passes.postValue(Result.InProgress) _passes.postValue(Result.InProgress)
passesProcessing?.cancelAndJoin() passesProcessing?.cancelAndJoin()
passesRepo.forceCalculation(getSelectedSatellites()) passesRepo.forceCalculation(satelliteRepo.getSelectedSatellites())
} }
} }
@@ -18,13 +18,13 @@
package com.rtbishop.look4sat.presentation.polarScreen package com.rtbishop.look4sat.presentation.polarScreen
import androidx.lifecycle.* import androidx.lifecycle.*
import com.rtbishop.look4sat.data.PassesRepo
import com.rtbishop.look4sat.data.PreferenceSource import com.rtbishop.look4sat.data.PreferenceSource
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.di.IoDispatcher import com.rtbishop.look4sat.di.IoDispatcher
import com.rtbishop.look4sat.domain.model.SatTrans import com.rtbishop.look4sat.domain.model.SatTrans
import com.rtbishop.look4sat.domain.predict4kotlin.SatPass import com.rtbishop.look4sat.domain.predict4kotlin.SatPass
import com.rtbishop.look4sat.interactors.GetSatTransmitters
import com.rtbishop.look4sat.framework.OrientationProvider import com.rtbishop.look4sat.framework.OrientationProvider
import com.rtbishop.look4sat.data.PassesRepo
import com.rtbishop.look4sat.utility.round import com.rtbishop.look4sat.utility.round
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.* import kotlinx.coroutines.*
@@ -39,7 +39,7 @@ class PolarViewModel @Inject constructor(
private val orientationProvider: OrientationProvider, private val orientationProvider: OrientationProvider,
private val preferenceSource: PreferenceSource, private val preferenceSource: PreferenceSource,
private val passesRepo: PassesRepo, private val passesRepo: PassesRepo,
private val getSatTransmitters: GetSatTransmitters, private val satelliteRepo: SatelliteRepo,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher @IoDispatcher private val ioDispatcher: CoroutineDispatcher
) : ViewModel(), OrientationProvider.OrientationListener { ) : ViewModel(), OrientationProvider.OrientationListener {
@@ -97,7 +97,7 @@ class PolarViewModel @Inject constructor(
private fun processTransmitters(satPass: SatPass) { private fun processTransmitters(satPass: SatPass) {
viewModelScope.launch { viewModelScope.launch {
getSatTransmitters(satPass.catNum).collect { transList -> satelliteRepo.getSatTransmitters(satPass.catNum).collect { transList ->
while (isActive) { while (isActive) {
val timeNow = Date() val timeNow = Date()
val copiedList = transList.map { it.copy() } val copiedList = transList.map { it.copy() }
@@ -17,6 +17,12 @@ class SatelliteRepo(
private val remoteSource: RemoteDataSource, private val remoteSource: RemoteDataSource,
private val ioDispatcher: CoroutineDispatcher private val ioDispatcher: CoroutineDispatcher
) { ) {
private val defaultSources = listOf(
"https://celestrak.com/NORAD/elements/active.txt",
"https://amsat.org/tle/current/nasabare.txt",
"https://www.prismnet.com/~mmccants/tles/classfd.zip",
"https://www.prismnet.com/~mmccants/tles/inttles.zip"
)
fun getSatItems(): Flow<List<SatItem>> { fun getSatItems(): Flow<List<SatItem>> {
return localSource.getSatItems() return localSource.getSatItems()
@@ -34,7 +40,7 @@ class SatelliteRepo(
localSource.updateEntries(importSatEntries(stream)) localSource.updateEntries(importSatEntries(stream))
} }
suspend fun updateEntriesFromWeb(sources: List<String>) { suspend fun updateEntriesFromWeb(sources: List<String> = defaultSources) {
coroutineScope { coroutineScope {
launch(ioDispatcher) { launch(ioDispatcher) {
val streams = mutableListOf<InputStream>() val streams = mutableListOf<InputStream>()
@@ -1,12 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.model.SatItem
import kotlinx.coroutines.flow.Flow
class GetSatItems(private val satelliteRepo: SatelliteRepo) {
operator fun invoke(): Flow<List<SatItem>> {
return satelliteRepo.getSatItems()
}
}
@@ -1,12 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.model.SatTrans
import kotlinx.coroutines.flow.Flow
class GetSatTransmitters(private val satelliteRepo: SatelliteRepo) {
operator fun invoke(catNum: Int): Flow<List<SatTrans>> {
return satelliteRepo.getSatTransmitters(catNum)
}
}
@@ -1,11 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.predict4kotlin.Satellite
class GetSelectedSatellites(private val satelliteRepo: SatelliteRepo) {
suspend operator fun invoke(): List<Satellite> {
return satelliteRepo.getSelectedSatellites()
}
}
@@ -1,11 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
import java.io.InputStream
class UpdateEntriesFromFile(private val satelliteRepo: SatelliteRepo) {
suspend operator fun invoke(stream: InputStream) {
satelliteRepo.updateEntriesFromFile(stream)
}
}
@@ -1,17 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
class UpdateEntriesFromWeb(private val satelliteRepo: SatelliteRepo) {
private val defaultSources = listOf(
"https://celestrak.com/NORAD/elements/active.txt",
"https://amsat.org/tle/current/nasabare.txt",
"https://www.prismnet.com/~mmccants/tles/classfd.zip",
"https://www.prismnet.com/~mmccants/tles/inttles.zip"
)
suspend operator fun invoke(sources: List<String> = defaultSources) {
satelliteRepo.updateEntriesFromWeb(sources)
}
}
@@ -1,10 +0,0 @@
package com.rtbishop.look4sat.interactors
import com.rtbishop.look4sat.data.SatelliteRepo
class UpdateEntriesSelection(private val satelliteRepo: SatelliteRepo) {
suspend operator fun invoke(catNums: List<Int>, isSelected: Boolean) {
satelliteRepo.updateEntriesSelection(catNums, isSelected)
}
}