From 928ccd499194018433aa8cf2236d5b857c1b6dea Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Mon, 9 Dec 2019 08:53:57 +0000 Subject: [PATCH] Updated TLE file update, save and load logic --- .../com/rtbishop/lookingsat/MainViewModel.kt | 37 ++++++++++++------- .../rtbishop/lookingsat/ui/MainActivity.kt | 2 +- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt index e0f7f1ac..a0344475 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt @@ -22,9 +22,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.FileNotFoundException import java.io.IOException +import java.io.ObjectInputStream +import java.io.ObjectOutputStream import java.util.* import javax.inject.Inject +@Suppress("UNCHECKED_CAST") class MainViewModel(application: Application) : AndroidViewModel(application) { private val defValueLoc = application.getString(R.string.def_gsp_loc) @@ -36,6 +39,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { private val keyHours = application.getString(R.string.key_hours_ahead) private val keyMinEl = application.getString(R.string.key_min_el) private val tleFileName = application.getString(R.string.tle_file_name) + private val app = application @Inject lateinit var locationClient: FusedLocationProviderClient @@ -45,7 +49,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { lateinit var repository: Repository init { - (application as LookingSatApp).appComponent.inject(this) + (app as LookingSatApp).appComponent.inject(this) } val debugMessage = MutableLiveData("") @@ -66,13 +70,17 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { ) private fun loadTwoLineElementFile(): List { - return try { - TLE.importSat(getApplication().openFileInput(tleFileName)) - .sortedWith(compareBy { it.name }) - } catch (exception: FileNotFoundException) { + try { + val fileInput = app.openFileInput(tleFileName) + val objectInput = ObjectInputStream(fileInput) + val tleList = objectInput.readObject() + return tleList as List + } catch (e: FileNotFoundException) { debugMessage.postValue("TLE file wasn't found") - emptyList() + } catch (e: IOException) { + debugMessage.postValue(e.toString()) } + return emptyList() } suspend fun getPasses() { @@ -132,15 +140,18 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } } - fun updateTwoLineElementFile() { + fun updateAndSaveTleFile() { viewModelScope.launch(Dispatchers.IO) { try { - val stream = repository.fetchTleStream() - getApplication().openFileOutput(tleFileName, Context.MODE_PRIVATE) - .use { - it.write(stream.readBytes()) - } - tleMainList = loadTwoLineElementFile() + val inputStream = repository.fetchTleStream() + val tleList = TLE.importSat(inputStream).apply { sortBy { it.name } } + val fileOutStream = app.openFileOutput(tleFileName, Context.MODE_PRIVATE) + ObjectOutputStream(fileOutStream).apply { + writeObject(tleList) + flush() + close() + } + tleMainList = tleList debugMessage.postValue("TLE file was updated") } catch (exception: IOException) { debugMessage.postValue("Couldn't update TLE file") diff --git a/app/src/main/java/com/rtbishop/lookingsat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/lookingsat/ui/MainActivity.kt index c0474952..6598ef73 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/ui/MainActivity.kt @@ -115,7 +115,7 @@ class MainActivity : AppCompatActivity() { }) drawerBtnLoc.setOnClickListener { updateLocation() } - drawerBtnTle.setOnClickListener { viewModel.updateTwoLineElementFile() } + drawerBtnTle.setOnClickListener { viewModel.updateAndSaveTleFile() } drawerBtnTrans.setOnClickListener { viewModel.updateTransmittersDatabase() } drawerBtnGithub.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(githubUrl)))