X-Git-Url: https://git.r.bdr.sh/rbdr/blog/blobdiff_plain/d620665f6b2e1ae5db4c98a09e35bd63133ae87f..c4b892b16fb92c7d89eaee0b1588c52c8836216b:/src/command/add.rs?ds=inline diff --git a/src/command/add.rs b/src/command/add.rs index 36f25a0..02da0fb 100644 --- a/src/command/add.rs +++ b/src/command/add.rs @@ -1,4 +1,12 @@ +use std::fs::{create_dir_all, remove_dir_all, rename}; use std::io::Result; +use super::{ + generate::Generate, + sync_down::SyncDown, + sync_up::SyncUp, + update::Update +}; +use crate::configuration::Configuration; pub struct Add; @@ -10,16 +18,31 @@ impl Add { impl super::Command for Add { fn before_dependencies(&self) -> Vec> { - vec![] + vec![Box::new(SyncDown::new())] } - fn execute(&self, input: Option<&String>) -> Result<()> { - println!("Add: {:?}!", input); - return Ok(()) + fn execute(&self, _: Option<&String>, configuration: &Configuration, _: &String) -> Result<()> { + create_dir_all(&configuration.posts_directory)?; + for i in (0..configuration.max_posts - 1).rev() { + let source = configuration.posts_directory.join(i.to_string()); + let target = configuration.posts_directory.join((i + 1).to_string()); + + if target.exists() { + remove_dir_all(&target)?; + } + if source.exists() { + rename(&source, &target)?; + } + } + Ok(()) } fn after_dependencies(&self) -> Vec> { - vec![] + vec![ + Box::new(Update::new()), + Box::new(Generate::new()), + Box::new(SyncUp::new()) + ] } fn command(&self) -> &'static str { @@ -27,6 +50,6 @@ impl super::Command for Add { } fn help(&self) -> &'static str { - "\t\tCreates new blog post" + "\t\t\tCreates new blog post" } }