Swapped RetrofitRemoteSource.kt for a simplified one

pull/87/head
Arty Bishop 2021-10-22 10:35:05 +01:00
rodzic 13f1cc6455
commit c8f7a29812
10 zmienionych plików z 58 dodań i 36 usunięć

Wyświetl plik

@ -51,7 +51,7 @@ android {
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
kotlinOptions { kotlinOptions {
jvmTarget = "$jvm_version" jvmTarget = JavaVersion.VERSION_11.toString()
} }
} }
@ -71,6 +71,7 @@ dependencies {
implementation "com.google.dagger:hilt-android:$hilt_version" implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version" kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"

Wyświetl plik

@ -0,0 +1,34 @@
package com.rtbishop.look4sat.framework.remote
import com.rtbishop.look4sat.data.RemoteDataSource
import com.rtbishop.look4sat.domain.model.Transmitter
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import java.io.InputStream
import java.net.URL
class DefaultRemoteSource(private val dispatcher: CoroutineDispatcher) : RemoteDataSource {
@Suppress("BlockingMethodInNonBlockingContext")
override suspend fun fetchFileStream(url: String): InputStream? = withContext(dispatcher) {
return@withContext URL(url).openStream()
}
override suspend fun fetchTransmitters(url: String): List<Transmitter> {
val stream = URL(url).openStream()
return emptyList()
}
private suspend fun download(url: String): InputStream? = withContext(dispatcher) {
return@withContext try {
URL(url).openStream().bufferedReader().useLines { lines ->
lines.forEachIndexed { index, line ->
val items = line.split(",")
}
}
null
} catch (e: Exception) {
return@withContext null
}
}
}

Wyświetl plik

@ -22,13 +22,13 @@ import com.rtbishop.look4sat.domain.model.Transmitter
import com.rtbishop.look4sat.framework.toDomain import com.rtbishop.look4sat.framework.toDomain
import java.io.InputStream import java.io.InputStream
class RemoteSource(private val satelliteApi: SatelliteApi) : RemoteDataSource { class RetrofitRemoteSource(private val satelliteApi: SatelliteApi) : RemoteDataSource {
override suspend fun fetchFileStream(url: String): InputStream? { override suspend fun fetchFileStream(url: String): InputStream? {
return satelliteApi.fetchFileStream(url).body()?.byteStream() return satelliteApi.fetchFileStream(url).body()?.byteStream()
} }
override suspend fun fetchTransmitters(): List<Transmitter> { override suspend fun fetchTransmitters(url: String): List<Transmitter> {
return satelliteApi.fetchTransmitters().toDomain() return satelliteApi.fetchTransmitters(url).toDomain()
} }
} }

Wyświetl plik

@ -30,6 +30,6 @@ interface SatelliteApi {
@GET @GET
suspend fun fetchFileStream(@Url url: String): Response<ResponseBody> suspend fun fetchFileStream(@Url url: String): Response<ResponseBody>
@GET("https://db.satnogs.org/api/transmitters/") @GET
suspend fun fetchTransmitters(): List<Transmitter> suspend fun fetchTransmitters(@Url url: String): List<Transmitter>
} }

Wyświetl plik

@ -19,54 +19,39 @@ package com.rtbishop.look4sat.injection
import android.content.Context import android.content.Context
import androidx.room.Room import androidx.room.Room
import com.rtbishop.look4sat.data.LocalDataSource
import com.rtbishop.look4sat.data.RemoteDataSource
import com.rtbishop.look4sat.data.DefaultRepository import com.rtbishop.look4sat.data.DefaultRepository
import com.rtbishop.look4sat.framework.remote.SatelliteApi
import com.rtbishop.look4sat.domain.DataRepository import com.rtbishop.look4sat.domain.DataRepository
import com.rtbishop.look4sat.domain.DataReporter import com.rtbishop.look4sat.domain.DataReporter
import com.rtbishop.look4sat.domain.predict.Predictor import com.rtbishop.look4sat.domain.predict.Predictor
import com.rtbishop.look4sat.framework.remote.RemoteSource
import com.rtbishop.look4sat.framework.local.* import com.rtbishop.look4sat.framework.local.*
import com.rtbishop.look4sat.framework.remote.DefaultRemoteSource
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import javax.inject.Singleton import javax.inject.Singleton
@Module @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
object CoreModule { object CoreModule {
@Provides
@Singleton
fun provideLocalDataSource(@ApplicationContext context: Context): LocalDataSource {
val database = Room.databaseBuilder(context, SatelliteDb::class.java, "SatelliteDb")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4).build()
return LocalSource(database.entriesDao(), database.sourcesDao(), database.transmittersDao())
}
@Provides
@Singleton
fun provideRemoteDataSource(): RemoteDataSource {
val satelliteApi = Retrofit.Builder().baseUrl("https://localhost")
.addConverterFactory(MoshiConverterFactory.create()).build()
.create(SatelliteApi::class.java)
return RemoteSource(satelliteApi)
}
@Provides @Provides
@Singleton @Singleton
fun provideSatelliteRepo( fun provideSatelliteRepo(
localSource: LocalDataSource, @ApplicationContext context: Context,
remoteSource: RemoteDataSource,
@IoDispatcher dispatcher: CoroutineDispatcher @IoDispatcher dispatcher: CoroutineDispatcher
): DataRepository { ): DataRepository {
return DefaultRepository(localSource, remoteSource, dispatcher) val db = Room.databaseBuilder(context, SatelliteDb::class.java, "SatelliteDb")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4).build()
val roomLocalSource = LocalSource(db.entriesDao(), db.sourcesDao(), db.transmittersDao())
// val satelliteApi = Retrofit.Builder().baseUrl("https://localhost")
// .addConverterFactory(MoshiConverterFactory.create()).build()
// .create(SatelliteApi::class.java)
// val retrofitRemoteSource = RetrofitRemoteSource(satelliteApi)
val defaultRemoteSource = DefaultRemoteSource(dispatcher)
return DefaultRepository(roomLocalSource, defaultRemoteSource, dispatcher)
} }
@Provides @Provides

Wyświetl plik

@ -11,13 +11,13 @@ buildscript {
preference_version = '1.1.1' preference_version = '1.1.1'
room_version = '2.3.0' room_version = '2.3.0'
hilt_version = '2.39.1' hilt_version = '2.39.1'
okhttp_version = '4.9.0'
retrofit_version = '2.9.0' retrofit_version = '2.9.0'
osmdroid_version = '6.1.11' osmdroid_version = '6.1.11'
timber_version = '5.0.1' timber_version = '5.0.1'
junit_version = '4.13.2' junit_version = '4.13.2'
mockito_version = '4.0.0' mockito_version = '4.0.0'
leak_canary_version = '2.7' leak_canary_version = '2.7'
jvm_version = '11'
} }
repositories { repositories {
google() google()

Wyświetl plik

@ -7,7 +7,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
targetCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11
kotlinOptions { kotlinOptions {
jvmTarget = "$jvm_version" jvmTarget = JavaVersion.VERSION_11.toString()
} }
} }

Wyświetl plik

@ -40,6 +40,7 @@ class DefaultRepository(
"https://www.prismnet.com/~mmccants/tles/classfd.zip", "https://www.prismnet.com/~mmccants/tles/classfd.zip",
"https://www.prismnet.com/~mmccants/tles/inttles.zip" "https://www.prismnet.com/~mmccants/tles/inttles.zip"
) )
override val transmittersSource = "https://db.satnogs.org/api/transmitters/"
override fun getSatelliteItems() = localSource.getSatelliteItems() override fun getSatelliteItems() = localSource.getSatelliteItems()
@ -78,7 +79,7 @@ class DefaultRepository(
localSource.updateEntries(entries) localSource.updateEntries(entries)
} }
launch(repoDispatcher) { launch(repoDispatcher) {
val transmitters = remoteSource.fetchTransmitters().filter { it.isAlive } val transmitters = remoteSource.fetchTransmitters(transmittersSource)
localSource.updateTransmitters(transmitters) localSource.updateTransmitters(transmitters)
} }
} }

Wyświetl plik

@ -24,5 +24,5 @@ interface RemoteDataSource {
suspend fun fetchFileStream(url: String): InputStream? suspend fun fetchFileStream(url: String): InputStream?
suspend fun fetchTransmitters(): List<Transmitter> suspend fun fetchTransmitters(url: String): List<Transmitter>
} }

Wyświetl plik

@ -27,6 +27,7 @@ interface DataRepository {
val defaultSelection: List<Int> val defaultSelection: List<Int>
val defaultSources: List<String> val defaultSources: List<String>
val transmittersSource: String
fun getSatelliteItems(): Flow<List<SatItem>> fun getSatelliteItems(): Flow<List<SatItem>>