From 1c5824a6fbf87863716cec708a4d5d44d02bc882 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 23 Mar 2024 22:50:03 +0100 Subject: [PATCH] sort index --- src/main.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index f5f09fe..e8ecc92 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,18 +105,25 @@ fn get_file(request: Request) -> Option { } fn generate_index(relative_path: &str, path: &Path) -> Option { - let list = path + let mut dirs: Vec<_> = path .read_dir() .ok()? .flatten() - .filter_map(|e| { - let target = e.file_name().to_str()?.to_string(); + .filter_map(|d| { + let is_dir = d.file_type().ok()?.is_dir(); + d.file_name().to_str().map(|s| (s.to_owned(), is_dir)) + }) + .collect(); + dirs.sort_by(|(name_a, dir_a), (name_b, dir_b)| dir_b.cmp(dir_a).then(name_a.cmp(name_b))); + let list = dirs + .into_iter() + .filter_map(|(name, is_dir)| { let mut s = format!( - "
  • {}", - PathBuf::from(relative_path).join(&target).display(), - target + "
  • {}", + PathBuf::from(relative_path).join(&name).display(), + name ); - if e.file_type().ok()?.is_dir() { + if is_dir { s.push('/'); } s.push_str("
  • \n"); @@ -128,18 +135,15 @@ fn generate_index(relative_path: &str, path: &Path) -> Option { }); let page = format!( r#" - - Index of {relative_path}

    Index of {relative_path}

      -
    • ../
    • - {list} -
    +
  • ../
  • +{list} "#, );