diff options
| author | WriterV2 <primary-v2@protonmail.com> | 2023-05-21 17:13:07 +0200 |
|---|---|---|
| committer | WriterV2 <primary-v2@protonmail.com> | 2023-05-21 17:13:07 +0200 |
| commit | afcdd26dbf918eec194e7344be72c6cb65faf0b1 (patch) | |
| tree | 9f139c8dc934d06df1c153b8301f40fb8f8132d2 /src | |
| parent | aa191707ba93ee1b0790be89dcb274864ffe884f (diff) | |
Add 'Wege zum Tod' + Fix not being able to add new story due to HTML last modification detection expecting it
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 4 | ||||
| -rw-r--r-- | src/works/mod.rs | 4 | ||||
| -rw-r--r-- | src/works/stories.rs | 19 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs index 871c57e..26c3794 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,10 +16,10 @@ fn main() -> Result<()> { // render stories.html file let stories = std::rc::Rc::new(works::stories::Stories::new_from_file( - std::fs::File::open(std::path::PathBuf::from("stories.json"))?, + &std::fs::File::open(std::path::PathBuf::from("stories.json"))?, )?); std::rc::Rc::clone(&stories).render_overview_page(&tera, "stories")?; std::rc::Rc::clone(&stories).render_single_pages(&tera, "story")?; - Ok(()) + anyhow::Ok(()) } diff --git a/src/works/mod.rs b/src/works/mod.rs index 989f337..cb82168 100644 --- a/src/works/mod.rs +++ b/src/works/mod.rs @@ -7,8 +7,8 @@ pub mod stories; pub trait Works: for<'a> Deserialize<'a> + Serialize { // create works from the corresponding JSON file, // e.g. stories from stories.json - fn new_from_file(file: std::fs::File) -> Result<Self> { - serde_json::from_reader(std::io::BufReader::new(&file)) + fn new_from_file(file: &std::fs::File) -> Result<Self> { + serde_json::from_reader(std::io::BufReader::new(file)) // add error context .with_context(|| format!("Failed to create works from {:?}", &file)) } diff --git a/src/works/stories.rs b/src/works/stories.rs index 510f30b..80ab8de 100644 --- a/src/works/stories.rs +++ b/src/works/stories.rs @@ -1,3 +1,5 @@ +use std::format; + use anyhow::Context; use chrono::NaiveDate; use serde::{Deserialize, Serialize}; @@ -44,14 +46,14 @@ impl super::Works for Stories { } // create stories from stories.json and add last modification date - fn new_from_file(file: std::fs::File) -> anyhow::Result<Self> { - let mut stories: Stories = serde_json::from_reader(std::io::BufReader::new(&file))?; + fn new_from_file(file: &std::fs::File) -> anyhow::Result<Self> { + let mut stories: Stories = serde_json::from_reader(std::io::BufReader::new(file))?; for story in stories.0.iter_mut() { story.get_last_modified()?; story.get_pages_num()?; } // add error context - Ok(stories) + anyhow::Ok(stories).with_context(|| format!("Failed to create new story {:?}", file)) } } @@ -105,17 +107,22 @@ impl Story { fn get_last_modified(&mut self) -> anyhow::Result<chrono::NaiveDate> { use std::os::linux::fs::MetadataExt; let pdf_last_modification = std::fs::metadata(self.get_pdf_path())?.st_mtime(); - let html_last_modification = std::fs::metadata(self.get_html_path())?.st_mtime(); + let html_path = std::fs::metadata(self.get_html_path()); + let html_last_modification = if let Ok(file) = html_path { + file.st_mtime() + } else { + 0 + }; let date = chrono::NaiveDateTime::from_timestamp(std::cmp::max(pdf_last_modification, html_last_modification), 0).date(); self.last_update = date; - Ok(date) + anyhow::Ok(date).with_context(|| format!("Failed to get last modified date for {}", self.title)) } // get number of pages of pdf file fn get_pages_num(&mut self) -> anyhow::Result<u32> { let file = pdf::file::File::open(self.get_pdf_path())?; self.number_of_pages = file.num_pages(); - Ok(file.num_pages()) + anyhow::Ok(file.num_pages()).with_context(|| format!("Failed to number of pages for {}", self.title)) } } |
