Compare commits

..

No commits in common. "64954a3d5cff057ba9cccc5590827d22fd42e2fb" and "9046ac910d1c729a67583dccde496be27b0a22d6" have entirely different histories.

4 changed files with 31 additions and 10 deletions

View file

@ -23,13 +23,27 @@ where
} }
} }
/*pub fn get(&self, key: &Lookup) -> Option<Arc<T>> {
self.hash.and_then(|hash| {
let mut h = DefaultHasher::new();
key.hash(&mut h);
if hash == h.finish() {
self.inner.clone()
} else {
None
}
})
}*/
pub fn get_or_init(&mut self, key: &Lookup, init: impl Fn(&Lookup) -> Arc<T>) -> Arc<T> { pub fn get_or_init(&mut self, key: &Lookup, init: impl Fn(&Lookup) -> Arc<T>) -> Arc<T> {
let mut h = DefaultHasher::new(); let mut h = DefaultHasher::new();
key.hash(&mut h); key.hash(&mut h);
let hash = h.finish(); let hash = h.finish();
if !self.hash.is_some_and(|inner_hash| inner_hash == hash) { if !self.hash.is_some_and(|inner_hash| inner_hash == hash) {
let mut h = DefaultHasher::new();
key.hash(&mut h);
self.inner = Some(init(key)); self.inner = Some(init(key));
self.hash = Some(hash); self.hash = Some(h.finish());
} }
// safety: please. // safety: please.
unsafe { self.inner.as_ref().unwrap_unchecked().clone() } unsafe { self.inner.as_ref().unwrap_unchecked().clone() }

View file

@ -335,11 +335,7 @@ async fn main() -> eyre::Result<()> {
let cache_file = cache_file.into_std().await; let cache_file = cache_file.into_std().await;
tokio::task::spawn_blocking(move || { tokio::task::spawn_blocking(move || {
std::io::Write::write_all( std::io::Write::write_all(
&mut zstd::stream::write::Encoder::new( &mut zstd::stream::write::Encoder::new(cache_file, 3)?.auto_finish(),
cache_file,
config.cache.compression_level,
)?
.auto_finish(),
&serialized, &serialized,
) )
}) })

View file

@ -32,7 +32,7 @@ fn build_syntect(config: &RenderConfig) -> Arc<SyntectAdapter> {
Arc::new(builder.build()) Arc::new(builder.build())
} }
pub fn render(markdown: &str, config: &RenderConfig) -> String { pub fn render(markdown: &str, config: &RenderConfig, front_matter: bool) -> String {
let mut options = ComrakOptions::default(); let mut options = ComrakOptions::default();
options.extension.table = true; options.extension.table = true;
options.extension.autolink = true; options.extension.autolink = true;
@ -41,6 +41,9 @@ pub fn render(markdown: &str, config: &RenderConfig) -> String {
options.extension.strikethrough = true; options.extension.strikethrough = true;
options.extension.multiline_block_quotes = true; options.extension.multiline_block_quotes = true;
options.extension.header_ids = Some(String::new()); options.extension.header_ids = Some(String::new());
if front_matter {
options.extension.front_matter_delimiter = Some(String::from("---"));
};
let mut render_plugins = RenderPlugins::default(); let mut render_plugins = RenderPlugins::default();
let syntect = syntect_adapter(config); let syntect = syntect_adapter(config);

View file

@ -121,7 +121,7 @@ impl PostManager {
let parsing = parsing_start.elapsed(); let parsing = parsing_start.elapsed();
let before_render = Instant::now(); let before_render = Instant::now();
let rendered_markdown = render(body, &self.config); let rendered_markdown = render(body, &self.config, false);
let post = Post { let post = Post {
meta: &metadata, meta: &metadata,
rendered_markdown, rendered_markdown,
@ -148,10 +148,13 @@ impl PostManager {
Ok((metadata, post, (parsing, rendering))) Ok((metadata, post, (parsing, rendering)))
} }
pub async fn list_posts(&self) -> Result<Vec<PostMetadata>, PostError> { async fn list_posts_recursive(
&self,
dir: impl AsRef<Path>,
) -> Result<Vec<PostMetadata>, PostError> {
let mut posts = Vec::new(); let mut posts = Vec::new();
let mut read_dir = fs::read_dir(&self.dir).await?; let mut read_dir = fs::read_dir(dir).await?;
while let Some(entry) = read_dir.next_entry().await? { while let Some(entry) = read_dir.next_entry().await? {
let path = entry.path(); let path = entry.path();
let stat = fs::metadata(&path).await?; let stat = fs::metadata(&path).await?;
@ -182,6 +185,11 @@ impl PostManager {
Ok(posts) Ok(posts)
} }
#[allow(unused)]
pub async fn list_posts(&self) -> Result<Vec<PostMetadata>, PostError> {
self.list_posts_recursive(&self.dir).await
}
// third entry in the tuple is whether it got rendered and if so, how long did it take // third entry in the tuple is whether it got rendered and if so, how long did it take
pub async fn get_post( pub async fn get_post(
&self, &self,