Switched to multiple repositories

pull/49/head
Arty Bishop 2020-10-05 23:47:14 +01:00
rodzic 1c7ce3f726
commit 81074941b0
10 zmienionych plików z 116 dodań i 103 usunięć

Wyświetl plik

@ -73,7 +73,6 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"

Wyświetl plik

@ -28,7 +28,9 @@ import com.rtbishop.look4sat.data.Result
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.SatPass
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.repo.Repository
import com.rtbishop.look4sat.repo.EntriesRepo
import com.rtbishop.look4sat.repo.SourcesRepo
import com.rtbishop.look4sat.repo.TransmittersRepo
import com.rtbishop.look4sat.utility.PassPredictor
import com.rtbishop.look4sat.utility.PrefsManager
import kotlinx.coroutines.Dispatchers
@ -39,7 +41,9 @@ import javax.inject.Singleton
@Singleton
class SharedViewModel @ViewModelInject constructor(
private val prefsManager: PrefsManager,
private val repository: Repository,
private val sourcesRepo: SourcesRepo,
private val entriesRepo: EntriesRepo,
private val transmittersRepo: TransmittersRepo,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
@ -53,10 +57,10 @@ class SharedViewModel @ViewModelInject constructor(
}
}
fun getSources() = repository.getSources()
fun getEntries() = repository.getEntries()
fun getSources() = sourcesRepo.getSources()
fun getEntries() = entriesRepo.getEntries()
fun getPasses(): LiveData<Result<MutableList<SatPass>>> = _passes
fun getTransmittersForSat(satId: Int) = repository.getTransmittersForSat(satId)
fun getTransmittersForSat(satId: Int) = transmittersRepo.getTransmittersForSat(satId)
fun triggerCalculation() {
if (shouldTriggerCalculation) {
@ -71,15 +75,15 @@ class SharedViewModel @ViewModelInject constructor(
fun updateEntriesFromFile(uri: Uri) {
viewModelScope.launch {
repository.updateEntriesFromFile(uri)
entriesRepo.updateEntriesFromFile(uri)
}
}
fun updateEntriesFromSources(sources: List<TleSource>) {
viewModelScope.launch {
repository.updateSources(sources)
repository.updateEntriesFromSources(sources)
repository.updateTransmitters()
sourcesRepo.updateSources(sources)
entriesRepo.updateEntriesFromSources(sources)
transmittersRepo.updateTransmitters()
}
}
@ -87,7 +91,7 @@ class SharedViewModel @ViewModelInject constructor(
viewModelScope.launch {
selectedEntries = entries.filter { it.isSelected }
calculatePasses()
repository.updateEntriesSelection(selectedEntries.map { it.catNum })
entriesRepo.updateEntriesSelection(selectedEntries.map { it.catNum })
}
}
@ -111,7 +115,7 @@ class SharedViewModel @ViewModelInject constructor(
TleSource("https://celestrak.com/NORAD/elements/active.txt"),
TleSource("https://amsat.org/tle/current/nasabare.txt")
)
repository.updateSources(defaultTleSources)
sourcesRepo.updateSources(defaultTleSources)
}
}

Wyświetl plik

@ -21,8 +21,7 @@ package com.rtbishop.look4sat.di
import android.content.ContentResolver
import android.content.Context
import com.rtbishop.look4sat.repo.DefaultRepository
import com.rtbishop.look4sat.repo.Repository
import com.rtbishop.look4sat.repo.*
import com.rtbishop.look4sat.repo.local.EntriesDao
import com.rtbishop.look4sat.repo.local.SourcesDao
import com.rtbishop.look4sat.repo.local.TransmittersDao
@ -47,21 +46,26 @@ class RepoModule {
@ActivityScoped
@Provides
fun provideDefaultRepository(
fun provideEntriesRepo(
resolver: ContentResolver,
client: OkHttpClient,
transmittersApi: TransmittersApi,
entriesDao: EntriesDao,
entriesDao: EntriesDao
): EntriesRepo {
return DefaultEntriesRepo(resolver, client, entriesDao)
}
@ActivityScoped
@Provides
fun provideSourcesRepo(sourcesDao: SourcesDao): SourcesRepo {
return DefaultSourcesRepo(sourcesDao)
}
@ActivityScoped
@Provides
fun provideTransmittersRepo(
transmittersDao: TransmittersDao,
sourcesDao: SourcesDao
): Repository {
return DefaultRepository(
resolver,
client,
transmittersApi,
entriesDao,
sourcesDao,
transmittersDao
)
transmittersApi: TransmittersApi
): TransmittersRepo {
return DefaultTransmittersRepo(transmittersDao, transmittersApi)
}
}

Wyświetl plik

@ -1,22 +1,3 @@
/*
* Look4Sat. Amateur radio and weather satellite tracker and passes predictor for Android.
* Copyright (C) 2019, 2020 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 2 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package com.rtbishop.look4sat.repo
import android.content.ContentResolver
@ -24,12 +5,8 @@ import android.net.Uri
import androidx.lifecycle.LiveData
import com.github.amsacode.predict4java.TLE
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.SatTrans
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.repo.local.EntriesDao
import com.rtbishop.look4sat.repo.local.SourcesDao
import com.rtbishop.look4sat.repo.local.TransmittersDao
import com.rtbishop.look4sat.repo.remote.TransmittersApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
@ -37,22 +14,11 @@ import okhttp3.Request
import java.io.InputStream
import javax.inject.Inject
class DefaultRepository @Inject constructor(
class DefaultEntriesRepo @Inject constructor(
private val resolver: ContentResolver,
private val client: OkHttpClient,
private val api: TransmittersApi,
private val entriesDao: EntriesDao,
private val sourcesDao: SourcesDao,
private val transmittersDao: TransmittersDao
) : Repository {
override fun getSources(): LiveData<List<TleSource>> {
return sourcesDao.getSources()
}
override suspend fun updateSources(sources: List<TleSource>) {
sourcesDao.updateSources(sources)
}
private val entriesDao: EntriesDao
) : EntriesRepo {
override fun getEntries(): LiveData<List<SatEntry>> {
return entriesDao.getEntries()
@ -91,12 +57,4 @@ class DefaultRepository @Inject constructor(
override suspend fun updateEntriesSelection(satIds: List<Int>) {
entriesDao.updateEntriesSelection(satIds)
}
override fun getTransmittersForSat(satId: Int): LiveData<List<SatTrans>> {
return transmittersDao.getTransmittersForSat(satId)
}
override suspend fun updateTransmitters() {
transmittersDao.updateTransmitters(api.getTransmitters())
}
}
}

Wyświetl plik

@ -0,0 +1,18 @@
package com.rtbishop.look4sat.repo
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.repo.local.SourcesDao
import javax.inject.Inject
class DefaultSourcesRepo @Inject constructor(private val sourcesDao: SourcesDao) :
SourcesRepo {
override fun getSources(): LiveData<List<TleSource>> {
return sourcesDao.getSources()
}
override suspend fun updateSources(sources: List<TleSource>) {
sourcesDao.updateSources(sources)
}
}

Wyświetl plik

@ -0,0 +1,21 @@
package com.rtbishop.look4sat.repo
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.SatTrans
import com.rtbishop.look4sat.repo.local.TransmittersDao
import com.rtbishop.look4sat.repo.remote.TransmittersApi
import javax.inject.Inject
class DefaultTransmittersRepo @Inject constructor(
private val transmittersDao: TransmittersDao,
private val transmittersApi: TransmittersApi
) : TransmittersRepo {
override fun getTransmittersForSat(satId: Int): LiveData<List<SatTrans>> {
return transmittersDao.getTransmittersForSat(satId)
}
override suspend fun updateTransmitters() {
transmittersDao.updateTransmitters(transmittersApi.getTransmitters())
}
}

Wyświetl plik

@ -0,0 +1,17 @@
package com.rtbishop.look4sat.repo
import android.net.Uri
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
interface EntriesRepo {
fun getEntries(): LiveData<List<SatEntry>>
suspend fun updateEntriesFromFile(fileUri: Uri)
suspend fun updateEntriesFromSources(sources: List<TleSource>)
suspend fun updateEntriesSelection(satIds: List<Int>)
}

Wyświetl plik

@ -1,30 +0,0 @@
package com.rtbishop.look4sat.repo
import android.net.Uri
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.SatTrans
import com.rtbishop.look4sat.data.TleSource
interface Repository {
fun getSources(): LiveData<List<TleSource>>
suspend fun updateSources(sources: List<TleSource>)
////////////////////////////////////////////////////////////////////////////////////////////////
fun getEntries(): LiveData<List<SatEntry>>
suspend fun updateEntriesFromFile(fileUri: Uri)
suspend fun updateEntriesFromSources(sources: List<TleSource>)
suspend fun updateEntriesSelection(satIds: List<Int>)
////////////////////////////////////////////////////////////////////////////////////////////////
suspend fun updateTransmitters()
fun getTransmittersForSat(satId: Int): LiveData<List<SatTrans>>
}

Wyświetl plik

@ -0,0 +1,11 @@
package com.rtbishop.look4sat.repo
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.TleSource
interface SourcesRepo {
fun getSources(): LiveData<List<TleSource>>
suspend fun updateSources(sources: List<TleSource>)
}

Wyświetl plik

@ -0,0 +1,11 @@
package com.rtbishop.look4sat.repo
import androidx.lifecycle.LiveData
import com.rtbishop.look4sat.data.SatTrans
interface TransmittersRepo {
suspend fun updateTransmitters()
fun getTransmittersForSat(satId: Int): LiveData<List<SatTrans>>
}