From b0540d2c573c1b05694ba7ebd2cf8e3939444c4a Mon Sep 17 00:00:00 2001 From: robrobinbin <> Date: Wed, 13 Jan 2021 00:10:06 +0100 Subject: [PATCH] Rich flairs --- src/post.rs | 6 +++--- src/utils.rs | 36 +++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/post.rs b/src/post.rs index f6199d1..9100e0c 100644 --- a/src/post.rs +++ b/src/post.rs @@ -83,7 +83,7 @@ async fn parse_post(json: &serde_json::Value) -> Post { body: rewrite_url(&val(post, "selftext_html")), author: val(post, "author"), author_flair: Flair{ - flair_parts: parse_rich_flair(post["data"]["author_flair_richtext"].as_array().unwrap()), + flair_parts: parse_rich_flair(post["data"]["author_flair_richtext"].as_array()), background_color: val(post, "author_flair_background_color"), foreground_color: val(post, "author_flair_text_color"), }, @@ -93,7 +93,7 @@ async fn parse_post(json: &serde_json::Value) -> Post { post_type, thumbnail: format_url(val(post, "thumbnail").as_str()), flair: Flair{ - flair_parts: parse_rich_flair(post["data"]["link_flair_richtext"].as_array().unwrap()), + flair_parts: parse_rich_flair(post["data"]["link_flair_richtext"].as_array()), background_color: val(post, "link_flair_background_color"), foreground_color: if val(post, "link_flair_text_color") == "dark" { "black".to_string() @@ -146,7 +146,7 @@ async fn parse_comments(json: &serde_json::Value) -> Vec { time: OffsetDateTime::from_unix_timestamp(unix_time).format("%b %d %Y %H:%M UTC"), replies, flair: Flair{ - flair_parts: parse_rich_flair(comment["data"]["author_flair_richtext"].as_array().unwrap()), + flair_parts: parse_rich_flair(comment["data"]["author_flair_richtext"].as_array()), background_color: val(&comment, "author_flair_background_color"), foreground_color: val(&comment, "author_flair_text_color"), }, diff --git a/src/utils.rs b/src/utils.rs index b049e53..2524d16 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -195,22 +195,24 @@ pub async fn media(data: &serde_json::Value) -> (String, String) { (post_type.to_string(), url) } -pub fn parse_rich_flair(rich_flair: &Vec) -> Vec { +pub fn parse_rich_flair(rich_flair: Option<&Vec>) -> Vec { let mut result: Vec = Vec::new(); - for part in rich_flair { - let flair_part_type = part["e"].as_str().unwrap_or_default().to_string(); - let value = if flair_part_type == "text" { - part["t"].as_str().unwrap_or_default().to_string() - - } else if flair_part_type == "emoji" { - format_url(part["u"].as_str().unwrap_or_default()) - } else { - "".to_string() - }; - result.push(FlairPart { - flair_part_type, - value, - }); + if !rich_flair.is_none() { + for part in rich_flair.unwrap() { + let flair_part_type = part["e"].as_str().unwrap_or_default().to_string(); + let value = if flair_part_type == "text" { + part["t"].as_str().unwrap_or_default().to_string() + + } else if flair_part_type == "emoji" { + format_url(part["u"].as_str().unwrap_or_default()) + } else { + "".to_string() + }; + result.push(FlairPart { + flair_part_type, + value, + }); + } } result } @@ -269,7 +271,7 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec Result<(Vec