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) ->
|
.collect { (currentAlbum, tabIndex) ->
|
||||||
album = currentAlbum
|
album = currentAlbum
|
||||||
|
|
||||||
if (albumPage == null && (currentAlbum?.timestamp == null || tabIndex == 1)) {
|
if (albumPage == null && (currentAlbum?.timestamp == null || currentAlbum.title == null || tabIndex == 1)) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
Innertube.albumPage(BrowseBody(browseId = browseId))
|
Innertube.albumPage(BrowseBody(browseId = browseId))
|
||||||
?.onSuccess { currentAlbumPage ->
|
?.onSuccess { currentAlbumPage ->
|
||||||
|
|
|
@ -13,6 +13,7 @@ data class BrowseResponse(
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Contents(
|
data class Contents(
|
||||||
val singleColumnBrowseResultsRenderer: Tabs?,
|
val singleColumnBrowseResultsRenderer: Tabs?,
|
||||||
|
val twoColumnBrowseResultsRenderer: TwoColResults?,
|
||||||
val sectionListRenderer: SectionListRenderer?,
|
val sectionListRenderer: SectionListRenderer?,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,9 @@ data class MusicShelfRenderer(
|
||||||
val bottomEndpoint: NavigationEndpoint?,
|
val bottomEndpoint: NavigationEndpoint?,
|
||||||
val contents: List<Content>?,
|
val contents: List<Content>?,
|
||||||
val continuations: List<Continuation>?,
|
val continuations: List<Continuation>?,
|
||||||
val title: Runs?
|
val title: Runs?,
|
||||||
|
val thumbnail: ThumbnailRenderer?,
|
||||||
|
val subtitle: Runs?
|
||||||
) {
|
) {
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Content(
|
data class Content(
|
||||||
|
@ -23,7 +25,7 @@ data class MusicShelfRenderer(
|
||||||
?: emptyList()) to
|
?: emptyList()) to
|
||||||
(musicResponsiveListItemRenderer
|
(musicResponsiveListItemRenderer
|
||||||
?.flexColumns
|
?.flexColumns
|
||||||
?.lastOrNull()
|
?.getOrNull(1)
|
||||||
?.musicResponsiveListItemFlexColumnRenderer
|
?.musicResponsiveListItemFlexColumnRenderer
|
||||||
?.text
|
?.text
|
||||||
?.splitBySeparator()
|
?.splitBySeparator()
|
||||||
|
|
|
@ -16,6 +16,8 @@ data class SectionListRenderer(
|
||||||
val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
|
val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?,
|
||||||
@JsonNames("musicPlaylistShelfRenderer")
|
@JsonNames("musicPlaylistShelfRenderer")
|
||||||
val musicShelfRenderer: MusicShelfRenderer?,
|
val musicShelfRenderer: MusicShelfRenderer?,
|
||||||
|
val musicResponsiveHeaderRenderer: MusicShelfRenderer?,
|
||||||
|
val musicPlaylistShelfRenderer: MusicShelfRenderer?,
|
||||||
val gridRenderer: GridRenderer?,
|
val gridRenderer: GridRenderer?,
|
||||||
val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?,
|
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(
|
itemsPageFromMusicShelRendererOrGridRenderer(
|
||||||
musicShelfRenderer = sectionListRendererContent
|
musicShelfRenderer = sectionListRendererContent
|
||||||
?.musicShelfRenderer,
|
?.musicPlaylistShelfRenderer,
|
||||||
gridRenderer = sectionListRendererContent
|
gridRenderer = sectionListRendererContent
|
||||||
?.gridRenderer,
|
?.gridRenderer,
|
||||||
fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer,
|
fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer,
|
||||||
|
|
|
@ -16,26 +16,31 @@ import it.vfsfitvnm.innertube.utils.runCatchingNonCancellable
|
||||||
suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable {
|
suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable {
|
||||||
val response = client.post(browse) {
|
val response = client.post(browse) {
|
||||||
setBody(body)
|
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>()
|
}.body<BrowseResponse>()
|
||||||
|
|
||||||
val musicDetailHeaderRenderer = response
|
val musicDetailHeaderRenderer = response
|
||||||
.header
|
|
||||||
?.musicDetailHeaderRenderer
|
|
||||||
|
|
||||||
val sectionListRendererContents = response
|
|
||||||
.contents
|
.contents
|
||||||
?.singleColumnBrowseResultsRenderer
|
?.twoColumnBrowseResultsRenderer
|
||||||
?.tabs
|
?.tabs
|
||||||
?.firstOrNull()
|
?.firstOrNull()
|
||||||
?.tabRenderer
|
?.tabRenderer
|
||||||
?.content
|
?.content
|
||||||
?.sectionListRenderer
|
?.sectionListRenderer
|
||||||
?.contents
|
?.contents
|
||||||
|
?.firstOrNull()
|
||||||
|
?.musicResponsiveHeaderRenderer
|
||||||
|
|
||||||
|
val sectionListRendererContents = response
|
||||||
|
.contents
|
||||||
|
?.twoColumnBrowseResultsRenderer
|
||||||
|
?.secondaryContents
|
||||||
|
?.sectionListRenderer
|
||||||
|
?.contents
|
||||||
|
|
||||||
val musicShelfRenderer = sectionListRendererContents
|
val musicShelfRenderer = sectionListRendererContents
|
||||||
?.firstOrNull()
|
?.firstOrNull()
|
||||||
?.musicShelfRenderer
|
?.musicPlaylistShelfRenderer
|
||||||
|
|
||||||
val musicCarouselShelfRenderer = sectionListRendererContents
|
val musicCarouselShelfRenderer = sectionListRendererContents
|
||||||
?.getOrNull(1)
|
?.getOrNull(1)
|
||||||
|
|
Loading…
Add table
Reference in a new issue