From 10a05dad1559d885a754f4b7897b1a2f6260b096 Mon Sep 17 00:00:00 2001 From: slonkazoid Date: Wed, 29 Jan 2025 18:00:57 +0300 Subject: [PATCH] fix html, css and markdown post listing --- src/post/markdown_posts.rs | 97 ++++++++++++++++++++------------------ templates/index.hbs | 2 + templates/post.hbs | 3 +- templates/posts.hbs | 2 + 4 files changed, 58 insertions(+), 46 deletions(-) diff --git a/src/post/markdown_posts.rs b/src/post/markdown_posts.rs index 25b67f7..cd3e073 100644 --- a/src/post/markdown_posts.rs +++ b/src/post/markdown_posts.rs @@ -19,7 +19,7 @@ use serde::Deserialize; use serde_value::Value; use tokio::fs; use tokio::io::AsyncReadExt; -use tracing::{info, instrument, warn}; +use tracing::{error, info, instrument}; use crate::config::MarkdownConfig; use crate::markdown_render::{build_syntect, render}; @@ -168,27 +168,36 @@ where let mut read_dir = fs::read_dir(&self.config.load().root).await?; while let Some(entry) = read_dir.next_entry().await? { - let path = entry.path(); - let stat = fs::metadata(&path).await?; + if let Err(err) = async { + let path = entry.path(); + let stat = fs::metadata(&path).await?; - if stat.is_file() && path.extension().is_some_and(|ext| ext == "md") { - let name = path - .clone() - .file_stem() - .unwrap() - .to_string_lossy() - .to_string() - .into(); + if stat.is_file() && path.extension().is_some_and(|ext| ext == "md") { + let name = path + .clone() + .file_stem() + .unwrap() + .to_string_lossy() + .to_string() + .into(); - let post = self.get_post(Arc::clone(&name), query).await?; - if let ReturnedPost::Rendered { - meta, body, perf, .. - } = post - && meta.apply_filters(filters) - { - posts.push((meta, body, perf)); + let post = self.get_post(Arc::clone(&name), query).await?; + if let ReturnedPost::Rendered { + meta, body, perf, .. + } = post + && meta.apply_filters(filters) + { + posts.push((meta, body, perf)); + } } + + color_eyre::eyre::Ok(()) } + .await + { + error!("error while getting post: {err}"); + continue; + }; } Ok(posts) @@ -203,39 +212,37 @@ where let mut read_dir = fs::read_dir(&self.config.load().root).await?; while let Some(entry) = read_dir.next_entry().await? { - let path = entry.path(); - let stat = fs::metadata(&path).await?; + if let Err(err) = async { + let path = entry.path(); + let stat = fs::metadata(&path).await?; - if stat.is_file() && path.extension().is_some_and(|ext| ext == "md") { - let mtime = as_secs(stat.modified()?); - let name: Arc = - String::from(path.file_stem().unwrap().to_string_lossy()).into(); + if stat.is_file() && path.extension().is_some_and(|ext| ext == "md") { + let mtime = as_secs(stat.modified()?); + let name: Arc = + String::from(path.file_stem().unwrap().to_string_lossy()).into(); - if let Some(cache) = &self.cache - && let Some(hit) = cache - .lookup_metadata(name.clone(), mtime, self.render_hash) - .await - && hit.apply_filters(filters) - { - posts.push(hit); - } else { - match self.parse_and_render(name, path).await { - Ok((metadata, ..)) => { - if metadata.apply_filters(filters) { - posts.push(metadata); - } + if let Some(cache) = &self.cache + && let Some(hit) = cache + .lookup_metadata(name.clone(), mtime, self.render_hash) + .await + && hit.apply_filters(filters) + { + posts.push(hit); + } else { + let (metadata, ..) = self.parse_and_render(name, path).await?; + if metadata.apply_filters(filters) { + posts.push(metadata); } - Err(err) => match err { - PostError::IoError(ref io_err) - if matches!(io_err.kind(), io::ErrorKind::NotFound) => - { - warn!("TOCTOU: {}", err) - } - _ => return Err(err), - }, } } + + color_eyre::eyre::Ok(()) } + .await + { + error!("error while getting post metadata: {err}"); + continue; + }; } Ok(posts) diff --git a/templates/index.hbs b/templates/index.hbs index dfcc49a..55d3a00 100644 --- a/templates/index.hbs +++ b/templates/index.hbs @@ -1,3 +1,4 @@ + @@ -11,6 +12,7 @@ {{/if}} {{style.title}} + {{#if rss}} {{/if}} diff --git a/templates/post.hbs b/templates/post.hbs index 84f2d23..011bffd 100644 --- a/templates/post.hbs +++ b/templates/post.hbs @@ -1,3 +1,4 @@ + @@ -33,7 +34,7 @@ {{/if}} - +

{{meta.title}} diff --git a/templates/posts.hbs b/templates/posts.hbs index 3453982..48738c8 100644 --- a/templates/posts.hbs +++ b/templates/posts.hbs @@ -1,9 +1,11 @@ + {{title}} + {{#if rss}} {{/if}}