X-Git-Url: https://git.r.bdr.sh/rbdr/blog/blobdiff_plain/2f579cf4c0d8ff95af78103783c7ca8f951cc797..f7f4335199beaad56d9c962ac84e92a3f78907a6:/src/command/add.rs?ds=sidebyside diff --git a/src/command/add.rs b/src/command/add.rs index 4c80917..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 {