kopia lustrzana https://github.com/rt-bishop/Look4Sat
Removed interacting use cases for the sake of code simplicity
rodzic
0110de8104
commit
c91c58ac69
|
@ -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 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> {
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -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>()
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
Ładowanie…
Reference in New Issue