feat: add artist radio

This commit is contained in:
ThetaDev 2023-01-25 01:02:46 +01:00
parent fe76b2ac66
commit 53bdd5f0d2
16 changed files with 56 additions and 5 deletions

View file

@ -166,7 +166,7 @@ fn map_artist_page(
lang: crate::param::Language,
skip_extendables: bool,
) -> Result<MapResult<(MusicArtist, Vec<String>)>, ExtractionError> {
// dbg!(&self);
// dbg!(&res);
let header = res.header.music_immersive_header_renderer;
@ -272,6 +272,13 @@ fn map_artist_page(
.map(|m| m.as_str().to_owned())
});
let radio_id = header.start_radio_button.and_then(|b| {
b.button_renderer
.navigation_endpoint
.watch_endpoint
.and_then(|w| w.playlist_id)
});
Ok(MapResult {
c: (
MusicArtist {
@ -292,6 +299,7 @@ fn map_artist_page(
similar_artists: mapped.c.artists,
tracks_playlist_id,
videos_playlist_id,
radio_id,
},
album_page_params,
),

View file

@ -5,7 +5,7 @@ use crate::serializer::text::Text;
use super::{
music_item::{
Grid, ItemSection, MusicThumbnailRenderer, SimpleHeader, SingleColumnBrowseResult,
Button, Grid, ItemSection, MusicThumbnailRenderer, SimpleHeader, SingleColumnBrowseResult,
},
SectionList, Tab,
};
@ -41,6 +41,9 @@ pub(crate) struct MusicHeaderRenderer {
#[serde(default)]
#[serde_as(as = "DefaultOnError")]
pub share_endpoint: Option<ShareEndpoint>,
#[serde(default)]
#[serde_as(as = "DefaultOnError")]
pub start_radio_button: Option<Button>,
}
#[derive(Debug, Deserialize)]

View file

@ -320,14 +320,14 @@ pub(crate) struct MusicCarouselShelfHeader {
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MusicCarouselShelfHeaderRenderer {
pub more_content_button: Option<MoreContentButton>,
pub more_content_button: Option<Button>,
#[serde(default)]
pub title: TextComponents,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct MoreContentButton {
pub(crate) struct Button {
pub button_renderer: ButtonRenderer,
}

View file

@ -3649,4 +3649,5 @@ MusicArtist(
],
tracks_playlist_id: Some("OLAK5uy_mHzt_lZ0Vdnv3NAqvCLQw5CiYe0q96iBs"),
videos_playlist_id: Some("OLAK5uy_k9FAxC8Xb8T0KqP5wFbn8KsP3VkUjb334"),
radio_id: Some("RDEM_Ktu-TilkxtLvmc9wX1MLQ"),
)

View file

@ -152,4 +152,5 @@ MusicArtist(
similar_artists: [],
tracks_playlist_id: None,
videos_playlist_id: None,
radio_id: None,
)

View file

@ -1387,4 +1387,5 @@ MusicArtist(
],
tracks_playlist_id: Some("OLAK5uy_mHzt_lZ0Vdnv3NAqvCLQw5CiYe0q96iBs"),
videos_playlist_id: Some("OLAK5uy_k9FAxC8Xb8T0KqP5wFbn8KsP3VkUjb334"),
radio_id: Some("RDEM_Ktu-TilkxtLvmc9wX1MLQ"),
)

View file

@ -966,4 +966,5 @@ MusicArtist(
],
tracks_playlist_id: Some("OLAK5uy_m6843aeUO05cz_t1seql2dQ9eUgwyuOXI"),
videos_playlist_id: None,
radio_id: Some("RDEMd8PZIv9CPsvvEDbo_pUD4w"),
)

View file

@ -1885,4 +1885,5 @@ MusicArtist(
],
tracks_playlist_id: Some("OLAK5uy_nGjQIyWU6PsJZdJst7WOJHVZ7N7DupP04"),
videos_playlist_id: Some("OLAK5uy_mulXOv4f1FNKi1-0zgY3YouLDTXX2wLu4"),
radio_id: Some("RDEMzMxPuaGyofN40xcgHuZAbw"),
)

View file

@ -626,4 +626,5 @@ MusicArtist(
],
tracks_playlist_id: None,
videos_playlist_id: Some("OLAK5uy_lmH3iVq6lqjsnLkBWzpvRTh0DidLzbU-I"),
radio_id: Some("RDEMYsk_DTFHAng1G7n5toi_oA"),
)

View file

@ -1111,6 +1111,8 @@ pub struct MusicArtist {
pub tracks_playlist_id: Option<String>,
/// ID of the playlist containging the artist's videos
pub videos_playlist_id: Option<String>,
/// ID of the artist radio
pub radio_id: Option<String>,
}
/// YouTube Music search result