Add a dependency manager for render-time actions.

This will be used for supporting things like copying static files or rendering code blocks like gnuplot or graphviz.
This commit is contained in:
Tom Alexander
2025-02-08 17:27:20 -05:00
parent 5cac44c625
commit 3867f965d2
5 changed files with 49 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ use tokio::fs::DirEntry;
use tokio::task::JoinHandle;
use crate::config::Config;
use crate::context::DependencyManager;
use crate::context::RenderBlogPostPage;
use crate::context::RenderBlogPostPageInput;
use crate::context::RenderBlogStream;
@@ -85,11 +86,14 @@ impl SiteRenderer {
for page in &self.pages {
let output_path = self.output_directory.join(page.get_output_path());
let dependency_manager =
std::sync::Arc::new(std::sync::Mutex::new(DependencyManager::new()));
let render_context = RenderContext::new(
config,
self.output_directory.as_path(),
output_path.as_path(),
None,
dependency_manager,
)?;
let render_context = RenderPage::new(render_context, page)?;
let rendered_output = renderer_integration.render(render_context)?;
@@ -113,12 +117,15 @@ impl SiteRenderer {
.join(config.get_relative_path_to_post(&blog_post.id))
.join(blog_post_page.get_output_path());
let dependency_manager =
std::sync::Arc::new(std::sync::Mutex::new(DependencyManager::new()));
let convert_input = RenderBlogPostPageInput::new(blog_post, blog_post_page);
let render_context = RenderContext::new(
config,
self.output_directory.as_path(),
output_path.as_path(),
None,
dependency_manager,
)?;
let render_context = RenderBlogPostPage::new(render_context, &convert_input)?;
let rendered_output = renderer_integration.render(render_context)?;
@@ -127,6 +134,9 @@ impl SiteRenderer {
.ok_or("Output file should have a containing directory.")?;
tokio::fs::create_dir_all(parent_directory).await?;
tokio::fs::write(output_path, rendered_output).await?;
// TODO: Copy post files to output.
// TODO: Update link src to generate path correct for where the page is rendered.
}
}
@@ -194,12 +204,15 @@ impl SiteRenderer {
)?)
};
let dependency_manager =
std::sync::Arc::new(std::sync::Mutex::new(DependencyManager::new()));
let convert_input = RenderBlogStreamInput::new(chunk, older_link, newer_link);
let render_context = RenderContext::new(
config,
self.output_directory.as_path(),
output_file.as_path(),
None,
dependency_manager,
)?;
let blog_stream = RenderBlogStream::new(render_context, &convert_input)?;