fix: maybe preview works now

This commit is contained in:
2026-04-10 21:01:28 +02:00
parent c44354e33f
commit 9095912b48
6 changed files with 228 additions and 21 deletions

View File

@@ -1,13 +1,15 @@
use std::path::Path;
use std::collections::HashMap;
use chrono::{DateTime, TimeZone, Utc};
use rusqlite::Connection;
use crate::db::queries;
use crate::engine::{EngineError, EngineResult};
use crate::model::{Post, ProjectMetadata};
use crate::render::{
GeneratedWriteOutcome, build_calendar_json, build_canonical_post_path,
render_markdown_to_html, render_starter_list_page, render_starter_single_post_page,
render_markdown_to_html, render_starter_list_page_with_media_map, render_starter_single_post_page_with_media_map,
write_generated_file,
};
@@ -32,17 +34,29 @@ pub fn generate_starter_site(
language: &str,
) -> EngineResult<GenerationReport> {
let mut report = GenerationReport::default();
let media_rewrite_map = build_media_rewrite_map(conn, project_id)?;
let list_input = posts
.iter()
.map(|source| (source.post.clone(), source.body_markdown.clone()))
.collect::<Vec<_>>();
let index_page = render_starter_list_page(&list_input, metadata, language)
let index_page = render_starter_list_page_with_media_map(
&list_input,
metadata,
language,
media_rewrite_map.clone(),
)
.map_err(|error| EngineError::Parse(error.to_string()))?;
write_out(conn, output_dir, project_id, &index_page.relative_path, &index_page.html, &mut report)?;
for source in posts {
let rendered = render_starter_single_post_page(&source.post, &source.body_markdown, metadata, language)
let rendered = render_starter_single_post_page_with_media_map(
&source.post,
&source.body_markdown,
metadata,
language,
media_rewrite_map.clone(),
)
.map_err(|error| EngineError::Parse(error.to_string()))?;
write_out(conn, output_dir, project_id, &rendered.relative_path, &rendered.html, &mut report)?;
}
@@ -65,6 +79,28 @@ pub fn generate_starter_site(
Ok(report)
}
fn build_media_rewrite_map(
conn: &Connection,
project_id: &str,
) -> EngineResult<HashMap<String, String>> {
let media_items = queries::media::list_media_by_project(conn, project_id)?;
let mut map = HashMap::new();
for media in media_items {
let canonical_path = if media.file_path.starts_with('/') {
media.file_path.clone()
} else {
format!("/{}", media.file_path.trim_start_matches('/'))
};
map.insert(format!("bds-media://{}", media.id), canonical_path.clone());
let relative_key = media.file_path.trim_start_matches('/').to_lowercase();
map.insert(relative_key, canonical_path);
}
Ok(map)
}
fn write_out(
conn: &Connection,
output_dir: &Path,