From 2a63aa94a9a1721c3d5fa75b6451a2fc3b297a3c Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 30 Aug 2020 16:00:20 +0100 Subject: [PATCH] Added TLE sources DAO, minor fixes --- .../dagger/modules/PersistenceModule.kt | 12 +++++++-- .../com/rtbishop/look4sat/data/TleSource.kt | 6 ++++- .../look4sat/persistence/LocalDataSource.kt | 27 ++++++++++++++++++- .../look4sat/persistence/LocalSource.kt | 13 +++++++++ .../look4sat/persistence/SatelliteDb.kt | 10 ++++++- .../look4sat/persistence/dao/EntriesDao.kt | 3 +++ .../look4sat/persistence/dao/SourcesDao.kt | 20 ++++++++++++++ .../persistence/dao/TransmittersDao.kt | 3 +++ .../look4sat/repo/DefaultRepository.kt | 22 ++++++++++++--- .../com/rtbishop/look4sat/repo/Repository.kt | 6 +++++ 10 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/look4sat/persistence/dao/SourcesDao.kt diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt index 2438fd07..46ab5320 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/modules/PersistenceModule.kt @@ -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 diff --git a/app/src/main/java/com/rtbishop/look4sat/data/TleSource.kt b/app/src/main/java/com/rtbishop/look4sat/data/TleSource.kt index 9d9aff94..68fcd86b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/data/TleSource.kt +++ b/app/src/main/java/com/rtbishop/look4sat/data/TleSource.kt @@ -1,3 +1,7 @@ package com.rtbishop.look4sat.data -data class TleSource(var url: String = String()) \ No newline at end of file +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "sources") +data class TleSource(@PrimaryKey var url: String = String()) \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/LocalDataSource.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/LocalDataSource.kt index 48cbf2ef..ec92e7e0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/persistence/LocalDataSource.kt +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/LocalDataSource.kt @@ -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) { @@ -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) { @@ -56,4 +63,22 @@ class LocalDataSource @Inject constructor( override suspend fun getTransmittersByCatNum(catNum: Int): List { return transmittersDao.getTransmittersByCatNum(catNum) } + + override suspend fun clearTransmitters() { + transmittersDao.clearTransmitters() + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + + override suspend fun insertSources(sources: List) { + sourcesDao.insertSources(sources) + } + + override suspend fun getSources(): List { + return sourcesDao.getSources() + } + + override suspend fun clearSources() { + sourcesDao.clearSources() + } } diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/LocalSource.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/LocalSource.kt index 9cb08e20..f10d8876 100644 --- a/app/src/main/java/com/rtbishop/look4sat/persistence/LocalSource.kt +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/LocalSource.kt @@ -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) + suspend fun clearEntries() + //////////////////////////////////////////////////////////////////////////////////////////////// suspend fun insertTransmitters(transmitters: List) suspend fun getTransmittersByCatNum(catNum: Int): List + + suspend fun clearTransmitters() + + //////////////////////////////////////////////////////////////////////////////////////////////// + + suspend fun insertSources(sources: List) + + suspend fun getSources(): List + + suspend fun clearSources() } diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/SatelliteDb.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/SatelliteDb.kt index 812def65..76250183 100644 --- a/app/src/main/java/com/rtbishop/look4sat/persistence/SatelliteDb.kt +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/SatelliteDb.kt @@ -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 } diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/dao/EntriesDao.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/EntriesDao.kt index 1c63b023..98f12c2b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/persistence/dao/EntriesDao.kt +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/EntriesDao.kt @@ -42,4 +42,7 @@ interface EntriesDao { @Query("UPDATE entries SET isSelected = 0") suspend fun clearEntriesSelection() + + @Query("DELETE FROM entries") + suspend fun clearEntries() } diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/dao/SourcesDao.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/SourcesDao.kt new file mode 100644 index 00000000..7a3a9777 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/SourcesDao.kt @@ -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) + + @Query("SELECT * FROM sources") + suspend fun getSources(): List + + @Query("DELETE FROM sources") + suspend fun clearSources() +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/persistence/dao/TransmittersDao.kt b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/TransmittersDao.kt index 2186fa34..eb64d883 100644 --- a/app/src/main/java/com/rtbishop/look4sat/persistence/dao/TransmittersDao.kt +++ b/app/src/main/java/com/rtbishop/look4sat/persistence/dao/TransmittersDao.kt @@ -14,4 +14,7 @@ interface TransmittersDao { @Query("SELECT * FROM transmitters WHERE isAlive = 1 and catNum = :catNum") suspend fun getTransmittersByCatNum(catNum: Int): List + + @Query("DELETE FROM transmitters") + suspend fun clearTransmitters() } diff --git a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt index 6c42ce74..f9d435e4 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/DefaultRepository.kt @@ -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) { - 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 { return localSource.getTransmittersByCatNum(catNum) } + + //////////////////////////////////////////////////////////////////////////////////////////////// + + override suspend fun updateSources(sources: List) { + localSource.clearSources() + localSource.insertSources(sources) + } + + override suspend fun getSources(): List { + return localSource.getSources() + } } 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 d138732d..b92fe4e2 100644 --- a/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt +++ b/app/src/main/java/com/rtbishop/look4sat/repo/Repository.kt @@ -22,4 +22,10 @@ interface Repository { suspend fun updateTransmitters() suspend fun getTransmittersByCatNum(catNum: Int): List + + //////////////////////////////////////////////////////////////////////////////////////////////// + + suspend fun updateSources(sources: List) + + suspend fun getSources(): List }