X-Git-Url: https://git.r.bdr.sh/rbdr/blog/blobdiff_plain/d620665f6b2e1ae5db4c98a09e35bd63133ae87f..a9c6be4162bd15bd41ba3605127b56cb1eb32f32:/src/command/update.rs diff --git a/src/command/update.rs b/src/command/update.rs index d251093..ed6b066 100644 --- a/src/command/update.rs +++ b/src/command/update.rs @@ -1,4 +1,10 @@ -use std::io::Result; +use std::fs::create_dir_all; +use std::io::{Result, Error, ErrorKind}; +use std::path::PathBuf; +use super::{sync_down::SyncDown, generate::Generate, sync_up::SyncUp}; +use crate::configuration::Configuration; +use crate::constants::METADATA_FILENAME; +use crate::metadata::Metadata; pub struct Update; @@ -6,20 +12,50 @@ impl Update { pub fn new() -> Self { Update } + + fn copy_post(&self, post_location: &PathBuf) { + + } + + fn write_metadata(&self, metadata: Metadata, metadata_location: &PathBuf) { + + } + + fn archive(&self, post_location: &PathBuf) { + + } } impl super::Command for Update { fn before_dependencies(&self) -> Vec> { - vec![] + vec![Box::new(SyncDown::new())] } - fn execute(&self, input: Option<&String>) -> Result<()> { - println!("Update: {:?}!", input); + fn execute(&self, input: Option<&String>, configuration: &Configuration, _: &String) -> Result<()> { + let input = input.expect("You must provide a path to a post"); + let post_location = PathBuf::from(input); + if !post_location.exists() { + return Err(Error::new(ErrorKind::NotFound, "The path provided does not exist")); + } + + create_dir_all(&configuration.posts_directory)?; + + let metadata_file_path = configuration.posts_directory + .join("0") + .join(METADATA_FILENAME); + let metadata = Metadata::read_or_create(&metadata_file_path); + + self.copy_post(&post_location); + self.write_metadata(metadata, &metadata_file_path); + self.archive(&post_location); return Ok(()) } fn after_dependencies(&self) -> Vec> { - vec![] + vec![ + Box::new(Generate::new()), + Box::new(SyncUp::new()) + ] } fn command(&self) -> &'static str {