From a006d0558a4ed2f4ef2b1de256d8b0d85648cfa7 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 2 Apr 2022 21:02:49 +0100 Subject: [PATCH] Fixed radar track display bug in RadarViewModel.kt --- .../radarScreen/RadarViewModel.kt | 78 +++++++++---------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt index df3ef8cf..e972e895 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/radarScreen/RadarViewModel.kt @@ -27,6 +27,7 @@ import com.rtbishop.look4sat.domain.model.SatRadio import com.rtbishop.look4sat.domain.predict.GeoPos import com.rtbishop.look4sat.domain.predict.SatPass import com.rtbishop.look4sat.domain.predict.SatPos +import com.rtbishop.look4sat.domain.predict.Satellite import com.rtbishop.look4sat.framework.OrientationManager import com.rtbishop.look4sat.utility.DataReporter import com.rtbishop.look4sat.utility.round @@ -35,7 +36,6 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch -import java.util.* import javax.inject.Inject @HiltViewModel @@ -61,9 +61,17 @@ class RadarViewModel @Inject constructor( val pass = passes.find { pass -> pass.catNum == catNum && pass.aosTime == aosTime } pass?.let { satPass -> emit(satPass) - sendPassData(satPass) - sendPassDataBT(satPass) - processTransmitters(satPass) + val transmitters = repository.getRadiosWithId(satPass.catNum) + viewModelScope.launch { + while (isActive) { + val timeNow = System.currentTimeMillis() + val satPos = satManager.getPosition(satPass.satellite, stationPos, timeNow) + sendPassData(satPass, satPos, satPass.satellite) + sendPassDataBT(satPos) + processRadios(transmitters, satPass.satellite, timeNow) + delay(1000) + } + } } } } @@ -90,59 +98,45 @@ class RadarViewModel @Inject constructor( return GeomagneticField(latitude, longitude, 0f, time).declination } - private fun sendPassData(satPass: SatPass) { + private fun sendPassData(satPass: SatPass, satPos: SatPos, satellite: Satellite) { viewModelScope.launch { - var satTrack: List = emptyList() + var track: List = emptyList() if (!satPass.isDeepSpace) { - satTrack = satManager - .getTrack(satPass.satellite, stationPos, satPass.aosTime, satPass.losTime) + track = satManager.getTrack(satellite, stationPos, satPass.aosTime, satPass.losTime) } - while (isActive) { - val satPos = satManager.getPosition(satPass.satellite, stationPos, Date().time) - if (settings.getRotatorEnabled()) { - val server = settings.getRotatorServer() - val port = settings.getRotatorPort().toInt() - val azimuth = satPos.azimuth.toDegrees().round(1) - val elevation = satPos.elevation.toDegrees().round(1) - reporter.reportRotation(server, port, azimuth, elevation) - } - _passData.postValue(RadarData(satPos, satTrack)) - delay(1000) + if (settings.getRotatorEnabled()) { + val server = settings.getRotatorServer() + val port = settings.getRotatorPort().toInt() + val azimuth = satPos.azimuth.toDegrees().round(1) + val elevation = satPos.elevation.toDegrees().round(1) + reporter.reportRotation(server, port, azimuth, elevation) } + _passData.postValue(RadarData(satPos, track)) } } - private fun sendPassDataBT(satPass: SatPass) { + private fun sendPassDataBT(satPos: SatPos) { viewModelScope.launch { - while (isActive) { - val satPos = satManager.getPosition(satPass.satellite, stationPos, Date().time) - if (settings.getBTEnabled()) { - val btDevice = settings.getBTDeviceAddr() - if (btReporter.isConnected()) { - val format = settings.getBTFormat() - val azimuth = satPos.azimuth.toDegrees().round(0).toInt() - val elevation = satPos.elevation.toDegrees().round(0).toInt() - btReporter.reportRotation(format, azimuth, elevation) - } else if (!btReporter.isConnecting()) { - Log.i("BTReporter", "BTReporter: Attempting to connect...") - btReporter.connectBTDevice(btDevice) - } + if (settings.getBTEnabled()) { + val btDevice = settings.getBTDeviceAddr() + if (btReporter.isConnected()) { + val format = settings.getBTFormat() + val azimuth = satPos.azimuth.toDegrees().round(0).toInt() + val elevation = satPos.elevation.toDegrees().round(0).toInt() + btReporter.reportRotation(format, azimuth, elevation) + } else if (!btReporter.isConnecting()) { + Log.i("BTReporter", "BTReporter: Attempting to connect...") + btReporter.connectBTDevice(btDevice) } - delay(1000) } } } - private fun processTransmitters(pass: SatPass) { + private fun processRadios(radios: List, satellite: Satellite, time: Long) { viewModelScope.launch { delay(125) - val transmitters = repository.getRadiosWithId(pass.catNum) - while (isActive) { - val time = System.currentTimeMillis() - val list = satManager.processRadios(pass.satellite, stationPos, transmitters, time) - _transmitters.postValue(list) - delay(1000) - } + val list = satManager.processRadios(satellite, stationPos, radios, time) + _transmitters.postValue(list) } } }