Rename youtube-music module to innertube and rewrite it
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
package it.vfsfitvnm.youtubemusic.requests
|
||||
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.post
|
||||
import io.ktor.client.request.setBody
|
||||
import it.vfsfitvnm.youtubemusic.Innertube
|
||||
import it.vfsfitvnm.youtubemusic.models.BrowseResponse
|
||||
import it.vfsfitvnm.youtubemusic.models.ContinuationResponse
|
||||
import it.vfsfitvnm.youtubemusic.models.GridRenderer
|
||||
import it.vfsfitvnm.youtubemusic.models.MusicResponsiveListItemRenderer
|
||||
import it.vfsfitvnm.youtubemusic.models.MusicShelfRenderer
|
||||
import it.vfsfitvnm.youtubemusic.models.MusicTwoRowItemRenderer
|
||||
import it.vfsfitvnm.youtubemusic.models.bodies.BrowseBody
|
||||
import it.vfsfitvnm.youtubemusic.models.bodies.ContinuationBody
|
||||
import it.vfsfitvnm.youtubemusic.utils.runCatchingNonCancellable
|
||||
|
||||
suspend fun <T : Innertube.Item> Innertube.itemsPage(
|
||||
body: BrowseBody,
|
||||
fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T? = { null },
|
||||
fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null },
|
||||
) = runCatchingNonCancellable {
|
||||
val response = client.post(browse) {
|
||||
setBody(body)
|
||||
// mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),gridRenderer(continuations,items.$musicTwoRowItemRendererMask))")
|
||||
}.body<BrowseResponse>()
|
||||
|
||||
val sectionListRendererContent = response
|
||||
.contents
|
||||
?.singleColumnBrowseResultsRenderer
|
||||
?.tabs
|
||||
?.firstOrNull()
|
||||
?.tabRenderer
|
||||
?.content
|
||||
?.sectionListRenderer
|
||||
?.contents
|
||||
?.firstOrNull()
|
||||
|
||||
itemsPageFromMusicShelRendererOrGridRenderer(
|
||||
musicShelfRenderer = sectionListRendererContent
|
||||
?.musicShelfRenderer,
|
||||
gridRenderer = sectionListRendererContent
|
||||
?.gridRenderer,
|
||||
fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer,
|
||||
fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer,
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun <T : Innertube.Item> Innertube.itemsPage(
|
||||
body: ContinuationBody,
|
||||
fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T? = { null },
|
||||
fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null },
|
||||
) = runCatchingNonCancellable {
|
||||
val response = client.post(browse) {
|
||||
setBody(body)
|
||||
// mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),gridRenderer(continuations,items.$musicTwoRowItemRendererMask))")
|
||||
}.body<ContinuationResponse>()
|
||||
|
||||
itemsPageFromMusicShelRendererOrGridRenderer(
|
||||
musicShelfRenderer = response
|
||||
.continuationContents
|
||||
?.musicShelfContinuation,
|
||||
gridRenderer = null,
|
||||
fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer,
|
||||
fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer,
|
||||
)
|
||||
}
|
||||
|
||||
private fun <T : Innertube.Item> itemsPageFromMusicShelRendererOrGridRenderer(
|
||||
musicShelfRenderer: MusicShelfRenderer?,
|
||||
gridRenderer: GridRenderer?,
|
||||
fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T?,
|
||||
fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T?,
|
||||
): Innertube.ItemsPage<T>? {
|
||||
return if (musicShelfRenderer != null) {
|
||||
Innertube.ItemsPage(
|
||||
continuation = musicShelfRenderer
|
||||
.continuations
|
||||
?.firstOrNull()
|
||||
?.nextContinuationData
|
||||
?.continuation,
|
||||
items = musicShelfRenderer
|
||||
.contents
|
||||
?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer)
|
||||
?.mapNotNull(fromMusicResponsiveListItemRenderer)
|
||||
)
|
||||
} else if (gridRenderer != null) {
|
||||
Innertube.ItemsPage(
|
||||
continuation = null,
|
||||
items = gridRenderer
|
||||
.items
|
||||
?.mapNotNull(GridRenderer.Item::musicTwoRowItemRenderer)
|
||||
?.mapNotNull(fromMusicTwoRowItemRenderer)
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user