diff options
| author | bryan newbold <bnewbold@robocracy.org> | 2023-03-04 19:03:17 -0800 | 
|---|---|---|
| committer | bryan newbold <bnewbold@robocracy.org> | 2023-03-04 19:03:17 -0800 | 
| commit | 97f030b15321bb22274fa2807da445aa5dfc5512 (patch) | |
| tree | febdb322f5f9f5b7a11764a1d50b83c596d6a911 /adenosine-cli | |
| parent | 33548eb9169c048456795e2cc999ada22465df4a (diff) | |
| download | adenosine-97f030b15321bb22274fa2807da445aa5dfc5512.tar.gz adenosine-97f030b15321bb22274fa2807da445aa5dfc5512.zip  | |
cli: improve 'pretty' output styling
Diffstat (limited to 'adenosine-cli')
| -rw-r--r-- | adenosine-cli/src/pretty.rs | 62 | 
1 files changed, 58 insertions, 4 deletions
diff --git a/adenosine-cli/src/pretty.rs b/adenosine-cli/src/pretty.rs index 306c056..3d260a3 100644 --- a/adenosine-cli/src/pretty.rs +++ b/adenosine-cli/src/pretty.rs @@ -1,19 +1,71 @@ -use adenosine::app_bsky::PostView; +use adenosine::app_bsky::{FeedPostView, PostView, ThreadPostView};  use anyhow::Result;  use std::io::Write;  use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor}; +pub fn pp_thread_post_view(tpv: &ThreadPostView) -> Result<()> { +    // TODO: this could do better +    if let Some(parent) = &tpv.parent { +        pp_thread_post_view(&parent)?; +    }; +    if let Some(not_found) = &tpv.notFound { +        if *not_found == true { +            let mut stdout = StandardStream::stdout(ColorChoice::Always); +            stdout.set_color(ColorSpec::new().set_fg(Some(Color::Red)))?; +            writeln!( +                &mut stdout, +                "thread post not found: {}\n", +                tpv.uri.as_ref().expect("URI for post-not-found") +            )?; +            stdout.reset()?; +        } +    } +    if let Some(post) = &tpv.post { +        pp_post_view(&post)?; +    } +    if let Some(replies) = &tpv.replies { +        for child in replies { +            pp_thread_post_view(&child)?; +        } +    }; +    Ok(()) +} + +pub fn pp_feed_post_view(fpv: &FeedPostView) -> Result<()> { +    let mut stdout = StandardStream::stdout(ColorChoice::Always); + +    if let Some(repost) = &fpv.reason { +        stdout.set_color(ColorSpec::new().set_dimmed(true).set_italic(true))?; +        write!(&mut stdout, "re-posted by ")?; +        stdout.set_color( +            ColorSpec::new() +                .set_fg(Some(Color::Yellow)) +                .set_dimmed(true) +                .set_italic(true), +        )?; +        writeln!(&mut stdout, "@{}", repost.by.handle)?; +        stdout.reset()?; +    } + +    pp_post_view(&fpv.post) +} +  pub fn pp_post_view(pv: &PostView) -> Result<()> {      let mut stdout = StandardStream::stdout(ColorChoice::Always); -    stdout.set_color(ColorSpec::new().set_fg(Some(Color::Yellow)).set_bold(true))?; +    if let Some(reply_to) = &pv.record.reply { +        stdout.set_color(ColorSpec::new().set_dimmed(true).set_italic(true))?; +        writeln!(&mut stdout, "reply to {}", reply_to.parent.uri)?; +        stdout.reset()?; +    } + +    stdout.set_color(ColorSpec::new().set_fg(Some(Color::Yellow)).set_bold(true))?;      write!(&mut stdout, "@{:<54.54}", pv.author.handle)?;      stdout.reset()?;      stdout.set_color(ColorSpec::new().set_dimmed(true))?;      writeln!(&mut stdout, "{}", pv.indexedAt)?;      stdout.reset()?; -    write!(&mut stdout, " ")?;      if let Some(entities) = &pv.record.entities {          let mut cur: usize = 0;          for ent in entities { @@ -92,7 +144,9 @@ pub fn pp_post_view(pv: &PostView) -> Result<()> {          }      } -    writeln!(&mut stdout, "\n")?; +    stdout.set_color(ColorSpec::new().set_dimmed(true))?; +    writeln!(&mut stdout, "{}\n", pv.uri)?; +      stdout.reset()?;      Ok(())  }  | 
