fix: parsing music playlist video count
This commit is contained in:
parent
e96d494505
commit
0677fd487e
3 changed files with 16 additions and 9 deletions
2
Justfile
2
Justfile
|
|
@ -28,7 +28,7 @@ testintl:
|
||||||
)
|
)
|
||||||
for YT_LANG in "${LANGUAGES[@]}"; do \
|
for YT_LANG in "${LANGUAGES[@]}"; do \
|
||||||
echo "---TESTS FOR $YT_LANG ---"; \
|
echo "---TESTS FOR $YT_LANG ---"; \
|
||||||
YT_LANG="$YT_LANG" cargo test --test youtube -- --skip music_artist --skip music_playlist --skip get_video_details --skip startpage; \
|
YT_LANG="$YT_LANG" cargo test --test youtube -- --skip get_video_details --skip startpage; \
|
||||||
echo "--- $YT_LANG COMPLETED ---"; \
|
echo "--- $YT_LANG COMPLETED ---"; \
|
||||||
sleep 10; \
|
sleep 10; \
|
||||||
done
|
done
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use crate::{
|
||||||
error::{Error, ExtractionError},
|
error::{Error, ExtractionError},
|
||||||
model::{paginator::Paginator, AlbumId, ChannelId, MusicAlbum, MusicPlaylist, TrackItem},
|
model::{paginator::Paginator, AlbumId, ChannelId, MusicAlbum, MusicPlaylist, TrackItem},
|
||||||
serializer::MapResult,
|
serializer::MapResult,
|
||||||
util::{self, TryRemove},
|
util::{self, TryRemove, DOT_SEPARATOR},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
|
|
@ -160,14 +160,19 @@ impl MapResponse<MusicPlaylist> for response::MusicPlaylist {
|
||||||
.try_swap_remove(0)
|
.try_swap_remove(0)
|
||||||
.map(|cont| cont.next_continuation_data.continuation);
|
.map(|cont| cont.next_continuation_data.continuation);
|
||||||
|
|
||||||
let track_count = match ctoken {
|
let track_count = if ctoken.is_some() {
|
||||||
Some(_) => self.header.as_ref().and_then(|h| {
|
self.header.as_ref().and_then(|h| {
|
||||||
h.music_detail_header_renderer
|
let parts = h
|
||||||
|
.music_detail_header_renderer
|
||||||
.second_subtitle
|
.second_subtitle
|
||||||
.first()
|
.split(|p| p == DOT_SEPARATOR)
|
||||||
.and_then(|txt| util::parse_numeric::<u64>(txt).ok())
|
.collect::<Vec<_>>();
|
||||||
}),
|
parts
|
||||||
None => Some(map_res.c.len() as u64),
|
.get(if parts.len() > 2 { 1 } else { 0 })
|
||||||
|
.and_then(|txt| util::parse_numeric::<u64>(&txt[0]).ok())
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Some(map_res.c.len() as u64)
|
||||||
};
|
};
|
||||||
|
|
||||||
let related_ctoken = music_contents
|
let related_ctoken = music_contents
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,8 @@ pub(crate) struct HeaderRenderer {
|
||||||
/// Missing on artist_tracks view.
|
/// Missing on artist_tracks view.
|
||||||
///
|
///
|
||||||
/// `"64 songs", " • ", "3 hours, 40 minutes"`
|
/// `"64 songs", " • ", "3 hours, 40 minutes"`
|
||||||
|
///
|
||||||
|
/// `"1B views", " • ", "200 songs", " • ", "6+ hours"`
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde_as(as = "Text")]
|
#[serde_as(as = "Text")]
|
||||||
pub second_subtitle: Vec<String>,
|
pub second_subtitle: Vec<String>,
|
||||||
|
|
|
||||||
Reference in a new issue