kopia lustrzana https://github.com/rt-bishop/Look4Sat
Moved and refactored several classes
rodzic
673474a51f
commit
94751519ac
|
|
@ -18,7 +18,7 @@
|
|||
package com.rtbishop.look4sat.framework.api
|
||||
|
||||
import com.rtbishop.look4sat.data.RemoteDataSource
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import com.rtbishop.look4sat.utility.DataMapper
|
||||
import java.io.InputStream
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ class RemoteSource(private val api: SatelliteService) : RemoteDataSource {
|
|||
return api.fetchFileByUrl(url).body()?.byteStream()
|
||||
}
|
||||
|
||||
override suspend fun fetchTransmitters(): List<SatTrans> {
|
||||
override suspend fun fetchTransmitters(): List<Transmitter> {
|
||||
return DataMapper.satTransListToDomainTransList(api.fetchTransmitters())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
package com.rtbishop.look4sat.framework.api
|
||||
|
||||
import com.rtbishop.look4sat.framework.model.SatTrans
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.GET
|
||||
|
|
@ -31,5 +31,5 @@ interface SatelliteService {
|
|||
suspend fun fetchFileByUrl(@Url url: String): Response<ResponseBody>
|
||||
|
||||
@GET("transmitters/")
|
||||
suspend fun fetchTransmitters(): List<SatTrans>
|
||||
suspend fun fetchTransmitters(): List<Transmitter>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
package com.rtbishop.look4sat.framework.db
|
||||
|
||||
import com.rtbishop.look4sat.data.LocalDataSource
|
||||
import com.rtbishop.look4sat.domain.SatEntry
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.data.SatEntry
|
||||
import com.rtbishop.look4sat.data.SatItem
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
import com.rtbishop.look4sat.utility.DataMapper
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
@ -46,12 +46,12 @@ class LocalSource(private val satelliteDao: SatelliteDao) : LocalDataSource {
|
|||
satelliteDao.updateEntriesSelection(catNums, isSelected)
|
||||
}
|
||||
|
||||
override fun getSatTransmitters(catNum: Int): Flow<List<SatTrans>> {
|
||||
override fun getSatTransmitters(catNum: Int): Flow<List<Transmitter>> {
|
||||
return satelliteDao.getSatTransmitters(catNum)
|
||||
.map { satTransList -> DataMapper.satTransListToDomainTransList(satTransList) }
|
||||
}
|
||||
|
||||
override suspend fun updateTransmitters(satelliteTrans: List<SatTrans>) {
|
||||
override suspend fun updateTransmitters(satelliteTrans: List<Transmitter>) {
|
||||
val satTransList = DataMapper.domainTransListToSatTransList(satelliteTrans)
|
||||
satelliteDao.updateTransmitters(satTransList)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ package com.rtbishop.look4sat.framework.db
|
|||
import androidx.room.*
|
||||
import com.rtbishop.look4sat.framework.model.SatEntry
|
||||
import com.rtbishop.look4sat.framework.model.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.SatTrans
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ interface SatelliteDao {
|
|||
fun getSatItems(): Flow<List<SatItem>>
|
||||
|
||||
@Query("SELECT * FROM transmitters WHERE catNum = :catNum")
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<SatTrans>>
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<Transmitter>>
|
||||
|
||||
@Query("SELECT tle FROM entries WHERE isSelected = 1")
|
||||
suspend fun getSelectedSatellites(): List<Satellite>
|
||||
|
|
@ -68,7 +68,7 @@ interface SatelliteDao {
|
|||
}
|
||||
|
||||
@Transaction
|
||||
suspend fun updateTransmitters(transmitters: List<SatTrans>) {
|
||||
suspend fun updateTransmitters(transmitters: List<Transmitter>) {
|
||||
deleteTransmitters()
|
||||
insertTransmitters(transmitters)
|
||||
}
|
||||
|
|
@ -77,5 +77,5 @@ interface SatelliteDao {
|
|||
suspend fun deleteTransmitters()
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertTransmitters(transmitters: List<SatTrans>)
|
||||
suspend fun insertTransmitters(transmitters: List<Transmitter>)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ import androidx.room.Database
|
|||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import com.rtbishop.look4sat.framework.model.SatEntry
|
||||
import com.rtbishop.look4sat.framework.model.SatTrans
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
|
||||
@Database(entities = [SatEntry::class, SatTrans::class], version = 1, exportSchema = false)
|
||||
@Database(entities = [SatEntry::class, Transmitter::class], version = 1, exportSchema = false)
|
||||
@TypeConverters(Converters::class)
|
||||
abstract class SatelliteDb : RoomDatabase() {
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ data class SatItem(
|
|||
var isSelected: Boolean,
|
||||
@Relation(
|
||||
parentColumn = "catNum",
|
||||
entity = SatTrans::class,
|
||||
entity = Transmitter::class,
|
||||
entityColumn = "catNum",
|
||||
projection = ["mode"]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import androidx.room.PrimaryKey
|
|||
import com.squareup.moshi.Json
|
||||
|
||||
@Entity(tableName = "transmitters")
|
||||
data class SatTrans(
|
||||
data class Transmitter(
|
||||
@PrimaryKey @field:Json(name = "uuid") val uuid: String,
|
||||
@field:Json(name = "description") val info: String,
|
||||
@field:Json(name = "alive") val isAlive: Boolean,
|
||||
|
|
@ -23,7 +23,7 @@ import androidx.recyclerview.widget.AsyncListDiffer
|
|||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.databinding.SatItemBinding
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.data.SatItem
|
||||
|
||||
class SatItemAdapter : RecyclerView.Adapter<SatItemAdapter.SatItemHolder>() {
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator
|
|||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.data.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.Result
|
||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||
import com.rtbishop.look4sat.utility.getNavResult
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import android.widget.SearchView
|
|||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.data.PreferencesSource
|
||||
import com.rtbishop.look4sat.data.SatelliteRepo
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.data.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.Result
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.collect
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import com.rtbishop.look4sat.R
|
|||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||
import com.rtbishop.look4sat.domain.GeoPos
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
import com.rtbishop.look4sat.domain.SatData
|
||||
import com.rtbishop.look4sat.data.SatData
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.osmdroid.config.Configuration
|
||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ package com.rtbishop.look4sat.presentation.satMapScreen
|
|||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.domain.Predictor
|
||||
import com.rtbishop.look4sat.data.PreferencesSource
|
||||
import com.rtbishop.look4sat.data.SatData
|
||||
import com.rtbishop.look4sat.data.SatelliteRepo
|
||||
import com.rtbishop.look4sat.domain.*
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
|
|
|
|||
|
|
@ -18,13 +18,13 @@
|
|||
package com.rtbishop.look4sat.presentation.satPassInfoScreen
|
||||
|
||||
import androidx.lifecycle.*
|
||||
import com.rtbishop.look4sat.domain.Predictor
|
||||
import com.rtbishop.look4sat.data.PreferencesSource
|
||||
import com.rtbishop.look4sat.data.SatelliteRepo
|
||||
import com.rtbishop.look4sat.injection.IoDispatcher
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Predictor
|
||||
import com.rtbishop.look4sat.domain.SatPass
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import com.rtbishop.look4sat.framework.OrientationProvider
|
||||
import com.rtbishop.look4sat.injection.IoDispatcher
|
||||
import com.rtbishop.look4sat.utility.round
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.*
|
||||
|
|
@ -44,9 +44,9 @@ class PassInfoViewModel @Inject constructor(
|
|||
) : ViewModel(), OrientationProvider.OrientationListener {
|
||||
|
||||
private val stationPos = preferences.loadStationPosition()
|
||||
private val _transmitters = MutableLiveData<List<SatTrans>>()
|
||||
private val _transmitters = MutableLiveData<List<Transmitter>>()
|
||||
private val _orientation = MutableLiveData<Triple<Float, Float, Float>>()
|
||||
val transmitters: LiveData<List<SatTrans>> = _transmitters
|
||||
val transmitters: LiveData<List<Transmitter>> = _transmitters
|
||||
val orientation: LiveData<Triple<Float, Float, Float>> = _orientation
|
||||
|
||||
fun getPass(catNum: Int, aosTime: Long) = liveData {
|
||||
|
|
@ -81,7 +81,7 @@ class PassInfoViewModel @Inject constructor(
|
|||
val socket = Socket(rotatorPrefs.first, rotatorPrefs.second)
|
||||
val writer = socket.getOutputStream().bufferedWriter()
|
||||
while (isActive) {
|
||||
val satPos = satPass.satellite.getPosition(stationPos, Date().time)
|
||||
val satPos = predictor.getSatPos(satPass.satellite, stationPos, Date())
|
||||
val azimuth = Math.toDegrees(satPos.azimuth).round(1)
|
||||
val elevation = Math.toDegrees(satPos.elevation).round(1)
|
||||
writer.write("\\set_pos $azimuth $elevation")
|
||||
|
|
@ -100,7 +100,7 @@ class PassInfoViewModel @Inject constructor(
|
|||
viewModelScope.launch {
|
||||
satelliteRepo.getSatTransmitters(satPass.catNum).collect { transList ->
|
||||
while (isActive) {
|
||||
val satPos = satPass.satellite.getPosition(stationPos, Date().time)
|
||||
val satPos = predictor.getSatPos(satPass.satellite, stationPos, Date())
|
||||
val copiedList = transList.map { it.copy() }
|
||||
copiedList.forEach { transmitter ->
|
||||
transmitter.downlink?.let {
|
||||
|
|
|
|||
|
|
@ -24,23 +24,23 @@ import androidx.recyclerview.widget.DiffUtil
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.ItemTransBinding
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import java.util.*
|
||||
|
||||
class SatTransAdapter : RecyclerView.Adapter<SatTransAdapter.TransHolder>() {
|
||||
|
||||
private val diffCallback = object : DiffUtil.ItemCallback<SatTrans>() {
|
||||
override fun areItemsTheSame(oldItem: SatTrans, newItem: SatTrans): Boolean {
|
||||
private val diffCallback = object : DiffUtil.ItemCallback<Transmitter>() {
|
||||
override fun areItemsTheSame(oldItem: Transmitter, newItem: Transmitter): Boolean {
|
||||
return oldItem.uuid == newItem.uuid
|
||||
}
|
||||
|
||||
override fun areContentsTheSame(oldItem: SatTrans, newItem: SatTrans): Boolean {
|
||||
override fun areContentsTheSame(oldItem: Transmitter, newItem: Transmitter): Boolean {
|
||||
return oldItem.downlink == newItem.downlink
|
||||
}
|
||||
}
|
||||
private val differ = AsyncListDiffer(this, diffCallback)
|
||||
|
||||
fun submitList(transmitters: List<SatTrans>) {
|
||||
fun submitList(transmitters: List<Transmitter>) {
|
||||
differ.submitList(transmitters)
|
||||
}
|
||||
|
||||
|
|
@ -65,27 +65,27 @@ class SatTransAdapter : RecyclerView.Adapter<SatTransAdapter.TransHolder>() {
|
|||
private val formatLinkNull = itemView.context.getString(R.string.trans_no_link)
|
||||
private val isInverted = itemView.context.getString(R.string.trans_inverted)
|
||||
|
||||
fun bind(satTrans: SatTrans) {
|
||||
binding.description.text = satTrans.info
|
||||
fun bind(transmitter: Transmitter) {
|
||||
binding.description.text = transmitter.info
|
||||
|
||||
satTrans.downlink.let { downlink ->
|
||||
transmitter.downlink.let { downlink ->
|
||||
if (downlink != null) {
|
||||
val downlinkFreq = downlink / divider
|
||||
binding.downlink.text = String.format(Locale.ENGLISH, formatLink, downlinkFreq)
|
||||
} else binding.downlink.text = formatLinkNull
|
||||
}
|
||||
|
||||
satTrans.uplink.let { uplink ->
|
||||
transmitter.uplink.let { uplink ->
|
||||
if (uplink != null) {
|
||||
val uplinkFreq = uplink / divider
|
||||
binding.uplink.text = String.format(Locale.ENGLISH, formatLink, uplinkFreq)
|
||||
} else binding.uplink.text = formatLinkNull
|
||||
}
|
||||
|
||||
if (satTrans.mode != null) binding.mode.text = String.format(mode, satTrans.mode)
|
||||
if (transmitter.mode != null) binding.mode.text = String.format(mode, transmitter.mode)
|
||||
else binding.mode.text = String.format(mode, strNo)
|
||||
|
||||
if (satTrans.isInverted) binding.isInverted.text = String.format(isInverted, strYes)
|
||||
if (transmitter.isInverted) binding.isInverted.text = String.format(isInverted, strYes)
|
||||
else binding.isInverted.text = String.format(isInverted, strNo)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@ package com.rtbishop.look4sat.utility
|
|||
|
||||
import com.rtbishop.look4sat.framework.model.SatEntry
|
||||
import com.rtbishop.look4sat.framework.model.SatItem
|
||||
import com.rtbishop.look4sat.framework.model.SatTrans
|
||||
import com.rtbishop.look4sat.domain.SatEntry as DomainEntry
|
||||
import com.rtbishop.look4sat.domain.SatItem as DomainItem
|
||||
import com.rtbishop.look4sat.domain.SatTrans as DomainTrans
|
||||
import com.rtbishop.look4sat.framework.model.Transmitter
|
||||
import com.rtbishop.look4sat.data.SatEntry as DomainEntry
|
||||
import com.rtbishop.look4sat.data.SatItem as DomainItem
|
||||
import com.rtbishop.look4sat.domain.Transmitter as DomainTrans
|
||||
|
||||
object DataMapper {
|
||||
|
||||
|
|
@ -44,14 +44,14 @@ object DataMapper {
|
|||
return items.map { item -> satItemToDomainItem(item) }
|
||||
}
|
||||
|
||||
fun satTransToDomainTrans(transmitter: SatTrans): DomainTrans {
|
||||
fun satTransToDomainTrans(transmitter: Transmitter): DomainTrans {
|
||||
return DomainTrans(
|
||||
transmitter.uuid, transmitter.info, transmitter.isAlive, transmitter.downlink,
|
||||
transmitter.uplink, transmitter.mode, transmitter.isInverted, transmitter.catNum
|
||||
)
|
||||
}
|
||||
|
||||
fun satTransListToDomainTransList(transmitters: List<SatTrans>): List<DomainTrans> {
|
||||
fun satTransListToDomainTransList(transmitters: List<Transmitter>): List<DomainTrans> {
|
||||
return transmitters.map { transmitter -> satTransToDomainTrans(transmitter) }
|
||||
}
|
||||
|
||||
|
|
@ -73,14 +73,14 @@ object DataMapper {
|
|||
return items.map { item -> domainItemToSatItem(item) }
|
||||
}
|
||||
|
||||
fun domainTransToSatTrans(transmitter: DomainTrans): SatTrans {
|
||||
return SatTrans(
|
||||
fun domainTransToSatTrans(transmitter: DomainTrans): Transmitter {
|
||||
return Transmitter(
|
||||
transmitter.uuid, transmitter.info, transmitter.isAlive, transmitter.downlink,
|
||||
transmitter.uplink, transmitter.mode, transmitter.isInverted, transmitter.catNum
|
||||
)
|
||||
}
|
||||
|
||||
fun domainTransListToSatTransList(transmitters: List<DomainTrans>): List<SatTrans> {
|
||||
fun domainTransListToSatTransList(transmitters: List<DomainTrans>): List<Transmitter> {
|
||||
return transmitters.map { transmitter -> domainTransToSatTrans(transmitter) }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@
|
|||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.SatEntry
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
|
|
@ -27,7 +25,7 @@ interface LocalDataSource {
|
|||
|
||||
fun getSatItems(): Flow<List<SatItem>>
|
||||
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<SatTrans>>
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<Transmitter>>
|
||||
|
||||
suspend fun getSelectedSatellites(): List<Satellite>
|
||||
|
||||
|
|
@ -35,5 +33,5 @@ interface LocalDataSource {
|
|||
|
||||
suspend fun updateEntriesSelection(catNums: List<Int>, isSelected: Boolean)
|
||||
|
||||
suspend fun updateTransmitters(satelliteTrans: List<SatTrans>)
|
||||
suspend fun updateTransmitters(satelliteTrans: List<Transmitter>)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,12 +17,12 @@
|
|||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import java.io.InputStream
|
||||
|
||||
interface RemoteDataSource {
|
||||
|
||||
suspend fun fetchDataStream(url: String): InputStream?
|
||||
|
||||
suspend fun fetchTransmitters(): List<SatTrans>
|
||||
suspend fun fetchTransmitters(): List<Transmitter>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.GeoPos
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
|
||||
data class SatData(
|
||||
val pass: Satellite,
|
||||
|
|
@ -15,7 +15,9 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.TLE
|
||||
|
||||
data class SatEntry(
|
||||
val tle: TLE,
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
data class SatItem(
|
||||
val catNum: Int,
|
||||
|
|
@ -17,9 +17,7 @@
|
|||
*/
|
||||
package com.rtbishop.look4sat.data
|
||||
|
||||
import com.rtbishop.look4sat.domain.SatEntry
|
||||
import com.rtbishop.look4sat.domain.SatItem
|
||||
import com.rtbishop.look4sat.domain.SatTrans
|
||||
import com.rtbishop.look4sat.domain.Transmitter
|
||||
import com.rtbishop.look4sat.domain.Satellite
|
||||
import com.rtbishop.look4sat.domain.TLE
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
|
|
@ -49,7 +47,7 @@ class SatelliteRepo(
|
|||
return localDataSource.getSatItems()
|
||||
}
|
||||
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<SatTrans>> {
|
||||
fun getSatTransmitters(catNum: Int): Flow<List<Transmitter>> {
|
||||
return localDataSource.getSatTransmitters(catNum)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
package com.rtbishop.look4sat.domain
|
||||
|
||||
data class SatTrans(
|
||||
data class Transmitter(
|
||||
val uuid: String,
|
||||
val info: String,
|
||||
val isAlive: Boolean,
|
||||
Ładowanie…
Reference in New Issue