fix: parse channel subscriber/video count correctly
This commit is contained in:
parent
e7e389a316
commit
6035e6db4e
5 changed files with 27 additions and 21 deletions
|
|
@ -468,8 +468,9 @@ fn map_channel(
|
||||||
let subscriber_count = sub_part.and_then(|t| {
|
let subscriber_count = sub_part.and_then(|t| {
|
||||||
util::parse_large_numstr_or_warn::<u64>(t.as_str(), ctx.lang, &mut warnings)
|
util::parse_large_numstr_or_warn::<u64>(t.as_str(), ctx.lang, &mut warnings)
|
||||||
});
|
});
|
||||||
let video_count =
|
let video_count = vc_part.and_then(|t| {
|
||||||
vc_part.and_then(|t| util::parse_numeric_or_warn(t.as_str(), &mut warnings));
|
util::parse_large_numstr_or_warn(t.as_str(), ctx.lang, &mut warnings)
|
||||||
|
});
|
||||||
|
|
||||||
Channel {
|
Channel {
|
||||||
id: metadata.external_id,
|
id: metadata.external_id,
|
||||||
|
|
|
||||||
|
|
@ -140,10 +140,10 @@ impl MapResponse<Playlist> for response::Playlist {
|
||||||
.next()
|
.next()
|
||||||
.and_then(|r| r.metadata_parts.into_iter().next())
|
.and_then(|r| r.metadata_parts.into_iter().next())
|
||||||
.and_then(|p| match p {
|
.and_then(|p| match p {
|
||||||
response::MetadataPart::Text(_) => None,
|
response::MetadataPart::Text { .. } => None,
|
||||||
response::MetadataPart::AvatarStack {
|
response::MetadataPart::AvatarStack { avatar_stack } => {
|
||||||
avatar_stack_view_model,
|
ChannelId::try_from(avatar_stack.avatar_stack_view_model.text).ok()
|
||||||
} => ChannelId::try_from(avatar_stack_view_model.text).ok(),
|
}
|
||||||
});
|
});
|
||||||
// remove "by" prefix
|
// remove "by" prefix
|
||||||
if let Some(c) = channel.as_mut() {
|
if let Some(c) = channel.as_mut() {
|
||||||
|
|
|
||||||
|
|
@ -647,31 +647,36 @@ pub(crate) struct PhMetadataRow {
|
||||||
|
|
||||||
#[serde_as]
|
#[serde_as]
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(untagged)]
|
||||||
pub(crate) enum MetadataPart {
|
pub(crate) enum MetadataPart {
|
||||||
Text(#[serde_as(as = "AttributedText")] TextComponent),
|
Text {
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde_as(as = "AttributedText")]
|
||||||
AvatarStack {
|
text: TextComponent,
|
||||||
avatar_stack_view_model: TextComponentBox,
|
|
||||||
},
|
},
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
AvatarStack { avatar_stack: AvatarStackInner },
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub(crate) struct AvatarStackInner {
|
||||||
|
pub avatar_stack_view_model: TextComponentBox,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MetadataPart {
|
impl MetadataPart {
|
||||||
pub fn into_text_component(self) -> TextComponent {
|
pub fn into_text_component(self) -> TextComponent {
|
||||||
match self {
|
match self {
|
||||||
MetadataPart::Text(text_component) => text_component,
|
MetadataPart::Text { text } => text,
|
||||||
MetadataPart::AvatarStack {
|
MetadataPart::AvatarStack { avatar_stack } => avatar_stack.avatar_stack_view_model.text,
|
||||||
avatar_stack_view_model,
|
|
||||||
} => avatar_stack_view_model.text,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_str(&self) -> &str {
|
pub fn as_str(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
MetadataPart::Text(s) => s.as_str(),
|
MetadataPart::Text { text } => text.as_str(),
|
||||||
MetadataPart::AvatarStack {
|
MetadataPart::AvatarStack { avatar_stack } => {
|
||||||
avatar_stack_view_model,
|
avatar_stack.avatar_stack_view_model.text.as_str()
|
||||||
} => avatar_stack_view_model.text.as_str(),
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ Channel(
|
||||||
name: "EEVblog",
|
name: "EEVblog",
|
||||||
handle: Some("@EEVblog"),
|
handle: Some("@EEVblog"),
|
||||||
subscriber_count: Some(952000),
|
subscriber_count: Some(952000),
|
||||||
video_count: Some(2),
|
video_count: Some(2000),
|
||||||
avatar: [
|
avatar: [
|
||||||
Thumbnail(
|
Thumbnail(
|
||||||
url: "https://yt3.googleusercontent.com/ytc/AIdro_l17lYcTcRSydZeQK-RuiSfEeH5eX9m4irSNQj6109v5MQ=s72-c-k-c0x00ffffff-no-rj",
|
url: "https://yt3.googleusercontent.com/ytc/AIdro_l17lYcTcRSydZeQK-RuiSfEeH5eX9m4irSNQj6109v5MQ=s72-c-k-c0x00ffffff-no-rj",
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ Channel(
|
||||||
name: "EEVblog",
|
name: "EEVblog",
|
||||||
handle: Some("@EEVblog"),
|
handle: Some("@EEVblog"),
|
||||||
subscriber_count: Some(933000),
|
subscriber_count: Some(933000),
|
||||||
video_count: Some(19),
|
video_count: Some(1900),
|
||||||
avatar: [
|
avatar: [
|
||||||
Thumbnail(
|
Thumbnail(
|
||||||
url: "https://yt3.googleusercontent.com/ytc/AIdro_lagjGDfXbXlQXhznx3CDRitOBdxvebllQd_YP1ag=s72-c-k-c0x00ffffff-no-rj",
|
url: "https://yt3.googleusercontent.com/ytc/AIdro_lagjGDfXbXlQXhznx3CDRitOBdxvebllQd_YP1ag=s72-c-k-c0x00ffffff-no-rj",
|
||||||
|
|
|
||||||
Reference in a new issue