From d9c9ff0828e74a40bcc8977329e8bcf02b1d9b45 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 20 Apr 2023 15:08:09 +0200 Subject: [PATCH] order by date --- src/routes/blog.rs | 34 ++++++++++++++++++++-------------- src/template.rs | 10 +++++----- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/routes/blog.rs b/src/routes/blog.rs index c193fa6..33322f6 100644 --- a/src/routes/blog.rs +++ b/src/routes/blog.rs @@ -1,5 +1,6 @@ use actix_web::{get, web, HttpResponse, Responder}; use cached::proc_macro::once; +use chrono::{DateTime, Datelike, Utc}; use ramhorns::Content; use crate::{ @@ -28,22 +29,13 @@ struct Post { pub fn get_index(config: Config) -> String { let location = "data/blog"; - let mut entries = std::fs::read_dir(location) + let entries = std::fs::read_dir(location) .unwrap() .flatten() .filter(|f| f.path().extension().unwrap() == "md") .collect::>(); - // Sort by latest modification/ date of creation - entries.sort_by_cached_key(|f| { - f.metadata() - .unwrap() - .modified() - .unwrap_or(f.metadata().unwrap().created().unwrap()) - }); - entries.reverse(); - - let paths = entries + let mut posts = entries .iter() .map(|f| { let _filename = f.file_name(); @@ -73,17 +65,31 @@ pub fn get_index(config: Config) -> String { Post { url: file_without_ext.to_string(), title: file_metadata.title.unwrap(), - date: file_metadata.date.unwrap_or_default(), + date: file_metadata.date.unwrap_or({ + let m = f.metadata().unwrap(); + let date = std::convert::Into::>::into( + m.modified().unwrap_or(m.created().unwrap()), + ) + .date_naive(); + + Date { + day: date.day(), + month: date.month(), + year: date.year(), + } + }), } }) .collect::>(); - // TODO sort vec by post date metadata, removing the sort above + // Sort from newest to oldest + posts.sort_by_cached_key(|p| p.date.clone()); + posts.reverse(); config.tmpl.render( "blog/index.html", BlogIndexTemplate { - posts: if paths.is_empty() { None } else { Some(paths) }, + posts: if posts.is_empty() { None } else { Some(posts) }, }, Infos { page_title: Some("Blog".to_string()), diff --git a/src/template.rs b/src/template.rs index d62965c..8fe0fe1 100644 --- a/src/template.rs +++ b/src/template.rs @@ -59,11 +59,11 @@ impl FrontMatter<'_> { } } } -#[derive(Content, Default, Debug)] +#[derive(Content, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Date { - day: u32, - month: u32, - year: i32, + pub day: u32, + pub month: u32, + pub year: i32, } impl<'de> Deserialize<'de> for Date { @@ -85,7 +85,7 @@ impl<'de> Deserialize<'de> for Date { } } -#[derive(Default, Deserialize, Content, Debug)] +#[derive(Default, Deserialize, Content)] pub struct FileMetadata { pub title: Option, pub link: Option,