diff --git a/README.md b/README.md index 2bb63da..f125d2e 100644 --- a/README.md +++ b/README.md @@ -77,14 +77,20 @@ nexy -p /path/to/public_dir * this template file expects pattern and cannot be in binary format - **Patterns** * `{list}` - entries list for the `public` directory * `{hosts}` - unique visitors count * `{hits}` - requests count + **Patterns** + * `{list}` - entries list for the `public` directory + * `{hosts}` - unique visitors count + * `{hits}` - requests count --template-index Absolute path to the `Index` template file for each directory * this template file expects pattern and cannot be in binary format - **Patterns** * `{list}` - entries list for the current directory * `{hosts}` - unique visitors count * `{hits}` - requests count + **Patterns** + * `{list}` - entries list for the current directory + * `{hosts}` - unique visitors count + * `{hits}` - requests count --list-dir-show-count Show files count in dir (as the alternative text for navigation links) @@ -150,6 +156,9 @@ nexy -p /path/to/public_dir [default: %Y/%m/%d] + --list-url-encode + Encode listing URL match regex pattern (use `.*` for all entries) + -r, --read-chunk Optimize memory usage on reading large files or stream diff --git a/src/config.rs b/src/config.rs index 268681a..a9200e4 100644 --- a/src/config.rs +++ b/src/config.rs @@ -157,6 +157,10 @@ pub struct Config { #[arg(long, default_value_t = String::from("%Y/%m/%d"))] pub list_time_format: String, + /// Encode listing URL match regex pattern (use `.*` for all entries) + #[arg(long)] + pub list_url_encode: Option, + /// Optimize memory usage on reading large files or stream #[arg(short, long, default_value_t = 1024)] pub read_chunk: usize, diff --git a/src/session/public.rs b/src/session/public.rs index 5343989..a1ff6ac 100644 --- a/src/session/public.rs +++ b/src/session/public.rs @@ -184,7 +184,18 @@ impl Public { } for dir in dirs { r.push({ - let mut l = format!("=> {}/", encode(&dir.name)); // link + let mut l = format!( + "=> {}/", + self.list_config + .list_url_encode + .as_ref() + .and_then(|r| if r.is_match(&dir.name) { + Some(encode(&dir.name).to_string()) + } else { + None + }) + .unwrap_or(dir.name) + ); // link let mut a = Vec::new(); // alt if dc.alt.time.is_accessed { a.push(self.t(dir.meta.atime())) @@ -226,7 +237,18 @@ impl Public { } for file in files { r.push({ - let mut l = format!("=> {}", encode(&file.name)); // link + let mut l = format!( + "=> {}", + self.list_config + .list_url_encode + .as_ref() + .and_then(|r| if r.is_match(&file.name) { + Some(encode(&file.name).to_string()) + } else { + None + }) + .unwrap_or(file.name) + ); // link let mut a = Vec::new(); // alt if fc.alt.time.is_accessed { a.push(self.t(file.meta.atime())) diff --git a/src/session/public/list_config.rs b/src/session/public/list_config.rs index 233d56f..b446dfe 100644 --- a/src/session/public/list_config.rs +++ b/src/session/public/list_config.rs @@ -46,6 +46,7 @@ pub struct ListConfig { pub dir: Dir, pub file: File, pub time_format: String, + pub list_url_encode: Option, } impl ListConfig { @@ -123,6 +124,10 @@ impl ListConfig { }, }, time_format: config.list_time_format.clone(), + list_url_encode: config + .list_url_encode + .as_ref() + .map(|p| Regex::new(p).unwrap()), }) } }