mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Major fixes for DataSources. Fixed NPE in Transmitter entity.
This commit is contained in:
1 parent
4e7325d08f
commit
be20786a18
7 files changed
+29
-34
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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<Transmitter> {
|
||||
suspend fun fetchTransmittersList(): List<Transmitter> {
|
||||
return api.fetchTransmittersList()
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,8 @@ import com.rtbishop.lookingsat.repo.Transmitter
|
||||
|
||||
class LocalDataSource(private val transmittersDao: TransmittersDao) {
|
||||
|
||||
suspend fun insert(transmitters: List<Transmitter>) {
|
||||
transmittersDao.insert(transmitters)
|
||||
suspend fun insertTransmitters(transmitters: List<Transmitter>) {
|
||||
transmittersDao.insertTransmitters(transmitters)
|
||||
}
|
||||
|
||||
suspend fun getTransmittersForSat(id: Int): List<Transmitter> {
|
||||
|
||||
@@ -10,8 +10,8 @@ import com.rtbishop.lookingsat.repo.Transmitter
|
||||
interface TransmittersDao {
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insert(transmitters: List<Transmitter>)
|
||||
suspend fun insertTransmitters(transmitters: List<Transmitter>)
|
||||
|
||||
@Query("SELECT * FROM transmitters WHERE noradCatId = :id")
|
||||
@Query("SELECT * FROM transmitters WHERE isAlive = 1 and noradCatId = :id")
|
||||
suspend fun getTransmittersForSat(id: Int): List<Transmitter>
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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<Transmitter> {
|
||||
updateTransmitters()
|
||||
return localSource.getTransmittersForSat(id)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
Reference in new issue
Block a user