diff --git a/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt b/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt deleted file mode 100644 index 4bf0cd31..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/di/InteractorsModule.kt +++ /dev/null @@ -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 . - */ -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) - } -} diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt index 84b9f2aa..f8ef64ef 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesViewModel.kt @@ -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, isSelected: Boolean) { - viewModelScope.launch { updateEntriesSelection(catNums, isSelected) } + viewModelScope.launch { satelliteRepo.updateEntriesSelection(catNums, isSelected) } } private fun filterByModes(items: List, modes: List): List { diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt index b3da0947..6f72a5b7 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt @@ -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()) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt index 6135a603..b1dc7196 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/passesScreen/PassesViewModel.kt @@ -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()) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt index ac3e6700..7fd10de4 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/polarScreen/PolarViewModel.kt @@ -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() } diff --git a/core/src/main/java/com/rtbishop/look4sat/data/SatelliteRepo.kt b/core/src/main/java/com/rtbishop/look4sat/data/SatelliteRepo.kt index bfa95dd0..c7ef6dde 100644 --- a/core/src/main/java/com/rtbishop/look4sat/data/SatelliteRepo.kt +++ b/core/src/main/java/com/rtbishop/look4sat/data/SatelliteRepo.kt @@ -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> { return localSource.getSatItems() @@ -34,7 +40,7 @@ class SatelliteRepo( localSource.updateEntries(importSatEntries(stream)) } - suspend fun updateEntriesFromWeb(sources: List) { + suspend fun updateEntriesFromWeb(sources: List = defaultSources) { coroutineScope { launch(ioDispatcher) { val streams = mutableListOf() diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatItems.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatItems.kt deleted file mode 100644 index 2a38fb70..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatItems.kt +++ /dev/null @@ -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> { - return satelliteRepo.getSatItems() - } -} diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatTransmitters.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatTransmitters.kt deleted file mode 100644 index 79115ea0..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSatTransmitters.kt +++ /dev/null @@ -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> { - return satelliteRepo.getSatTransmitters(catNum) - } -} diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSelectedSatellites.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/GetSelectedSatellites.kt deleted file mode 100644 index fb4966b1..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/GetSelectedSatellites.kt +++ /dev/null @@ -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 { - return satelliteRepo.getSelectedSatellites() - } -} diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromFile.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromFile.kt deleted file mode 100644 index 47f8413b..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromFile.kt +++ /dev/null @@ -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) - } -} diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromWeb.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromWeb.kt deleted file mode 100644 index 5f94ef30..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesFromWeb.kt +++ /dev/null @@ -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 = defaultSources) { - satelliteRepo.updateEntriesFromWeb(sources) - } -} diff --git a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesSelection.kt b/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesSelection.kt deleted file mode 100644 index 64266dcf..00000000 --- a/core/src/main/java/com/rtbishop/look4sat/interactors/UpdateEntriesSelection.kt +++ /dev/null @@ -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, isSelected: Boolean) { - satelliteRepo.updateEntriesSelection(catNums, isSelected) - } -}