Removed interacting use cases for the sake of code simplicity

pull/65/head
Arty Bishop 2021-05-08 15:24:15 +01:00
rodzic 0110de8104
commit c91c58ac69
12 zmienionych plików z 28 dodań i 159 usunięć

Wyświetl plik

@ -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)
}
}

Wyświetl plik

@ -25,13 +25,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.*
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.model.SatItem
import com.rtbishop.look4sat.framework.PreferencesProvider
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 kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
@ -42,16 +39,13 @@ import javax.inject.Inject
class EntriesViewModel @Inject constructor(
private val preferenceSource: PreferencesProvider,
private val resolver: ContentResolver,
private val getSatItems: GetSatItems,
private val updateEntriesFromFile: UpdateEntriesFromFile,
private val updateEntriesFromWeb: UpdateEntriesFromWeb,
private val updateEntriesSelection: UpdateEntriesSelection,
private val satelliteRepo: SatelliteRepo,
) : ViewModel(), EntriesAdapter.EntriesClickListener, SearchView.OnQueryTextListener {
private val transModes = MutableLiveData(preferenceSource.loadModesSelection())
private val currentQuery = MutableLiveData(String())
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 ->
itemsWithModes.map { items -> Result.Success(filterByQuery(items, query)) }
@ -66,7 +60,9 @@ class EntriesViewModel @Inject constructor(
viewModelScope.launch {
_satData.value = Result.InProgress
runCatching {
resolver.openInputStream(uri)?.use { stream -> updateEntriesFromFile(stream) }
resolver.openInputStream(uri)?.use { stream ->
satelliteRepo.updateEntriesFromFile(stream)
}
}.onFailure { _satData.value = Result.Error(it) }
}
}
@ -75,8 +71,8 @@ class EntriesViewModel @Inject constructor(
viewModelScope.launch {
_satData.value = Result.InProgress
runCatching {
if (sources == null) updateEntriesFromWeb()
else updateEntriesFromWeb(sources)
if (sources == null) satelliteRepo.updateEntriesFromWeb()
else satelliteRepo.updateEntriesFromWeb(sources)
}.onFailure { _satData.value = Result.Error(it) }
}
}
@ -129,7 +125,7 @@ class EntriesViewModel @Inject constructor(
}
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> {

Wyświetl plik

@ -19,12 +19,12 @@ package com.rtbishop.look4sat.presentation.mapScreen
import androidx.lifecycle.*
import com.rtbishop.look4sat.data.PreferenceSource
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.di.DefaultDispatcher
import com.rtbishop.look4sat.domain.predict4kotlin.Position
import com.rtbishop.look4sat.domain.predict4kotlin.Satellite
import com.rtbishop.look4sat.domain.predict4kotlin.StationPosition
import com.rtbishop.look4sat.framework.model.SatData
import com.rtbishop.look4sat.interactors.GetSelectedSatellites
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.*
import java.util.*
@ -36,7 +36,7 @@ import kotlin.math.sqrt
@HiltViewModel
class MapViewModel @Inject constructor(
private val getSelectedSatellites: GetSelectedSatellites,
private val satelliteRepo: SatelliteRepo,
private val preferenceSource: PreferenceSource,
@DefaultDispatcher private val defaultDispatcher: CoroutineDispatcher
) : ViewModel() {
@ -66,7 +66,7 @@ class MapViewModel @Inject constructor(
init {
viewModelScope.launch {
getSelectedSatellites().also { selectedSatellites ->
satelliteRepo.getSelectedSatellites().also { selectedSatellites ->
if (selectedSatellites.isNotEmpty()) {
allSatList = selectedSatellites
selectSatellite(selectedSatellites.first())

Wyświetl plik

@ -21,11 +21,11 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.rtbishop.look4sat.framework.model.Result
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.framework.PreferencesProvider
import com.rtbishop.look4sat.framework.model.Result
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collect
@ -33,7 +33,7 @@ import javax.inject.Inject
@HiltViewModel
class PassesViewModel @Inject constructor(
private val getSelectedSatellites: GetSelectedSatellites,
private val satelliteRepo: SatelliteRepo,
private val passesRepo: PassesRepo,
private val preferenceSource: PreferencesProvider
) : ViewModel() {
@ -45,7 +45,7 @@ class PassesViewModel @Inject constructor(
init {
viewModelScope.launch {
_passes.postValue(Result.InProgress)
passesRepo.triggerCalculation(getSelectedSatellites())
passesRepo.triggerCalculation(satelliteRepo.getSelectedSatellites())
}
viewModelScope.launch {
passesRepo.passes.collect { passes ->
@ -59,7 +59,7 @@ class PassesViewModel @Inject constructor(
viewModelScope.launch {
_passes.postValue(Result.InProgress)
passesProcessing?.cancelAndJoin()
passesRepo.forceCalculation(getSelectedSatellites())
passesRepo.forceCalculation(satelliteRepo.getSelectedSatellites())
}
}

Wyświetl plik

@ -18,13 +18,13 @@
package com.rtbishop.look4sat.presentation.polarScreen
import androidx.lifecycle.*
import com.rtbishop.look4sat.data.PassesRepo
import com.rtbishop.look4sat.data.PreferenceSource
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.di.IoDispatcher
import com.rtbishop.look4sat.domain.model.SatTrans
import com.rtbishop.look4sat.domain.predict4kotlin.SatPass
import com.rtbishop.look4sat.interactors.GetSatTransmitters
import com.rtbishop.look4sat.framework.OrientationProvider
import com.rtbishop.look4sat.data.PassesRepo
import com.rtbishop.look4sat.utility.round
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.*
@ -39,7 +39,7 @@ class PolarViewModel @Inject constructor(
private val orientationProvider: OrientationProvider,
private val preferenceSource: PreferenceSource,
private val passesRepo: PassesRepo,
private val getSatTransmitters: GetSatTransmitters,
private val satelliteRepo: SatelliteRepo,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
) : ViewModel(), OrientationProvider.OrientationListener {
@ -97,7 +97,7 @@ class PolarViewModel @Inject constructor(
private fun processTransmitters(satPass: SatPass) {
viewModelScope.launch {
getSatTransmitters(satPass.catNum).collect { transList ->
satelliteRepo.getSatTransmitters(satPass.catNum).collect { transList ->
while (isActive) {
val timeNow = Date()
val copiedList = transList.map { it.copy() }

Wyświetl plik

@ -17,6 +17,12 @@ class SatelliteRepo(
private val remoteSource: RemoteDataSource,
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>> {
return localSource.getSatItems()
@ -34,7 +40,7 @@ class SatelliteRepo(
localSource.updateEntries(importSatEntries(stream))
}
suspend fun updateEntriesFromWeb(sources: List<String>) {
suspend fun updateEntriesFromWeb(sources: List<String> = defaultSources) {
coroutineScope {
launch(ioDispatcher) {
val streams = mutableListOf<InputStream>()

Wyświetl plik

@ -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()
}
}

Wyświetl plik

@ -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)
}
}

Wyświetl plik

@ -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()
}
}

Wyświetl plik

@ -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)
}
}

Wyświetl plik

@ -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)
}
}

Wyświetl plik

@ -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)
}
}