From b8f61569dbede77a3642bb44f6d213df8f4a9e5e Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 27 May 2025 02:43:36 -0700 Subject: feat(directory): Sort routes by hits --- src/modules/directory.rs | 25 ++++++++++++++++++++----- src/route.rs | 4 +++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/modules/directory.rs b/src/modules/directory.rs index 9eddc31..4179175 100644 --- a/src/modules/directory.rs +++ b/src/modules/directory.rs @@ -1,3 +1,5 @@ +use crate::route::hits_from; + pub fn module(router: &mut windmark::router::Router) { crate::route::track_mount( router, @@ -8,11 +10,24 @@ pub fn module(router: &mut windmark::router::Router) { &format!( "# Directory\n\nA map of all publicly available routes on this \ Gemini capsule\n\n{}", - (*crate::route::ROUTES.lock().unwrap()) - .iter() - .map(|(r, d)| format!("=> {} {}", r, d.description)) - .collect::>() - .join("\n") + { + let mut lines = (*crate::route::ROUTES.lock().unwrap()) + .iter() + .map(|(r, d)| format!("=> {} {}", r, d.description)) + .collect::>(); + let standard_transform = |route: &str| { + route.replace("=> ", "").split(' ').collect::>()[0] + .to_string() + }; + + lines.sort_by(|a, b| { + hits_from(&standard_transform(a)) + .cmp(&hits_from(&standard_transform(b))) + }); + lines.reverse(); + + lines.join("\n") + } ), &context, ) diff --git a/src/route.rs b/src/route.rs index 12cc8f1..171952c 100644 --- a/src/route.rs +++ b/src/route.rs @@ -25,7 +25,9 @@ impl Route { pub fn hits_from(route: &str) -> i32 { crate::DATABASE.lock().map_or(0, |database| { - (*database).get::(if route.is_empty() { "/" } else { route }).unwrap() + (*database) + .get::(if route.is_empty() { "/" } else { route }) + .unwrap_or(0) }) } -- cgit v1.2.3