mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +01:00
address review: save the selected tab by name and drop the dead songIds query
This commit is contained in:
@@ -104,9 +104,6 @@ interface LibraryDao {
|
||||
limit: Int,
|
||||
): List<String>
|
||||
|
||||
@Query("SELECT id FROM songs WHERE sourceId = :sourceId")
|
||||
suspend fun songIds(sourceId: Long): List<String>
|
||||
|
||||
@Query("SELECT id FROM songs WHERE sourceId = :sourceId AND id > :afterId ORDER BY id LIMIT :limit")
|
||||
suspend fun songIdsAfter(
|
||||
sourceId: Long,
|
||||
|
||||
@@ -46,7 +46,7 @@ fun appModule(
|
||||
single<PlayerConnection> { MediaSessionConnection(context.applicationContext, get()) }
|
||||
single { PlaybackController(get(), get(), get()) }
|
||||
viewModel { RootViewModel(get()) }
|
||||
viewModel { LibraryViewModel(get(), get(), get(), get()) }
|
||||
viewModel { LibraryViewModel(get(), get(), get(), get(), get()) }
|
||||
viewModel { SettingsViewModel(get(), get()) }
|
||||
viewModel { AddSourceViewModel(get(), get()) }
|
||||
viewModel { params -> AlbumDetailViewModel(get(), get(), get(), params.get()) }
|
||||
|
||||
@@ -186,14 +186,16 @@ fun LibraryRoute(
|
||||
viewModel: LibraryViewModel = koinViewModel(),
|
||||
playbackController: PlaybackController = koinInject(),
|
||||
) {
|
||||
var selectedTab by rememberSaveable { mutableStateOf(LibraryTab.Albums) }
|
||||
var previousTab by rememberSaveable { mutableStateOf(LibraryTab.Albums) }
|
||||
var selectedTabName by rememberSaveable { mutableStateOf(LibraryTab.Albums.name) }
|
||||
var previousTabName by rememberSaveable { mutableStateOf(LibraryTab.Albums.name) }
|
||||
val selectedTab = LibraryTab.entries.firstOrNull { it.name == selectedTabName } ?: LibraryTab.Albums
|
||||
val previousTab = LibraryTab.entries.firstOrNull { it.name == previousTabName } ?: LibraryTab.Albums
|
||||
val syncing by viewModel.syncing.collectAsStateWithLifecycle()
|
||||
val listTab = selectedTab.listTab()
|
||||
LaunchedEffect(selectedTab) {
|
||||
if (previousTab != selectedTab) {
|
||||
viewModel.setSearch(previousTab.listTab(), "")
|
||||
previousTab = selectedTab
|
||||
previousTabName = selectedTab.name
|
||||
}
|
||||
}
|
||||
val listQuery by viewModel.listQuery(listTab).collectAsStateWithLifecycle()
|
||||
@@ -208,7 +210,6 @@ fun LibraryRoute(
|
||||
val artwork = rememberArtworkColors(playbackController.coverArt(playback.item, thumbnail = true))
|
||||
val itemActions =
|
||||
ItemActions(
|
||||
playSong = { viewModel.playSong(it.id) },
|
||||
playAlbum = { viewModel.playAlbum(it.id) },
|
||||
shuffleAlbum = { viewModel.shuffleAlbum(it.id) },
|
||||
playPlaylist = { viewModel.playPlaylist(it.id) },
|
||||
@@ -219,7 +220,7 @@ fun LibraryRoute(
|
||||
)
|
||||
LibraryScreen(
|
||||
selectedTab = selectedTab,
|
||||
onTabSelected = { selectedTab = it },
|
||||
onTabSelected = { selectedTabName = it.name },
|
||||
syncing = syncing,
|
||||
bottomInset = bottomInset,
|
||||
artwork = artwork,
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.subtracks.data.repo.LibraryRepository
|
||||
import com.subtracks.data.repo.SourceRepository
|
||||
import com.subtracks.data.sync.SyncManager
|
||||
import com.subtracks.data.sync.SyncStatus
|
||||
import com.subtracks.playback.PlaybackController
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -35,6 +36,7 @@ class LibraryViewModel(
|
||||
private val libraryRepository: LibraryRepository,
|
||||
private val sourceRepository: SourceRepository,
|
||||
private val syncManager: SyncManager,
|
||||
private val playbackController: PlaybackController,
|
||||
private val userPreferences: UserPreferences,
|
||||
) : ViewModel() {
|
||||
private val listQueries: Map<LibraryListTab, StateFlow<ListQuery>> =
|
||||
|
||||
@@ -69,7 +69,7 @@ class SyncServiceTest {
|
||||
.allRows()
|
||||
.size,
|
||||
)
|
||||
assertEquals(2, db.libraryDao().songIds(1).size)
|
||||
assertEquals(2, songIds(1).size)
|
||||
assertEquals(
|
||||
1,
|
||||
db
|
||||
@@ -92,7 +92,7 @@ class SyncServiceTest {
|
||||
.allRows()
|
||||
.map { it.id },
|
||||
)
|
||||
assertEquals(listOf("s1"), db.libraryDao().songIds(1))
|
||||
assertEquals(listOf("s1"), songIds(1))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -113,7 +113,7 @@ class SyncServiceTest {
|
||||
|
||||
assertEquals(2, db.libraryDao().artistIds(1).size)
|
||||
assertEquals(1, db.libraryDao().albumIds(1).size)
|
||||
assertEquals(1, db.libraryDao().songIds(1).size)
|
||||
assertEquals(1, songIds(1).size)
|
||||
assertEquals(1, db.libraryDao().playlistIds(1).size)
|
||||
assertEquals(
|
||||
1,
|
||||
@@ -298,7 +298,7 @@ class SyncServiceTest {
|
||||
SyncService(db, source).sync()
|
||||
|
||||
assertEquals((1..5).map { "a$it" }, db.libraryDao().artistIds(1).sorted())
|
||||
assertEquals((1..5).map { "s$it" }, db.libraryDao().songIds(1).sorted())
|
||||
assertEquals((1..5).map { "s$it" }, songIds(1).sorted())
|
||||
|
||||
source.artists = (1..3).map { artist("a$it") }
|
||||
source.songs = (1..3).map { song("s$it") }
|
||||
@@ -306,7 +306,7 @@ class SyncServiceTest {
|
||||
SyncService(db, source).sync()
|
||||
|
||||
assertEquals((1..3).map { "a$it" }, db.libraryDao().artistIds(1).sorted())
|
||||
assertEquals((1..3).map { "s$it" }, db.libraryDao().songIds(1).sorted())
|
||||
assertEquals((1..3).map { "s$it" }, songIds(1).sorted())
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -485,7 +485,7 @@ class SyncServiceTest {
|
||||
SyncService(db, sourceOne).sync()
|
||||
|
||||
assertEquals(listOf("b1"), db.libraryDao().artistIds(2))
|
||||
assertEquals(listOf("s2"), db.libraryDao().songIds(2))
|
||||
assertEquals(listOf("s2"), songIds(2))
|
||||
assertEquals(listOf("p2"), db.libraryDao().playlistIds(2))
|
||||
assertEquals(
|
||||
1,
|
||||
@@ -587,6 +587,11 @@ class SyncServiceTest {
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun songIds(sourceId: Long): List<String> =
|
||||
db
|
||||
.libraryDao()
|
||||
.songIdsAfter(sourceId, "", Int.MAX_VALUE)
|
||||
|
||||
private suspend fun storedDiscKeys(): List<DiscKey> =
|
||||
db
|
||||
.libraryDao()
|
||||
|
||||
Reference in New Issue
Block a user