diff --git a/app/src/main/java/com/rtbishop/lookingsat/Injector.kt b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt index 0df5e4ef..53436be3 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/Injector.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt @@ -18,16 +18,12 @@ object Injector { .addConverterFactory(GsonConverterFactory.create()) .build() .create(TransmittersApi::class.java) - val client = OkHttpClient() - return RemoteDataSource(api, client) } private fun provideLocalDataSource(context: Context): LocalDataSource { - val dao = TransmittersDatabase.getInstance(context).transmittersDao() - - return LocalDataSource(dao) + return LocalDataSource(TransmittersDatabase.getInstance(context).transmittersDao()) } fun provideRepository(context: Context): Repository { diff --git a/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt b/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt index 06610e2d..45299577 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt @@ -1,30 +1,24 @@ package com.rtbishop.lookingsat.api import com.rtbishop.lookingsat.repo.Transmitter -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request - -private const val TLE_AMATEUR = "https://celestrak.com/NORAD/elements/amateur.txt" -private const val TLE_WEATHER = "https://celestrak.com/NORAD/elements/weather.txt" +import java.io.InputStream +import java.io.SequenceInputStream 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 fetchTles(): ByteArray { - var streamAmateur: ByteArray? = null - var streamWeather: ByteArray? = null - withContext(Dispatchers.IO) { - streamAmateur = client.newCall(requestAmateur).execute().body()?.bytes() - streamWeather = client.newCall(requestWeather).execute().body()?.bytes() - } - return streamAmateur ?: ByteArray(0).plus(streamWeather ?: ByteArray(0)) + fun fetchTleStream(): InputStream { + val requestAmateur = + Request.Builder().url("https://celestrak.com/NORAD/elements/amateur.txt").build() + val requestWeather = + Request.Builder().url("https://celestrak.com/NORAD/elements/weather.txt").build() + val streamAmateur = client.newCall(requestAmateur).execute().body()?.byteStream() + val streamWeather = client.newCall(requestWeather).execute().body()?.byteStream() + return SequenceInputStream(streamAmateur, streamWeather) } - suspend fun fetchTransmitters(): List { + suspend fun fetchTransmittersList(): List { return api.fetchTransmittersList() } } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/db/LocalDataSource.kt b/app/src/main/java/com/rtbishop/lookingsat/db/LocalDataSource.kt index ad4f2ee3..380b4bcc 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/db/LocalDataSource.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/db/LocalDataSource.kt @@ -4,8 +4,8 @@ import com.rtbishop.lookingsat.repo.Transmitter class LocalDataSource(private val transmittersDao: TransmittersDao) { - suspend fun insert(transmitters: List) { - transmittersDao.insert(transmitters) + suspend fun insertTransmitters(transmitters: List) { + transmittersDao.insertTransmitters(transmitters) } suspend fun getTransmittersForSat(id: Int): List { diff --git a/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDao.kt b/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDao.kt index 381e59bc..28afabe2 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDao.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDao.kt @@ -10,8 +10,8 @@ import com.rtbishop.lookingsat.repo.Transmitter interface TransmittersDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(transmitters: List) + suspend fun insertTransmitters(transmitters: List) - @Query("SELECT * FROM transmitters WHERE noradCatId = :id") + @Query("SELECT * FROM transmitters WHERE isAlive = 1 and noradCatId = :id") suspend fun getTransmittersForSat(id: Int): List } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDatabase.kt b/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDatabase.kt index f9d587ac..fce8707d 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDatabase.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/db/TransmittersDatabase.kt @@ -19,7 +19,7 @@ abstract class TransmittersDatabase : RoomDatabase() { fun getInstance(context: Context): TransmittersDatabase = INSTANCE ?: synchronized(this) { INSTANCE ?: Room.databaseBuilder( - context.applicationContext, + context, TransmittersDatabase::class.java, "transmitters" ).build() diff --git a/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt b/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt index 78110f09..44e91d5e 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt @@ -1,23 +1,28 @@ package com.rtbishop.lookingsat.repo +import android.util.Log import com.rtbishop.lookingsat.api.RemoteDataSource import com.rtbishop.lookingsat.db.LocalDataSource +import java.io.IOException +import java.io.InputStream class Repository( private val localSource: LocalDataSource, private val remoteSource: RemoteDataSource ) { - suspend fun fetchTles(): ByteArray { - return remoteSource.fetchTles() + fun fetchTleStream(): InputStream { + return remoteSource.fetchTleStream() } - suspend fun updateTransmitters() { - val transmitters = remoteSource.fetchTransmitters() - localSource.insert(transmitters) + suspend fun updateTransmittersDatabase() { + try { + localSource.insertTransmitters(remoteSource.fetchTransmittersList()) + } catch (exception: IOException) { + Log.d(this.javaClass.simpleName, exception.toString()) + } } suspend fun getTransmittersForSat(id: Int): List { - updateTransmitters() return localSource.getTransmittersForSat(id) } } \ 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 ed2cb9ce..cc27e30d 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/repo/Transmitter.kt @@ -13,7 +13,7 @@ data class Transmitter( @SerializedName("uplink_high") val uplinkHigh: Long?, @SerializedName("downlink_low") val downlinkLow: Long?, @SerializedName("downlink_high") val downlinkHigh: Long?, - @SerializedName("mode") val mode: String, + @SerializedName("mode") val mode: String?, @SerializedName("invert") val isInverted: Boolean, @SerializedName("norad_cat_id") val noradCatId: Int )