diff options
Diffstat (limited to 'src/display')
-rw-r--r-- | src/display/mod.rs | 153 |
1 files changed, 77 insertions, 76 deletions
diff --git a/src/display/mod.rs b/src/display/mod.rs index c011294..4faaf5b 100644 --- a/src/display/mod.rs +++ b/src/display/mod.rs @@ -197,84 +197,85 @@ impl Render for tw::events::Event { pub fn render_twete(twete_id: &TweetId, tweeter: &mut tw::TwitterCache) -> Vec<String> { let mut result = Vec::new(); let id_color = color::Fg(color::Rgb(180, 80, 40)); - let maybe_twete = tweeter.retrieve_tweet(twete_id).map(|x| x.clone()); - if maybe_twete.is_none() { - result.push(format!("No such tweet: {:?}", twete_id)); - return result; - } - let twete = maybe_twete.unwrap(); - // if we got the tweet, the API gave us the user too - let user = tweeter.retrieve_user(&twete.author_id).map(|x| x.clone()).unwrap(); - match twete.rt_tweet { - Some(ref rt_id) => { - // same for a retweet - let rt = tweeter.retrieve_tweet(&TweetId::Twitter(rt_id.to_owned())).unwrap().clone(); - // and its author - let rt_author = tweeter.retrieve_user(&rt.author_id).unwrap().clone(); - result.push(format!("{} id:{} (rt_id:{}){}{}", - id_color, rt.internal_id, twete.internal_id, - rt.reply_to_tweet.clone() - .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) - .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) - .unwrap_or(format!(" reply_to:twitter::{}", id)) - ) - .unwrap_or("".to_string()), - color::Fg(color::Reset) - )); - result.push(format!(" {}{}{} ({}@{}{}) via {}{}{} ({}@{}{}) RT:", - color_for(&rt_author.handle), rt_author.name, color::Fg(color::Reset), - color_for(&rt_author.handle), rt_author.handle, color::Fg(color::Reset), - color_for(&user.handle), user.name, color::Fg(color::Reset), - color_for(&user.handle), user.handle, color::Fg(color::Reset) - )); - } - None => { - result.push(format!("{} id:{}{}{}", - id_color, twete.internal_id, - twete.reply_to_tweet.clone() - .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) - .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) - .unwrap_or(format!(" reply_to:twitter::{}", id)) - ) - .unwrap_or("".to_string()), - color::Fg(color::Reset) - )); - result.push(format!(" {}{}{} ({}@{}{})", - color_for(&user.handle), user.name, color::Fg(color::Reset), - color_for(&user.handle), user.handle, color::Fg(color::Reset) - )); - } - } + match tweeter.retrieve_tweet(twete_id).map(|x| x.clone()) { + Some(twete) => { + // if we got the tweet, the API gave us the user too + let user = tweeter.retrieve_user(&twete.author_id).map(|x| x.clone()).unwrap(); + match twete.rt_tweet { + Some(ref rt_id) => { + // same for a retweet + let rt = tweeter.retrieve_tweet(&TweetId::Twitter(rt_id.to_owned())).unwrap().clone(); + // and its author + let rt_author = tweeter.retrieve_user(&rt.author_id).unwrap().clone(); + result.push(format!("{} id:{} (rt_id:{}){}{}", + id_color, rt.internal_id, twete.internal_id, + rt.reply_to_tweet.clone() + .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) + .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) + .unwrap_or(format!(" reply_to:twitter::{}", id)) + ) + .unwrap_or("".to_string()), + color::Fg(color::Reset) + )); + result.push(format!(" {}{}{} ({}@{}{}) via {}{}{} ({}@{}{}) RT:", + color_for(&rt_author.handle), rt_author.name, color::Fg(color::Reset), + color_for(&rt_author.handle), rt_author.handle, color::Fg(color::Reset), + color_for(&user.handle), user.name, color::Fg(color::Reset), + color_for(&user.handle), user.handle, color::Fg(color::Reset) + )); + } + None => { + result.push(format!("{} id:{}{}{}", + id_color, twete.internal_id, + twete.reply_to_tweet.clone() + .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) + .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) + .unwrap_or(format!(" reply_to:twitter::{}", id)) + ) + .unwrap_or("".to_string()), + color::Fg(color::Reset) + )); + result.push(format!(" {}{}{} ({}@{}{})", + color_for(&user.handle), user.name, color::Fg(color::Reset), + color_for(&user.handle), user.handle, color::Fg(color::Reset) + )); + } + } - result.extend( - format!(" {}", twete.text.replace("\r", "\\r").split("\n").collect::<Vec<&str>>().join("\n ")).split("\n").map(|x| x.to_owned()) - ); + result.extend( + format!(" {}", twete.text.replace("\r", "\\r").split("\n").collect::<Vec<&str>>().join("\n ")).split("\n").map(|x| x.to_owned()) + ); - if let Some(ref qt_id) = twete.quoted_tweet_id { - let maybe_qt = tweeter.retrieve_tweet(&TweetId::Twitter(qt_id.to_owned())).map(|x| x.to_owned()); - if let Some(qt) = maybe_qt { - let qt_author = tweeter.retrieve_user(&qt.author_id).unwrap().clone(); - result.push(format!("{} id:{}{}{}", - id_color, qt.internal_id, - qt.reply_to_tweet.clone() - .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) - .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) - .unwrap_or(format!(" reply_to:twitter::{}", id)) - ) - .unwrap_or("".to_string()), - color::Fg(color::Reset) - )); - result.push(format!( - " {}{}{} ({}@{}{})", - color_for(&qt_author.handle), qt_author.name, color::Fg(color::Reset), - color_for(&qt_author.handle), qt_author.handle, color::Fg(color::Reset) - )); - result.push(format!( - " {}", - qt.text.replace("\r", "\\r").split("\n").collect::<Vec<&str>>().join("\n ") - )); - } else { - result.push(format!(" << don't have quoted tweet! >>")); + if let Some(ref qt_id) = twete.quoted_tweet_id { + let maybe_qt = tweeter.retrieve_tweet(&TweetId::Twitter(qt_id.to_owned())).map(|x| x.to_owned()); + if let Some(qt) = maybe_qt { + let qt_author = tweeter.retrieve_user(&qt.author_id).unwrap().clone(); + result.push(format!("{} id:{}{}{}", + id_color, qt.internal_id, + qt.reply_to_tweet.clone() + .map(|id| tweeter.retrieve_tweet(&TweetId::Twitter(id.to_owned())) + .and_then(|tw| Some(format!(" reply_to:{}", tw.internal_id))) + .unwrap_or(format!(" reply_to:twitter::{}", id)) + ) + .unwrap_or("".to_string()), + color::Fg(color::Reset) + )); + result.push(format!( + " {}{}{} ({}@{}{})", + color_for(&qt_author.handle), qt_author.name, color::Fg(color::Reset), + color_for(&qt_author.handle), qt_author.handle, color::Fg(color::Reset) + )); + result.push(format!( + " {}", + qt.text.replace("\r", "\\r").split("\n").collect::<Vec<&str>>().join("\n ") + )); + } else { + result.push(format!(" << don't have quoted tweet! >>")); + } + } + }, + None => { + result.push(format!("No such tweet: {:?}", twete_id)); } } |