diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/args.rs | 5 | ||||
-rw-r--r-- | src/listing.rs | 6 | ||||
-rw-r--r-- | src/main.rs | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/args.rs b/src/args.rs index dc160d0..4c0878e 100644 --- a/src/args.rs +++ b/src/args.rs @@ -110,6 +110,10 @@ struct CLIArgs { #[structopt(short = "z", long = "enable-zip")] enable_zip: bool, + /// List directories first + #[structopt(short = "D", long = "dirs-first")] + dirs_first: bool, + /// Shown instead of host in page title and heading #[structopt(short = "t", long = "title")] title: Option<String>, @@ -219,6 +223,7 @@ pub fn parse_args() -> crate::MiniserveConfig { file_upload: args.file_upload, tar_enabled: args.enable_tar, zip_enabled: args.enable_zip, + dirs_first: args.dirs_first, title: args.title, } } diff --git a/src/listing.rs b/src/listing.rs index eb0b8e1..d7cfd7e 100644 --- a/src/listing.rs +++ b/src/listing.rs @@ -158,6 +158,7 @@ pub fn directory_listing( upload_route: String, tar_enabled: bool, zip_enabled: bool, + dirs_first: bool, title: Option<String>, ) -> Result<ServiceResponse, io::Error> { use actix_web::dev::BodyEncoding; @@ -321,6 +322,11 @@ pub fn directory_listing( entries.reverse() } + // List directories first + if dirs_first { + entries.sort_by_key(|e| !e.is_dir()); + } + if let Some(compression_method) = query_params.download { if !compression_method.is_enabled(tar_enabled, zip_enabled) { return Ok(ServiceResponse::new( diff --git a/src/main.rs b/src/main.rs index 04a9cae..577018f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,6 +83,9 @@ pub struct MiniserveConfig { /// If false, creation of zip archives is disabled pub zip_enabled: bool, + /// If enabled, directories are listed first + pub dirs_first: bool, + /// Shown instead of host in page title and heading pub title: Option<String>, } @@ -295,6 +298,7 @@ fn configure_app(app: &mut web::ServiceConfig, conf: &MiniserveConfig) { let file_upload = conf.file_upload; let tar_enabled = conf.tar_enabled; let zip_enabled = conf.zip_enabled; + let dirs_first = conf.dirs_first; let title = conf.title.clone(); upload_route = if let Some(random_route) = conf.random_route.clone() { format!("/{}/upload", random_route) @@ -327,6 +331,7 @@ fn configure_app(app: &mut web::ServiceConfig, conf: &MiniserveConfig) { u_r.clone(), tar_enabled, zip_enabled, + dirs_first, title.clone(), ) }) |