Improve image generation perf

This commit is contained in:
2024-09-06 14:43:04 +02:00
parent b136f46a6f
commit 7f483af9cf
9 changed files with 82 additions and 49 deletions

View File

@ -22,7 +22,7 @@ pub async fn get_post_list<'de, Metadata: DeserializeOwned>(
let file_path = file.path();
let file_path_str = file_path.to_str().unwrap();
info!(":{}", file_path_str);
let post = parse_post::<Metadata>(file_path_str).await?;
let post = parse_post::<Metadata>(file_path_str, false).await?;
posts.push(post);
}

View File

@ -6,6 +6,9 @@ use gray_matter::{engine::YAML, Matter};
use pulldown_cmark::{Event, Options, Parser, Tag, TagEnd};
use serde::{de::DeserializeOwned, Deserialize, Deserializer};
use tokio::fs;
use tracing::debug;
use crate::picture_generator::picture_markup_generator::generate_picture_markup;
pub fn deserialize_date<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>
where
@ -29,6 +32,7 @@ pub struct ParseResult<Metadata> {
pub async fn parse_post<'de, Metadata: DeserializeOwned>(
path: &str,
generate_images: bool,
) -> Result<ParseResult<Metadata>, StatusCode> {
let file_contents = fs::read_to_string(path)
.await
@ -43,7 +47,7 @@ pub async fn parse_post<'de, Metadata: DeserializeOwned>(
StatusCode::INTERNAL_SERVER_ERROR
})?;
let body = parse_html(&metadata.content);
let body = parse_html(&metadata.content, generate_images);
let filename = Path::new(path)
.file_stem()
@ -59,7 +63,7 @@ pub async fn parse_post<'de, Metadata: DeserializeOwned>(
})
}
pub fn parse_html(markdown: &str) -> String {
pub fn parse_html(markdown: &str, generate_images: bool) -> String {
let mut options = Options::empty();
options.insert(Options::ENABLE_TABLES);
options.insert(Options::ENABLE_FOOTNOTES);
@ -80,22 +84,41 @@ pub fn parse_html(markdown: &str) -> String {
title,
id,
}) => {
println!(
// TODO Get image resolution
// Place image into the content with scaled reso to a boundary
let picture_markup =
generate_picture_markup(&dest_url, 500, 500, &title, generate_images).unwrap_or(
format!(
r#"
<img
alt="{alt}"
src="{src}"
/>"#,
alt = title,
src = dest_url,
),
);
// let picture_markup = format!(
// r#"
// <img
// alt="{alt}"
// src="{src}"
// />"#,
// alt = title,
// src = dest_url,
// );
debug!(
"Image link_type: {:?} url: {} title: {} id: {}",
link_type, dest_url, title, id
);
// TODO src set
Event::Html(
format!(
r#"<figure>
<img
alt="{alt}"
src="{src}"
/>
<figcaption>
"#,
alt = title,
src = dest_url,
{picture_markup}
<figcaption>
"#,
)
.into(),
)