diff --git a/app/src/main/java/com/rtbishop/lookingsat/Injector.kt b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt index 0295f4ec..b81109f7 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/Injector.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/Injector.kt @@ -37,6 +37,6 @@ object Injector { } private fun provideViewModelFactory(context: Context): ViewModelProvider.Factory { - return ViewModelFactory(provideRepository(context)) + return ViewModelFactory(context, provideRepository(context)) } } \ 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 index dd9373e2..06610e2d 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/api/RemoteDataSource.kt @@ -1,10 +1,10 @@ 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 -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" @@ -14,10 +14,14 @@ class RemoteDataSource(private val api: TransmittersApi, private val client: OkH 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 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)) } suspend fun fetchTransmitters(): List { 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 daa67bd8..78110f09 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/repo/Repository.kt @@ -6,4 +6,18 @@ import com.rtbishop.lookingsat.db.LocalDataSource class Repository( private val localSource: LocalDataSource, private val remoteSource: RemoteDataSource -) \ No newline at end of file +) { + suspend fun fetchTles(): ByteArray { + return remoteSource.fetchTles() + } + + suspend fun updateTransmitters() { + val transmitters = remoteSource.fetchTransmitters() + localSource.insert(transmitters) + } + + 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/vm/MainViewModel.kt b/app/src/main/java/com/rtbishop/lookingsat/vm/MainViewModel.kt index 5fa1d2be..51e6b35c 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/vm/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/vm/MainViewModel.kt @@ -1,6 +1,7 @@ package com.rtbishop.lookingsat.vm +import android.content.Context import androidx.lifecycle.ViewModel import com.rtbishop.lookingsat.repo.Repository -class MainViewModel(private val repository: Repository) : ViewModel() \ No newline at end of file +class MainViewModel(private val context: Context, private val repository: Repository) : ViewModel() \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/vm/ViewModelFactory.kt b/app/src/main/java/com/rtbishop/lookingsat/vm/ViewModelFactory.kt index c4b26a26..9c14da3a 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/vm/ViewModelFactory.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/vm/ViewModelFactory.kt @@ -1,14 +1,16 @@ package com.rtbishop.lookingsat.vm +import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.rtbishop.lookingsat.repo.Repository -class ViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory { +class ViewModelFactory(private val context: Context, private val repository: Repository) : + ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(MainViewModel::class.java)) { @Suppress("UNCHECKED_CAST") - return MainViewModel(repository) as T + return MainViewModel(context.applicationContext, repository) as T } throw IllegalArgumentException("Unknown ViewModel") }