From 79a62816ff62d94e5c706f45b1ce5971e5e58a81 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Wed, 23 Oct 2024 00:30:18 +0200 Subject: [PATCH] fix: update channel order tokens --- src/client/channel.rs | 34 ++++++++++++++++++++++--- src/param/mod.rs | 6 ++--- tests/youtube.rs | 59 +++++++++++++++++-------------------------- 3 files changed, 56 insertions(+), 43 deletions(-) diff --git a/src/client/channel.rs b/src/client/channel.rs index cd29b87..93bd602 100644 --- a/src/client/channel.rs +++ b/src/client/channel.rs @@ -631,7 +631,33 @@ fn order_ctoken( ) -> String { let mut pb_tab = ProtoBuilder::new(); pb_tab.string(2, target_id); - pb_tab.varint(3, order as u64); + + match tab { + ChannelVideoTab::Videos => match order { + ChannelOrder::Latest => { + pb_tab.varint(3, 1); + pb_tab.varint(4, 4); + } + ChannelOrder::Popular => { + pb_tab.varint(3, 2); + pb_tab.varint(4, 2); + } + ChannelOrder::Oldest => { + pb_tab.varint(3, 4); + pb_tab.varint(4, 5); + } + }, + ChannelVideoTab::Shorts => match order { + ChannelOrder::Latest => pb_tab.varint(4, 4), + ChannelOrder::Popular => pb_tab.varint(4, 2), + ChannelOrder::Oldest => pb_tab.varint(4, 5), + }, + ChannelVideoTab::Live => match order { + ChannelOrder::Latest => pb_tab.varint(5, 12), + ChannelOrder::Popular => pb_tab.varint(5, 14), + ChannelOrder::Oldest => pb_tab.varint(5, 13), + }, + } let mut pb_3 = ProtoBuilder::new(); pb_3.embedded(tab.order_ctoken_id(), pb_tab); @@ -802,7 +828,7 @@ mod tests { ChannelOrder::Popular, "\n$6461d7c8-0000-2040-87aa-089e0827e420", ); - assert_eq!(videos_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXg2S2hJbUNpUTJORFl4WkRkak9DMHdNREF3TFRJd05EQXRPRGRoWVMwd09EbGxNRGd5TjJVME1qQVlBZyUzRCUzRA%3D%3D"); + assert_eq!(videos_popular_token, "4qmFsgJgEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaRDhnWXdHaTU2TEJJbUNpUTJORFl4WkRkak9DMHdNREF3TFRJd05EQXRPRGRoWVMwd09EbGxNRGd5TjJVME1qQVlBaUFD"); let shorts_popular_token = order_ctoken( channel_id, @@ -810,7 +836,7 @@ mod tests { ChannelOrder::Popular, "\n$64679ffb-0000-26b3-a1bd-582429d2c794", ); - assert_eq!(shorts_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXhTS2hJbUNpUTJORFkzT1dabVlpMHdNREF3TFRJMllqTXRZVEZpWkMwMU9ESTBNamxrTW1NM09UUVlBZyUzRCUzRA%3D%3D"); + assert_eq!(shorts_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXhTS2hJbUNpUTJORFkzT1dabVlpMHdNREF3TFRJMllqTXRZVEZpWkMwMU9ESTBNamxrTW1NM09UUWdBZyUzRCUzRA%3D%3D"); let live_popular_token = order_ctoken( channel_id, @@ -818,7 +844,7 @@ mod tests { ChannelOrder::Popular, "\n$64693069-0000-2a1e-8c7d-582429bd5ba8", ); - assert_eq!(live_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXh5S2hJbUNpUTJORFk1TXpBMk9TMHdNREF3TFRKaE1XVXRPR00zWkMwMU9ESTBNamxpWkRWaVlUZ1lBZyUzRCUzRA%3D%3D"); + assert_eq!(live_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXh5S2hJbUNpUTJORFk1TXpBMk9TMHdNREF3TFRKaE1XVXRPR00zWkMwMU9ESTBNamxpWkRWaVlUZ29EZyUzRCUzRA%3D%3D"); } #[test] diff --git a/src/param/mod.rs b/src/param/mod.rs index 920da45..f0dd293 100644 --- a/src/param/mod.rs +++ b/src/param/mod.rs @@ -27,11 +27,11 @@ pub enum ChannelVideoTab { pub enum ChannelOrder { /// Order videos with the latest upload date first (default) #[default] - Latest = 1, + Latest, // video 3=1,4=4; shorts 4=4; live 5=12 /// Order videos with the highest number of views first - Popular = 2, + Popular, // video 3=2,4=2; shorts 4=2; live 5=14 /// Order videos with the earliest upload date first - Oldest = 4, + Oldest, // video 3=4,4=5; shorts 4=5; live 5=13 } impl ChannelVideoTab { diff --git a/tests/youtube.rs b/tests/youtube.rs index 0f247e2..d0b5cb4 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -1968,46 +1968,33 @@ async fn music_search_videos(rp: RustyPipe, unlocalized: bool) { } #[rstest] -#[case::main(false)] -#[case::videos(true)] #[tokio::test] -async fn music_search_episode(rp: RustyPipe, #[case] videos: bool) { +async fn music_search_episode(rp: RustyPipe) { let query = "Blond - Da muss man dabei gewesen sein: Das Hörspiel - Fall #1"; let track_id = "Zq_-LDy7AgE"; - let track = if videos { - let items = rp - .query() - .music_search_videos(query) - .await - .unwrap() - .items - .items; - items.iter().find(|a| a.id == track_id).cloned() - } else { - let items = rp - .query() - .music_search_main(query) - .await - .unwrap() - .items - .items; - items - .iter() - .find_map(|itm| { - if let MusicItem::Track(track) = itm { - if track.id == track_id { - Some(track) - } else { - None - } + let items = rp + .query() + .music_search_main(query) + .await + .unwrap() + .items + .items; + let track = items + .iter() + .find_map(|itm| { + if let MusicItem::Track(track) = itm { + if track.id == track_id { + Some(track) } else { None } - }) - .cloned() - } - .expect("could not find episode"); + } else { + None + } + }) + .cloned() + .expect("could not find episode"); assert_eq!(track.artists.len(), 1); let track_artist = &track.artists[0]; @@ -2015,9 +2002,9 @@ async fn music_search_episode(rp: RustyPipe, #[case] videos: bool) { track.name, "Blond - Da muss man dabei gewesen sein: Das Hörspiel - Fall #1" ); - assert_eq!(track_artist.name, "BLOND_OFFICIAL"); - assert_eq!(track_artist.id.as_deref(), Some("UC8SmM4bue6bKHT4p-_YFZHQ")); - assert_eq!(track.artist_id.as_deref(), Some("UC8SmM4bue6bKHT4p-_YFZHQ")); + assert_eq!(track_artist.name, "Da muss man dabei gewesen sein"); + assert_eq!(track_artist.id.as_deref(), None); + assert_eq!(track.artist_id.as_deref(), None); assert!(!track.cover.is_empty(), "got no cover"); assert!(track.is_video); }