diff options
Diffstat (limited to 'src/bin/jt2.rs')
-rw-r--r-- | src/bin/jt2.rs | 51 |
1 files changed, 16 insertions, 35 deletions
diff --git a/src/bin/jt2.rs b/src/bin/jt2.rs index cf55aef..3d85229 100644 --- a/src/bin/jt2.rs +++ b/src/bin/jt2.rs @@ -1,11 +1,9 @@ use jt2::config::Configuration; use jt2::error::JournalError; +use jt2::journal::Journal; use jt2::opt::{Opt, SubCommand}; -use log::debug; -use std::fs; use std::path::Path; -use std::process::Command; use structopt::StructOpt; fn main() -> anyhow::Result<()> { @@ -20,57 +18,40 @@ fn main() -> anyhow::Result<()> { } => init(&config.dirname, &journalname, &description)?, SubCommand::IsJournal => is_journal(&config.dirname)?, SubCommand::New { title } => new_draft(&title, &config.dirname, &config.editor)?, - SubCommand::Edit => edit_draft(&config.dirname, &config.editor)?, - SubCommand::Finish => finish_draft(&config.dirname)?, + SubCommand::Edit { draft } => edit_draft(&config.dirname, &config.editor, &draft)?, + SubCommand::Finish { draft, basename } => finish_draft(&config.dirname, &draft, &basename)?, } Ok(()) } fn init(dirname: &Path, _journalname: &str, _description: &str) -> anyhow::Result<()> { - std::fs::create_dir(dirname) - .map_err(|err| JournalError::CreateDirectory(dirname.to_path_buf(), err))?; + Journal::init(dirname)?; Ok(()) } fn is_journal(dirname: &Path) -> anyhow::Result<()> { - let meta = fs::symlink_metadata(dirname)?; - if !meta.is_dir() { + if !Journal::is_journal(dirname) { return Err(JournalError::NotAJournal(dirname.display().to_string()).into()); } Ok(()) } -fn new_draft(title: &str, dirname: &Path, _editor: &str) -> anyhow::Result<()> { - let drafts = dirname.join("drafts"); - if !drafts.exists() { - std::fs::create_dir(&drafts)?; - } - let draft_filename = drafts.join("0.md"); - std::fs::write(draft_filename, title)?; +fn new_draft(title: &str, dirname: &Path, editor: &str) -> anyhow::Result<()> { + let journal = Journal::new(dirname)?; + journal.new_draft(title, editor)?; Ok(()) } -fn edit_draft(dirname: &Path, editor: &str) -> anyhow::Result<()> { - debug!("edit_draft: dirname={:?}", dirname); - debug!("edit_draft: editor={:?}", editor); - let drafts = dirname.join("drafts"); - let draft_filename = drafts.join("0.md"); - debug!("edit_draft: draft_filename={:?}", draft_filename); - Command::new(editor).arg(draft_filename).status()?; - debug!("edit_draft: editor finished"); +fn edit_draft(dirname: &Path, editor: &str, draft: &str) -> anyhow::Result<()> { + let journal = Journal::new(dirname)?; + let filename = journal.pick_draft(draft)?; + journal.edit_draft(editor, &filename)?; Ok(()) } -fn finish_draft(dirname: &Path) -> anyhow::Result<()> { - let drafts = dirname.join("drafts"); - let draft = drafts.join("0.md"); - - let entries = dirname.join("entries"); - if !entries.exists() { - std::fs::create_dir(&entries)?; - } - let entry = entries.join("0.md"); - - std::fs::rename(draft, entry)?; +fn finish_draft(dirname: &Path, draft: &str, basename: &str) -> anyhow::Result<()> { + let journal = Journal::new(dirname)?; + let filename = journal.pick_draft(draft)?; + journal.finish_draft(&filename, basename)?; Ok(()) } |