diff --git a/site_test/posts/2024-11-30-swiftui-lifecycle.md b/site_test/posts/2024/2024-11-30-swiftui-lifecycle.md similarity index 100% rename from site_test/posts/2024-11-30-swiftui-lifecycle.md rename to site_test/posts/2024/2024-11-30-swiftui-lifecycle.md diff --git a/src/generator/archive.rs b/src/generator/archive.rs index b4ed83b..167926d 100644 --- a/src/generator/archive.rs +++ b/src/generator/archive.rs @@ -77,6 +77,10 @@ impl Rule for PostsByYear { for entry in self.input_0().iter().cloned() { map.entry(entry.date.year()).or_insert(vec![]).push(entry); } + for year_vec in map.values_mut() { + year_vec.sort_by_key(|ent| ent.date); + year_vec.reverse(); + } PostsYearMap(map) } } diff --git a/src/generator/posts.rs b/src/generator/posts.rs index 6ab8dc3..c71e3ae 100644 --- a/src/generator/posts.rs +++ b/src/generator/posts.rs @@ -66,23 +66,21 @@ impl Rule for ListPostFiles { type Output = Vec; fn evaluate(&mut self) -> Self::Output { let posts_path = content_path("posts/"); - let entries = std::fs::read_dir(posts_path); - match entries { - Ok(entries) => entries - .flat_map(|ent| ent.ok()) - .map(|ent| { + let entries = std::fs::read_dir(posts_path).expect("listing posts dir"); + entries + .flat_map(|year_ent| year_ent.ok()) + .filter(|year_ent| year_ent.file_type().unwrap().is_dir()) + .flat_map(|year_ent| { + let year_entries = std::fs::read_dir(year_ent.path()).expect("listing year dir"); + year_entries.flat_map(|ent| ent.ok()).map(|ent| { if ent.file_type().unwrap().is_dir() { find_index(ent.path()).expect("folder posts must have index file") } else { ent.path() } }) - .collect(), - Err(e) => { - error!("Error listing posts: {e:?}"); - vec![] - } - } + }) + .collect::>() } }