WIP: add music_details
This commit is contained in:
parent
9b6c952fd3
commit
556575f5ff
9 changed files with 28554 additions and 0 deletions
|
|
@ -4,6 +4,7 @@ pub(crate) mod response;
|
|||
|
||||
mod channel;
|
||||
mod music_artist;
|
||||
mod music_details;
|
||||
mod music_playlist;
|
||||
mod music_search;
|
||||
mod pagination;
|
||||
|
|
|
|||
69
src/client/music_details.rs
Normal file
69
src/client/music_details.rs
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
use serde::Serialize;
|
||||
|
||||
use crate::{
|
||||
error::{Error, ExtractionError},
|
||||
model::MusicDetails,
|
||||
param::Language,
|
||||
serializer::MapResult,
|
||||
};
|
||||
|
||||
use super::{response, ClientType, MapResponse, RustyPipeQuery, YTContext};
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
struct QMusicDetails<'a> {
|
||||
context: YTContext<'a>,
|
||||
// YouTube video ID
|
||||
video_id: &'a str,
|
||||
enable_persistent_playlist_panel: bool,
|
||||
is_audio_only: bool,
|
||||
tuner_setting_value: &'a str,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
struct QRadio<'a> {
|
||||
context: YTContext<'a>,
|
||||
playlist_id: &'a str,
|
||||
params: &'a str,
|
||||
enable_persistent_playlist_panel: bool,
|
||||
is_audio_only: bool,
|
||||
tuner_setting_value: &'a str,
|
||||
}
|
||||
|
||||
impl RustyPipeQuery {
|
||||
pub async fn music_radio(&self, radio_id: &str) -> Result<MusicDetails, Error> {
|
||||
let context = self.get_context(ClientType::DesktopMusic, true, None).await;
|
||||
let request_body = QRadio {
|
||||
context,
|
||||
playlist_id: radio_id,
|
||||
params: "wAEB8gECeAE%3D",
|
||||
enable_persistent_playlist_panel: true,
|
||||
is_audio_only: true,
|
||||
tuner_setting_value: "AUTOMIX_SETTING_NORMAL",
|
||||
};
|
||||
|
||||
self.execute_request::<response::MusicDetails, _, _>(
|
||||
ClientType::DesktopMusic,
|
||||
"music_radio",
|
||||
radio_id,
|
||||
"next",
|
||||
&request_body,
|
||||
)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
impl MapResponse<MusicDetails> for response::MusicDetails {
|
||||
fn map_response(
|
||||
self,
|
||||
id: &str,
|
||||
lang: Language,
|
||||
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
|
||||
) -> Result<MapResult<MusicDetails>, ExtractionError> {
|
||||
dbg!(&self);
|
||||
|
||||
Ok(MapResult {
|
||||
c: MusicDetails {},
|
||||
warnings: Vec::new(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
pub(crate) mod channel;
|
||||
pub(crate) mod music_artist;
|
||||
pub(crate) mod music_details;
|
||||
pub(crate) mod music_item;
|
||||
pub(crate) mod music_playlist;
|
||||
pub(crate) mod music_search;
|
||||
|
|
@ -14,6 +15,7 @@ pub(crate) mod video_item;
|
|||
pub(crate) use channel::Channel;
|
||||
pub(crate) use music_artist::MusicArtist;
|
||||
pub(crate) use music_artist::MusicArtistAlbums;
|
||||
pub(crate) use music_details::MusicDetails;
|
||||
pub(crate) use music_item::MusicContinuation;
|
||||
pub(crate) use music_playlist::MusicPlaylist;
|
||||
pub(crate) use music_search::MusicSearch;
|
||||
|
|
|
|||
6
src/client/response/music_details.rs
Normal file
6
src/client/response/music_details.rs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
use serde::Deserialize;
|
||||
|
||||
/// Response model for YouTube Music track details
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub(crate) struct MusicDetails {}
|
||||
Reference in a new issue