Fetch all songs in playlist

This commit is contained in:
vfsfitvnm
2022-10-03 16:11:12 +02:00
parent d0e9c7e6b9
commit 8612814387
3 changed files with 28 additions and 7 deletions

View File

@@ -47,6 +47,7 @@ import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
import it.vfsfitvnm.vimusic.ui.styling.px
import it.vfsfitvnm.vimusic.ui.views.SongItem
import it.vfsfitvnm.vimusic.utils.asMediaItem
import it.vfsfitvnm.vimusic.utils.completed
import it.vfsfitvnm.vimusic.utils.enqueue
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
@@ -168,8 +169,7 @@ fun LocalPlaylistSongList(
transaction {
runBlocking(Dispatchers.IO) {
withContext(Dispatchers.IO) {
// TODO: fetch all songs!
Innertube.playlistPage(BrowseBody(browseId = browseId))
Innertube.playlistPage(BrowseBody(browseId = browseId))?.completed()
}
}?.getOrNull()?.let { remotePlaylist ->
Database.clearPlaylist(playlistId)

View File

@@ -55,10 +55,10 @@ import it.vfsfitvnm.vimusic.ui.styling.shimmer
import it.vfsfitvnm.vimusic.ui.views.SongItem
import it.vfsfitvnm.vimusic.utils.asMediaItem
import it.vfsfitvnm.vimusic.utils.center
import it.vfsfitvnm.vimusic.utils.completed
import it.vfsfitvnm.vimusic.utils.enqueue
import it.vfsfitvnm.vimusic.utils.forcePlayAtIndex
import it.vfsfitvnm.vimusic.utils.forcePlayFromBeginning
import it.vfsfitvnm.vimusic.utils.produceSaveableOneShotState
import it.vfsfitvnm.vimusic.utils.produceSaveableState
import it.vfsfitvnm.vimusic.utils.secondary
import it.vfsfitvnm.youtubemusic.Innertube
@@ -77,13 +77,14 @@ fun PlaylistSongList(
val binder = LocalPlayerServiceBinder.current
val context = LocalContext.current
val playlistPageResult by produceSaveableOneShotState(
val playlistPageResult by produceSaveableState(
initialValue = null,
stateSaver = resultSaver(InnertubePlaylistOrAlbumPageSaver),
) {
if (value != null && value?.getOrNull()?.songsPage?.continuation == null) return@produceSaveableState
value = withContext(Dispatchers.IO) {
// TODO: fetch all songs!
Innertube.playlistPage(BrowseBody(browseId = browseId))
Innertube.playlistPage(BrowseBody(browseId = browseId))?.completed()
}
}
@@ -201,7 +202,7 @@ fun PlaylistSongList(
itemsIndexed(items = playlist.songsPage?.items ?: emptyList()) { index, song ->
SongItem(
title = song.info?.name,
authors = (song.authors ?: playlist.authors)?.joinToString("") { it.name ?: "" },
authors = song.authors?.joinToString("") { it.name ?: "" },
durationText = song.durationText,
onClick = {
playlist.songsPage?.items?.map(Innertube.SongItem::asMediaItem)?.let { mediaItems ->