diff --git a/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt b/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt index 8f32b0c..ba2f39c 100644 --- a/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt +++ b/app/src/main/java/melody/offline/music/innertube/models/BrowseResponse.kt @@ -22,6 +22,7 @@ data class BrowseResponse( data class Contents( val singleColumnBrowseResultsRenderer: Tabs?, val sectionListRenderer: SectionListRenderer?, + val twoColumnBrowseResultsRenderer: TwoColumnBrowseResultsRenderer?, ) @Serializable @@ -29,6 +30,17 @@ data class BrowseResponse( val sectionListContinuation: SectionListContinuation? ) + @Serializable + data class TwoColumnBrowseResultsRenderer( + val secondaryContents : SecondaryContents?, + val tabs: List?, + ){ + @Serializable + data class SecondaryContents( + val sectionListRenderer: SectionListRenderer? + ) + } + @Serializable data class Header @OptIn(ExperimentalSerializationApi::class) constructor( @JsonNames("musicVisualHeaderRenderer") diff --git a/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt b/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt index 146ce5d..0839f39 100644 --- a/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt +++ b/app/src/main/java/melody/offline/music/innertube/models/SectionListRenderer.kt @@ -7,25 +7,36 @@ import kotlinx.serialization.json.JsonNames @OptIn(ExperimentalSerializationApi::class) @Serializable data class SectionListRenderer( - val contents: List?, - val continuations: List? + val contents: List?, val continuations: List? ) { @Serializable data class Content( - @JsonNames("musicImmersiveCarouselShelfRenderer") - val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?, - @JsonNames("musicPlaylistShelfRenderer") - val musicShelfRenderer: MusicShelfRenderer?, + @JsonNames("musicImmersiveCarouselShelfRenderer") val musicCarouselShelfRenderer: MusicCarouselShelfRenderer?, + @JsonNames("musicPlaylistShelfRenderer") val musicShelfRenderer: MusicShelfRenderer?, val gridRenderer: GridRenderer?, val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?, - @JsonNames("musicCardShelfRenderer") - val musicCardShelfRenderer: MusicCardShelfRenderer? + @JsonNames("musicCardShelfRenderer") val musicCardShelfRenderer: MusicCardShelfRenderer?, + val musicResponsiveHeaderRenderer: MusicResponsiveHeaderRenderer?, ) { @Serializable data class MusicDescriptionShelfRenderer( val description: Runs?, ) + + @Serializable + data class MusicResponsiveHeaderRenderer( + val title: Runs?, + val subtitle: Runs?, + val secondSubtitle: Runs?, + val thumbnail: ThumbnailRenderer?, + val description: Description? + ) { + @Serializable + data class Description( + val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer? + ) + } } } diff --git a/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt b/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt index e5738d6..c0698fe 100644 --- a/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt +++ b/app/src/main/java/melody/offline/music/innertube/requests/MoPlaylistPage.kt @@ -15,19 +15,41 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result() - val musicDetailHeaderRenderer = response - .header - ?.musicDetailHeaderRenderer + //6月24日发现,数据结构发生变化。 - val sectionListRendererContents = response +// val musicDetailHeaderRenderer = response +// .header +// ?.musicDetailHeaderRenderer + + val musicResponsiveHeaderRenderer = response .contents - ?.singleColumnBrowseResultsRenderer + ?.twoColumnBrowseResultsRenderer ?.tabs ?.firstOrNull() ?.tabRenderer ?.content ?.sectionListRenderer ?.contents + ?.firstOrNull() + ?.musicResponsiveHeaderRenderer + +// val sectionListRendererContents = response +// .contents +// ?.singleColumnBrowseResultsRenderer +// ?.tabs +// ?.firstOrNull() +// ?.tabRenderer +// ?.content +// ?.sectionListRenderer +// ?.contents + + val sectionListRendererContents = response + .contents + ?.twoColumnBrowseResultsRenderer + ?.secondaryContents + ?.sectionListRenderer + ?.contents + val musicShelfRenderer = sectionListRendererContents ?.firstOrNull() @@ -79,7 +101,7 @@ suspend fun Innertube.moPlaylistPage(browseId: String): Result