mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-11 07:29:14 +01:00
library: cover starred/downloaded shuffle in tests, dedupe list predicate
This commit is contained in:
@@ -101,8 +101,9 @@ fun ScrollToTopOnRequest(
|
|||||||
) {
|
) {
|
||||||
var previous by remember { mutableStateOf(request) }
|
var previous by remember { mutableStateOf(request) }
|
||||||
LaunchedEffect(request) {
|
LaunchedEffect(request) {
|
||||||
if (request != null && previous != null && request != previous) state.animateScrollToItem(0)
|
val stale = previous
|
||||||
previous = request
|
previous = request
|
||||||
|
if (request != null && stale != null && request != stale) state.animateScrollToItem(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +114,8 @@ fun ScrollToTopOnRequest(
|
|||||||
) {
|
) {
|
||||||
var previous by remember { mutableStateOf(request) }
|
var previous by remember { mutableStateOf(request) }
|
||||||
LaunchedEffect(request) {
|
LaunchedEffect(request) {
|
||||||
if (request != null && previous != null && request != previous) state.animateScrollToItem(0)
|
val stale = previous
|
||||||
previous = request
|
previous = request
|
||||||
|
if (request != null && stale != null && request != stale) state.animateScrollToItem(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,10 +148,6 @@ fun HomeListScreen(
|
|||||||
val resources = LocalResources.current
|
val resources = LocalResources.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val songListState = rememberLazyListState()
|
val songListState = rememberLazyListState()
|
||||||
val isSongList =
|
|
||||||
request.downloaded == OfflineListKind.Songs ||
|
|
||||||
request.section == HomeSection.RecentlyStarredSongs ||
|
|
||||||
request.genre != null
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
topBar = {
|
topBar = {
|
||||||
@@ -163,7 +159,7 @@ fun HomeListScreen(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier =
|
modifier =
|
||||||
if (isSongList) {
|
if (onShuffle != null) {
|
||||||
Modifier.clickable(onClickLabel = stringResource(R.string.scroll_to_top)) {
|
Modifier.clickable(onClickLabel = stringResource(R.string.scroll_to_top)) {
|
||||||
scope.launch { songListState.animateScrollToItem(0) }
|
scope.launch { songListState.animateScrollToItem(0) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2413,6 +2413,40 @@ class PlaybackControllerTest {
|
|||||||
assertEquals(setOf("r1", "r2"), handle.items.map { it.id }.toSet())
|
assertEquals(setOf("r1", "r2"), handle.items.map { it.id }.toSet())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shuffleStarredPlaysOnlyStarredSongs() {
|
||||||
|
seedStarred()
|
||||||
|
|
||||||
|
controller.shuffleStarred(1)
|
||||||
|
await { controller.state.value.item != null && controller.state.value.shuffle }
|
||||||
|
|
||||||
|
assertTrue(controller.state.value.shuffle)
|
||||||
|
assertEquals(
|
||||||
|
QueueKind.Starred,
|
||||||
|
controller.state.value.context
|
||||||
|
?.kind,
|
||||||
|
)
|
||||||
|
assertEquals(setOf("t1", "t2"), handle.items.map { it.id }.toSet())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shuffleDownloadedPlaysOnlyDownloadedSongs() {
|
||||||
|
seedAlbum(3, sourceId = 1)
|
||||||
|
markDownloaded(1, "s1")
|
||||||
|
markDownloaded(1, "s3")
|
||||||
|
|
||||||
|
controller.shuffleDownloaded(1)
|
||||||
|
await { controller.state.value.item != null && controller.state.value.shuffle }
|
||||||
|
|
||||||
|
assertTrue(controller.state.value.shuffle)
|
||||||
|
assertEquals(
|
||||||
|
QueueKind.Downloaded,
|
||||||
|
controller.state.value.context
|
||||||
|
?.kind,
|
||||||
|
)
|
||||||
|
assertEquals(setOf("s1", "s3"), handle.items.map { it.id }.toSet())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun artistQueueRowsFollowTheFlatShuffleIdOrder() {
|
fun artistQueueRowsFollowTheFlatShuffleIdOrder() {
|
||||||
seedArtist()
|
seedArtist()
|
||||||
@@ -3142,6 +3176,19 @@ class PlaybackControllerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun seedStarred() {
|
||||||
|
runBlocking {
|
||||||
|
db.sourcesDao().upsertSource(Source(1, "source 1", "http://localhost:1", true, 1))
|
||||||
|
db.libraryDao().upsertSongs(
|
||||||
|
listOf(
|
||||||
|
Song(1, "t1", "al1", "ar1", "Star 1", "Album", "Artist", 100, 1, 1, 1_700_000_000L, null),
|
||||||
|
Song(1, "t2", "al1", "ar1", "Star 2", "Album", "Artist", 100, 2, 1, 1_700_000_000L, null),
|
||||||
|
Song(1, "n1", "al1", "ar1", "Plain 1", "Album", "Artist", 100, 3, 1, null, null),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun seedAlbumTracks(
|
private fun seedAlbumTracks(
|
||||||
albumId: String,
|
albumId: String,
|
||||||
count: Int,
|
count: Int,
|
||||||
|
|||||||
Reference in New Issue
Block a user