diff options
| author | Fuwn <[email protected]> | 2026-01-12 05:56:09 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-12 05:56:09 -0800 |
| commit | cb6df8c2749d8d3b88342398f3e5c13457206a2f (patch) | |
| tree | a56230a03f370f6b263db469d5e74e5786e3a7cb /src/modules/blog/module.rs | |
| parent | feat(directory): Sort routes by hits (diff) | |
| download | locus-cb6df8c2749d8d3b88342398f3e5c13457206a2f.tar.xz locus-cb6df8c2749d8d3b88342398f3e5c13457206a2f.zip | |
fix: Various optimisations
Diffstat (limited to 'src/modules/blog/module.rs')
| -rw-r--r-- | src/modules/blog/module.rs | 104 |
1 files changed, 51 insertions, 53 deletions
diff --git a/src/modules/blog/module.rs b/src/modules/blog/module.rs index f68c2bc..8ffff90 100644 --- a/src/modules/blog/module.rs +++ b/src/modules/blog/module.rs @@ -34,23 +34,31 @@ pub fn module(router: &mut windmark::router::Router) { fs::File::open(&file).unwrap().read_to_string(&mut contents).unwrap(); - entries.insert( - file.replace(&blog, "").replace(".gmi", "").replace( - { - #[cfg(windows)] - { - '\\' - } + let mut entry_key = + file.strip_prefix(&blog).unwrap_or(&file).to_string(); + + if std::path::Path::new(&entry_key) + .extension() + .map_or(false, |extension| extension.eq_ignore_ascii_case("gmi")) + { + entry_key.truncate(entry_key.len() - 4); + } - #[cfg(unix)] - { - '/' - } - }, - "", - ), - contents, - ); + if entry_key.starts_with({ + #[cfg(windows)] + { + '\\' + } + + #[cfg(unix)] + { + '/' + } + }) { + entry_key.remove(0); + } + + entries.insert(entry_key, contents); }, ); @@ -111,31 +119,26 @@ pub fn module(router: &mut windmark::router::Router) { blog_clone.len(), blog_clone .iter() - .map(|(title, _, entries)| (title.clone(), entries.clone())) - .collect::<Vec<(_, _)>>() - .into_iter() - .map(|(title, entries)| { + .map(|(title, _, entries)| { let config: Option<Blog> = entries .get("blog.json") .and_then(|content| Blog::from_string(content).ok()); let name = config - .clone() - .unwrap_or_default() - .name() - .clone() + .as_ref() + .and_then(|c| c.name().as_ref()) + .cloned() .unwrap_or_else(|| title.clone()); - let description = config.unwrap_or_default().description().clone(); - // .unwrap_or_else(|| "One of Fuwn's blogs".to_string()); + let description = + config.as_ref().and_then(|c| c.description().as_ref()).cloned(); format!( "=> {} {}{}", format_args!("/blog/{}", name.replace(' ', "_").to_lowercase(),), name, - if description.is_some() { - format!(" ― {}", description.unwrap()) - } else { - String::new() - } + description + .map_or_else(String::new, |description_reference| format!( + " ― {description_reference}" + )) ) }) .collect::<Vec<_>>() @@ -154,21 +157,20 @@ pub fn module(router: &mut windmark::router::Router) { .and_then(|(_, content)| Blog::from_string(&content).ok()); let entries_clone = entries.clone(); let name = config - .clone() - .unwrap_or_default() - .name() - .clone() + .as_ref() + .and_then(|c| c.name().as_ref()) + .cloned() .unwrap_or_else(|| blog.clone()); - let description = config.clone().unwrap_or_default().description().clone(); - // .unwrap_or_else(|| "One of Fuwn's blogs".to_string()); + let description = + config.as_ref().and_then(|c| c.description().as_ref()).cloned(); let config_clone = config.clone(); let mut xml = XmlWriter::builder(); xml.add_field("title", &name); xml.add_field("link", &format!("{ROOT_GEMINI_URL}/blog/{fixed_blog_name}")); - if description.is_some() { - xml.add_field("description", &description.clone().unwrap()); + if let Some(ref description_reference) = description { + xml.add_field("description", description_reference); } xml.add_field("generator", "locus"); @@ -180,11 +182,11 @@ pub fn module(router: &mut windmark::router::Router) { &format!("/blog/{fixed_blog_name}"), &format!( "{name}{}", - if description.clone().is_some() { - format!(" ― {}", description.clone().unwrap()) - } else { - String::new() - } + description + .as_ref() + .map_or_else(String::new, |description_reference| format!( + " ― {description_reference}" + )) ), move |context| { let fixed_blog_name = fixed_blog_name_clone.clone(); @@ -195,19 +197,15 @@ pub fn module(router: &mut windmark::router::Router) { {0}'s RSS feed\n\n=> {} here!", blog, entries_clone.len(), - description.clone().unwrap_or_default(), + description.as_deref().unwrap_or(""), entries_clone .keys() - .map(Clone::clone) - .collect::<Vec<_>>() - .into_iter() .map(|title| { let postish = config_clone - .clone() - .unwrap_or_default() - .posts() - .clone() - .and_then(|posts| posts.get(&title).cloned()) + .as_ref() + .and_then(|c| c.posts().as_ref()) + .and_then(|posts| posts.get(title)) + .cloned() .unwrap_or_default(); format!( |