From 22616d0d2f0e18f95f4842e3227d9ec9b8d9b623 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Tue, 29 Oct 2019 21:58:04 +0000 Subject: [PATCH] Added Injector (Service Locator) object. Created minimal RemoteDataSource implementation. --- .../java/com/rtbishop/lookingsat/Injector.kt | 21 ++++++++++++++++ .../lookingsat/api/RemoteDataSource.kt | 25 +++++++++++++++++++ .../rtbishop/lookingsat/api/TransmitterApi.kt | 22 ---------------- .../lookingsat/api/TransmitterService.kt | 14 ----------- .../lookingsat/api/TransmittersApi.kt | 10 ++++++++ .../rtbishop/lookingsat/repo/Transmitter.kt | 1 + 6 files changed, 57 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/lookingsat/Injector.kt create mode 100644 app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt delete mode 100644 app/src/main/java/com/rtbishop/lookingsat/api/TransmitterApi.kt delete mode 100644 app/src/main/java/com/rtbishop/lookingsat/api/TransmitterService.kt create mode 100644 app/src/main/java/com/rtbishop/lookingsat/api/TransmittersApi.kt diff --git a/app/src/main/java/com/rtbishop/lookingsat/Injector.kt b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt new file mode 100644 index 00000000..550bae44 --- /dev/null +++ b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt @@ -0,0 +1,21 @@ +package com.rtbishop.lookingsat + +import com.rtbishop.lookingsat.api.RemoteDataSource +import com.rtbishop.lookingsat.api.TransmittersApi +import okhttp3.OkHttpClient +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object Injector { + private fun provideRemoteDataSource(): RemoteDataSource { + val api = Retrofit.Builder() + .baseUrl("https://db.satnogs.org/api/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(TransmittersApi::class.java) + + val client = OkHttpClient() + + return RemoteDataSource(api, client) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt b/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt new file mode 100644 index 00000000..1352584b --- /dev/null +++ b/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt @@ -0,0 +1,25 @@ +package com.rtbishop.lookingsat.api + +import com.rtbishop.lookingsat.repo.Transmitter +import okhttp3.OkHttpClient +import okhttp3.Request +import java.io.InputStream +import java.io.SequenceInputStream + +private const val TLE_AMATEUR = "https://celestrak.com/NORAD/elements/amateur.txt" +private const val TLE_WEATHER = "https://celestrak.com/NORAD/elements/weather.txt" + +class RemoteDataSource(private val api: TransmittersApi, private val client: OkHttpClient) { + private val requestAmateur = Request.Builder().url(TLE_AMATEUR).build() + private val requestWeather = Request.Builder().url(TLE_WEATHER).build() + + suspend fun fetchTleFiles(): InputStream { + val streamAmateur = client.newCall(requestAmateur).execute().body()?.byteStream() + val streamWeather = client.newCall(requestWeather).execute().body()?.byteStream() + return SequenceInputStream(streamAmateur, streamWeather) + } + + suspend fun fetchTransmitters(): List { + return api.fetchTransmittersList() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterApi.kt b/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterApi.kt deleted file mode 100644 index b1b0027c..00000000 --- a/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterApi.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.rtbishop.lookingsat.api - -import com.rtbishop.lookingsat.repo.Transmitter -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.http.GET - -interface TransmitterApi { - - @GET("transmitters/?alive=true") - suspend fun getTransmitterList(): List - - companion object { - operator fun invoke(): TransmitterApi { - return Retrofit.Builder() - .baseUrl("https://db.satnogs.org/api/") - .addConverterFactory(GsonConverterFactory.create()) - .build() - .create(TransmitterApi::class.java) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterService.kt b/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterService.kt deleted file mode 100644 index 5048551b..00000000 --- a/app/src/main/java/com/rtbishop/lookingsat/api/TransmitterService.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.rtbishop.lookingsat.api - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.rtbishop.lookingsat.repo.Transmitter - -class TransmitterService(private val transmitterApi: TransmitterApi) { - private val _transmittersList = MutableLiveData>() - val transmittersList: LiveData> = _transmittersList - - suspend fun fetchTransmitters() { - _transmittersList.postValue(transmitterApi.getTransmitterList()) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/api/TransmittersApi.kt b/app/src/main/java/com/rtbishop/lookingsat/api/TransmittersApi.kt new file mode 100644 index 00000000..0d904b66 --- /dev/null +++ b/app/src/main/java/com/rtbishop/lookingsat/api/TransmittersApi.kt @@ -0,0 +1,10 @@ +package com.rtbishop.lookingsat.api + +import com.rtbishop.lookingsat.repo.Transmitter +import retrofit2.http.GET + +interface TransmittersApi { + + @GET("transmitters/") + suspend fun fetchTransmittersList(): List +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt b/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt index 2ae7e79d..ed2cb9ce 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt @@ -8,6 +8,7 @@ import com.google.gson.annotations.SerializedName data class Transmitter( @PrimaryKey @SerializedName("uuid") val uuid: String, @SerializedName("description") val description: String, + @SerializedName("alive") val isAlive: Boolean, @SerializedName("uplink_low") val uplinkLow: Long?, @SerializedName("uplink_high") val uplinkHigh: Long?, @SerializedName("downlink_low") val downlinkLow: Long?,