fix: parse channel subscriber/video count correctly

This commit is contained in:
ThetaDev 2025-06-18 15:35:47 +02:00
parent e7e389a316
commit 6035e6db4e
No known key found for this signature in database
GPG key ID: E319D3C5148D65B6
5 changed files with 27 additions and 21 deletions

View file

@ -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,

View file

@ -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() {

View file

@ -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(), }
} }
} }
} }

View file

@ -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",

View file

@ -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",