From 5e53bb9db9abb644973e05f9c3501c010b5467b3 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Fri, 27 Dec 2019 20:02:18 +0000 Subject: [PATCH] Now downloading TLE files by the list of URLs and using coroutines. --- .../com/rtbishop/look4sat/MainViewModel.kt | 8 ++++---- .../look4sat/network/RemoteDataSource.kt | 19 ++++++++++--------- .../com/rtbishop/look4sat/repo/Repository.kt | 4 ++-- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt index 57f5ff08..62f15cf2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/MainViewModel.kt @@ -73,9 +73,9 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { (app as Look4SatApp).appComponent.inject(this) } - private var passPrefs = SatPassPrefs( - preferences.getString(keyHours, defValueHours)!!.toInt(), - preferences.getString(keyMinEl, defValueMinEl)!!.toDouble() + private val urlList = listOf( + "https://celestrak.com/NORAD/elements/amateur.txt", + "https://celestrak.com/NORAD/elements/weather.txt" ) private val _debugMessage = MutableLiveData() @@ -123,7 +123,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { fun updateAndSaveTleFile() { viewModelScope.launch(Dispatchers.IO) { try { - val inputStream = repository.fetchTleStream() + val inputStream = repository.getStreamForUrl(urlList) val tleList = TLE.importSat(inputStream).apply { sortBy { it.name } } val fileOutStream = app.openFileOutput(tleMainListFileName, Context.MODE_PRIVATE) ObjectOutputStream(fileOutStream).apply { diff --git a/app/src/main/java/com/rtbishop/look4sat/network/RemoteDataSource.kt b/app/src/main/java/com/rtbishop/look4sat/network/RemoteDataSource.kt index 6c60dbb2..d7aca793 100644 --- a/app/src/main/java/com/rtbishop/look4sat/network/RemoteDataSource.kt +++ b/app/src/main/java/com/rtbishop/look4sat/network/RemoteDataSource.kt @@ -33,15 +33,16 @@ class RemoteDataSource @Inject constructor( private val api: TransmittersApi, private val client: OkHttpClient ) { - - 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 getStreamForUrl(urlList: List): InputStream { + val streamTable = Hashtable() + withContext(Dispatchers.IO) { + urlList.forEach { + val request = Request.Builder().url(it).build() + val stream = client.newCall(request).execute().body()?.byteStream()!! + streamTable[it] = stream + } + } + return SequenceInputStream(streamTable.elements()) } suspend fun fetchTransmittersList(): List { diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt index 9baf63a2..3bd9e954 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt @@ -28,8 +28,8 @@ class Repository @Inject constructor( private val localSource: LocalDataSource, private val remoteSource: RemoteDataSource ) { - fun fetchTleStream(): InputStream { - return remoteSource.fetchTleStream() + suspend fun getStreamForUrl(urlList: List): InputStream { + return remoteSource.getStreamForUrl(urlList) } suspend fun updateTransmittersDatabase() {