diff options
Diffstat (limited to 'src/journal.rs')
-rw-r--r-- | src/journal.rs | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/src/journal.rs b/src/journal.rs index 2adb48d..c3bb1eb 100644 --- a/src/journal.rs +++ b/src/journal.rs @@ -7,31 +7,32 @@ const MAX_DRAFT_COUNT: usize = 1000; pub struct Journal { dirname: PathBuf, + entries: PathBuf, } impl Journal { - pub fn is_journal(path: &Path) -> bool { - if let Ok(meta) = std::fs::symlink_metadata(path) { - meta.is_dir() - } else { - false - } + pub fn is_journal(path: &Path, entries: &Path) -> bool { + is_dir(path) && is_dir(entries) } - pub fn init(path: &Path) -> Result<Self, JournalError> { + pub fn init(path: &Path, entries: &Path) -> Result<Self, JournalError> { std::fs::create_dir(path) .map_err(|err| JournalError::CreateDirectory(path.to_path_buf(), err))?; + std::fs::create_dir(entries) + .map_err(|err| JournalError::CreateDirectory(entries.to_path_buf(), err))?; Ok(Self { dirname: path.to_path_buf(), + entries: entries.to_path_buf(), }) } - pub fn new(path: &Path) -> Result<Self, JournalError> { - let dirname = path.to_path_buf(); - if dirname.exists() { - Ok(Self { dirname }) + pub fn new(path: &Path, entries: &Path) -> Result<Self, JournalError> { + if Self::is_journal(path, entries) { + let dirname = path.to_path_buf(); + let entries = entries.to_path_buf(); + Ok(Self { dirname, entries }) } else { - Err(JournalError::NotAJournal(dirname.display().to_string())) + Err(JournalError::NotAJournal(path.display().to_string())) } } @@ -44,7 +45,7 @@ impl Journal { } fn entries(&self) -> PathBuf { - self.dirname().join("entries") + self.entries.clone() } pub fn new_draft(&self, title: &str, editor: &str) -> anyhow::Result<()> { @@ -85,6 +86,9 @@ impl Journal { } fn edit(&self, editor: &str, filename: &Path) -> Result<(), JournalError> { + if editor == "none" { + return Ok(()); + } match Command::new(editor).arg(filename).output() { Err(err) => Err(JournalError::SpawnEditor(filename.to_path_buf(), err)), Ok(output) => { @@ -115,8 +119,17 @@ impl Journal { let subdir = entries.join(Local::today().format("%Y/%m/%d").to_string()); std::fs::create_dir_all(&subdir)?; + let basename = PathBuf::from(format!("{}.mdwn", basename)); let entry = subdir.join(basename); std::fs::rename(filename, entry)?; Ok(()) } } + +fn is_dir(path: &Path) -> bool { + if let Ok(meta) = std::fs::symlink_metadata(path) { + meta.is_dir() + } else { + false + } +} |