Added TLE sources DAO, minor fixes

This commit is contained in:
Arty Bishop committed 2020-08-30 16:56:05 +01:00
1 parent 78b8538808
commit 2a63aa94a9
10 files changed
+113 -9

No files matched your search

@@ -25,6 +25,7 @@ import com.rtbishop.look4sat.persistence.LocalDataSource
import com.rtbishop.look4sat.persistence.LocalSource
import com.rtbishop.look4sat.persistence.SatelliteDb
import com.rtbishop.look4sat.persistence.dao.EntriesDao
import com.rtbishop.look4sat.persistence.dao.SourcesDao
import com.rtbishop.look4sat.persistence.dao.TransmittersDao
import dagger.Module
import dagger.Provides
@@ -45,13 +46,20 @@ class PersistenceModule {
return db.transmittersDao()
}
@Singleton
@Provides
fun providesSourcesDao(db: SatelliteDb): SourcesDao {
return db.sourcesDao()
}
@Singleton
@Provides
fun provideLocalDataSource(
entriesDao: EntriesDao,
transmittersDao: TransmittersDao
transmittersDao: TransmittersDao,
sourcesDao: SourcesDao
): LocalSource {
return LocalDataSource(entriesDao, transmittersDao)
return LocalDataSource(entriesDao, transmittersDao, sourcesDao)
}
@Singleton
@@ -1,3 +1,7 @@
package com.rtbishop.look4sat.data
data class TleSource(var url: String = String())
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "sources")
data class TleSource(@PrimaryKey var url: String = String())
@@ -20,14 +20,17 @@
package com.rtbishop.look4sat.persistence
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.data.Transmitter
import com.rtbishop.look4sat.persistence.dao.EntriesDao
import com.rtbishop.look4sat.persistence.dao.SourcesDao
import com.rtbishop.look4sat.persistence.dao.TransmittersDao
import javax.inject.Inject
class LocalDataSource @Inject constructor(
private val entriesDao: EntriesDao,
private val transmittersDao: TransmittersDao
private val transmittersDao: TransmittersDao,
private val sourcesDao: SourcesDao
) : LocalSource {
override suspend fun insertEntries(entries: List<SatEntry>) {
@@ -47,6 +50,10 @@ class LocalDataSource @Inject constructor(
catNumList.forEach { entriesDao.updateEntrySelection(it) }
}
override suspend fun clearEntries() {
entriesDao.clearEntries()
}
////////////////////////////////////////////////////////////////////////////////////////////////
override suspend fun insertTransmitters(transmitters: List<Transmitter>) {
@@ -56,4 +63,22 @@ class LocalDataSource @Inject constructor(
override suspend fun getTransmittersByCatNum(catNum: Int): List<Transmitter> {
return transmittersDao.getTransmittersByCatNum(catNum)
}
override suspend fun clearTransmitters() {
transmittersDao.clearTransmitters()
}
////////////////////////////////////////////////////////////////////////////////////////////////
override suspend fun insertSources(sources: List<TleSource>) {
sourcesDao.insertSources(sources)
}
override suspend fun getSources(): List<TleSource> {
return sourcesDao.getSources()
}
override suspend fun clearSources() {
sourcesDao.clearSources()
}
}
@@ -1,6 +1,7 @@
package com.rtbishop.look4sat.persistence
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.data.Transmitter
interface LocalSource {
@@ -13,9 +14,21 @@ interface LocalSource {
suspend fun updateEntriesSelection(catNumList: List<Int>)
suspend fun clearEntries()
////////////////////////////////////////////////////////////////////////////////////////////////
suspend fun insertTransmitters(transmitters: List<Transmitter>)
suspend fun getTransmittersByCatNum(catNum: Int): List<Transmitter>
suspend fun clearTransmitters()
////////////////////////////////////////////////////////////////////////////////////////////////
suspend fun insertSources(sources: List<TleSource>)
suspend fun getSources(): List<TleSource>
suspend fun clearSources()
}
@@ -23,16 +23,24 @@ import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.data.Transmitter
import com.rtbishop.look4sat.persistence.dao.EntriesDao
import com.rtbishop.look4sat.persistence.dao.SourcesDao
import com.rtbishop.look4sat.persistence.dao.TransmittersDao
import com.rtbishop.look4sat.utility.Converters
@Database(entities = [Transmitter::class, SatEntry::class], version = 1, exportSchema = false)
@Database(
entities = [Transmitter::class, SatEntry::class, TleSource::class],
version = 1,
exportSchema = false
)
@TypeConverters(Converters::class)
abstract class SatelliteDb : RoomDatabase() {
abstract fun entriesDao(): EntriesDao
abstract fun transmittersDao(): TransmittersDao
abstract fun sourcesDao(): SourcesDao
}
@@ -42,4 +42,7 @@ interface EntriesDao {
@Query("UPDATE entries SET isSelected = 0")
suspend fun clearEntriesSelection()
@Query("DELETE FROM entries")
suspend fun clearEntries()
}
@@ -0,0 +1,20 @@
package com.rtbishop.look4sat.persistence.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.rtbishop.look4sat.data.TleSource
@Dao
interface SourcesDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertSources(sources: List<TleSource>)
@Query("SELECT * FROM sources")
suspend fun getSources(): List<TleSource>
@Query("DELETE FROM sources")
suspend fun clearSources()
}
@@ -14,4 +14,7 @@ interface TransmittersDao {
@Query("SELECT * FROM transmitters WHERE isAlive = 1 and catNum = :catNum")
suspend fun getTransmittersByCatNum(catNum: Int): List<Transmitter>
@Query("DELETE FROM transmitters")
suspend fun clearTransmitters()
}
@@ -38,20 +38,22 @@ class DefaultRepository @Inject constructor(
) : Repository {
override suspend fun updateEntriesFromFile(tleUri: Uri) {
resolver.openInputStream(tleUri)?.use {
withContext(Dispatchers.IO) {
val tleList = TLE.importSat(it)
withContext(Dispatchers.IO) {
resolver.openInputStream(tleUri)?.use { stream ->
val tleList = TLE.importSat(stream)
val entries = tleList.map { SatEntry(it) }
localSource.clearEntries()
localSource.insertEntries(entries)
}
}
}
override suspend fun updateEntriesFromUrl(urlList: List<TleSource>) {
val stream = remoteSource.fetchTleStream(urlList)
withContext(Dispatchers.IO) {
val stream = remoteSource.fetchTleStream(urlList)
val tleList = TLE.importSat(stream)
val entries = tleList.map { SatEntry(it) }
localSource.clearEntries()
localSource.insertEntries(entries)
}
}
@@ -71,10 +73,22 @@ class DefaultRepository @Inject constructor(
////////////////////////////////////////////////////////////////////////////////////////////////
override suspend fun updateTransmitters() {
localSource.clearTransmitters()
localSource.insertTransmitters(remoteSource.fetchTransmitters())
}
override suspend fun getTransmittersByCatNum(catNum: Int): List<Transmitter> {
return localSource.getTransmittersByCatNum(catNum)
}
////////////////////////////////////////////////////////////////////////////////////////////////
override suspend fun updateSources(sources: List<TleSource>) {
localSource.clearSources()
localSource.insertSources(sources)
}
override suspend fun getSources(): List<TleSource> {
return localSource.getSources()
}
}
@@ -22,4 +22,10 @@ interface Repository {
suspend fun updateTransmitters()
suspend fun getTransmittersByCatNum(catNum: Int): List<Transmitter>
////////////////////////////////////////////////////////////////////////////////////////////////
suspend fun updateSources(sources: List<TleSource>)
suspend fun getSources(): List<TleSource>
}