fix(playlist): usage of new youtube api format for playlists/albums. Credits to LlinksRechts @ https://github.com/vfsfitvnm/ViMusic/pull/1654.
This commit is contained in:
parent
e6bdd6c114
commit
d7b33ed329
7 changed files with 35 additions and 11 deletions
|
@ -67,7 +67,7 @@ fun AlbumScreen(browseId: String) {
|
|||
.collect { (currentAlbum, tabIndex) ->
|
||||
album = currentAlbum
|
||||
|
||||
if (albumPage == null && (currentAlbum?.timestamp == null || tabIndex == 1)) {
|
||||
if (albumPage == null && (currentAlbum?.timestamp == null || currentAlbum.title == null || tabIndex == 1)) {
|
||||
withContext(Dispatchers.IO) {
|
||||
Innertube.albumPage(BrowseBody(browseId = browseId))
|
||||
?.onSuccess { currentAlbumPage ->
|
||||
|
|
|
@ -13,6 +13,7 @@ data class BrowseResponse(
|
|||
@Serializable
|
||||
data class Contents(
|
||||
val singleColumnBrowseResultsRenderer: Tabs?,
|
||||
val twoColumnBrowseResultsRenderer: TwoColResults?,
|
||||
val sectionListRenderer: SectionListRenderer?,
|
||||
)
|
||||
|
||||
|
|
|
@ -7,7 +7,9 @@ data class MusicShelfRenderer(
|
|||
val bottomEndpoint: NavigationEndpoint?,
|
||||
val contents: List<Content>?,
|
||||
val continuations: List<Continuation>?,
|
||||
val title: Runs?
|
||||
val title: Runs?,
|
||||
val thumbnail: ThumbnailRenderer?,
|
||||
val subtitle: Runs?
|
||||
) {
|
||||
@Serializable
|
||||
data class Content(
|
||||
|
@ -23,7 +25,7 @@ data class MusicShelfRenderer(
|
|||
?: emptyList()) to
|
||||
(musicResponsiveListItemRenderer
|
||||
?.flexColumns
|
||||
?.lastOrNull()
|
||||
?.getOrNull(1)
|
||||
?.musicResponsiveListItemFlexColumnRenderer
|
||||
?.text
|
||||
?.splitBySeparator()
|
||||
|
|
|
@ -16,6 +16,8 @@ data class SectionListRenderer(
|
|||
val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
|
||||
@JsonNames("musicPlaylistShelfRenderer")
|
||||
val musicShelfRenderer: MusicShelfRenderer?,
|
||||
val musicResponsiveHeaderRenderer: MusicShelfRenderer?,
|
||||
val musicPlaylistShelfRenderer: MusicShelfRenderer?,
|
||||
val gridRenderer: GridRenderer?,
|
||||
val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?,
|
||||
) {
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package it.vfsfitvnm.innertube.models
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class TwoColResults(
|
||||
val secondaryContents: SecondaryContents?,
|
||||
val tabs: List<Tabs.Tab>?
|
||||
) {
|
||||
@Serializable
|
||||
data class SecondaryContents(
|
||||
val sectionListRenderer: SectionListRenderer?
|
||||
)
|
||||
}
|
|
@ -37,7 +37,7 @@ suspend fun <T : Innertube.Item> Innertube.itemsPage(
|
|||
|
||||
itemsPageFromMusicShelRendererOrGridRenderer(
|
||||
musicShelfRenderer = sectionListRendererContent
|
||||
?.musicShelfRenderer,
|
||||
?.musicPlaylistShelfRenderer,
|
||||
gridRenderer = sectionListRendererContent
|
||||
?.gridRenderer,
|
||||
fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer,
|
||||
|
|
|
@ -16,26 +16,31 @@ import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable
|
|||
suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable {
|
||||
val response = client.post(browse) {
|
||||
setBody(body)
|
||||
mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),musicCarouselShelfRenderer.contents.$musicTwoRowItemRendererMask),header.musicDetailHeaderRenderer(title,subtitle,thumbnail),microformat")
|
||||
mask("contents.twoColumnBrowseResultsRenderer(tabs.tabRenderer.content.sectionListRenderer.contents.musicResponsiveHeaderRenderer(title,subtitle,thumbnail),secondaryContents.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),musicCarouselShelfRenderer.contents.$musicTwoRowItemRendererMask)),microformat")
|
||||
}.body<BrowseResponse>()
|
||||
|
||||
val musicDetailHeaderRenderer = response
|
||||
.header
|
||||
?.musicDetailHeaderRenderer
|
||||
|
||||
val sectionListRendererContents = response
|
||||
.contents
|
||||
?.singleColumnBrowseResultsRenderer
|
||||
?.twoColumnBrowseResultsRenderer
|
||||
?.tabs
|
||||
?.firstOrNull()
|
||||
?.tabRenderer
|
||||
?.content
|
||||
?.sectionListRenderer
|
||||
?.contents
|
||||
?.firstOrNull()
|
||||
?.musicResponsiveHeaderRenderer
|
||||
|
||||
val sectionListRendererContents = response
|
||||
.contents
|
||||
?.twoColumnBrowseResultsRenderer
|
||||
?.secondaryContents
|
||||
?.sectionListRenderer
|
||||
?.contents
|
||||
|
||||
val musicShelfRenderer = sectionListRendererContents
|
||||
?.firstOrNull()
|
||||
?.musicShelfRenderer
|
||||
?.musicPlaylistShelfRenderer
|
||||
|
||||
val musicCarouselShelfRenderer = sectionListRendererContents
|
||||
?.getOrNull(1)
|
||||
|
|
Loading…
Add table
Reference in a new issue