diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/conf.rs | 8 | ||||
-rw-r--r-- | src/posts.rs | 25 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/conf.rs b/src/conf.rs index 2a26a92..c392621 100644 --- a/src/conf.rs +++ b/src/conf.rs @@ -16,6 +16,14 @@ fn get_config() -> clap::ArgMatches<'static> { .long("verbose") .help("Verbose logging"), ) + .arg( + Arg::with_name("line") + .short("l") + .long("line") + .value_name("LENGTH") + .takes_value(true) + .help("Line length (default: 80; a value <10 disables wrapping)"), + ) .subcommand(clap::SubCommand::with_name("post").about("Post a new notice")) .subcommand( clap::SubCommand::with_name("update") diff --git a/src/posts.rs b/src/posts.rs index 4553b3e..c44e0f5 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -1,5 +1,6 @@ use std::io; +use crate::conf; use crate::db; use crate::error; use crate::user; @@ -74,16 +75,38 @@ pub fn create() -> error::Result<()> { // Shows the most recent posts. pub fn display() -> error::Result<()> { + let args = &*conf::ARGS; + let line_len = args + .value_of("line") + .unwrap_or_else(|| "80") + .parse::<usize>() + .unwrap_or_else(|_| 80); + let all = db::Posts::get_all(db::PATH); let mut postvec = Vec::new(); all.posts().iter().enumerate().for_each(|(id, post)| { + let body = post + .body + .trim() + .chars() + .into_iter() + .enumerate() + .map(|(i, e)| { + let i = i + 1; + if line_len > 9 && i % line_len == 0 { + return format!("{}\n", e); + } + e.to_string() + }) + .collect::<String>(); + let newpost = format!( "{}. {} -> by {}\n{}\n\n", id + 1, post.title.trim(), post.author, - post.body.trim() + body ); postvec.push(newpost); }); |