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; 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![Box::new(SyncDown::new())] } 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![ Box::new(Generate::new()), Box::new(SyncUp::new()) ] } fn command(&self) -> &'static str { "update" } fn help(&self) -> &'static str { "\t\tUpdates latest blog post" } }