diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | Cargo.lock | 4 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | src/listing.rs | 17 | ||||
-rw-r--r-- | src/renderer.rs | 2 | ||||
-rw-r--r-- | tests/readme.rs | 22 |
6 files changed, 31 insertions, 19 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f0be364..ce9dad9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] - ReleaseDate - Faster QR code generation [#848](https://github.com/svenstaro/miniserve/pull/848/files) (thanks @cyqsimon) +- Make `--readme` support not only `README.md` but also `README` and `README.txt` rendered as + plaintext (thanks @Atreyagaurav) ## [0.21.0] - 2022-09-15 - Fix bug where static files would be served incorrectly when using `--random-route` [#835](https://github.com/svenstaro/miniserve/pull/835) (thanks @solarknight) @@ -839,9 +839,9 @@ dependencies = [ [[package]] name = "fast_qr" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b798dfd6e29b85c0bcf434272db4cde0100ab4d82c5db0a4f422e77b30d0b4e4" +checksum = "c6ca492f7dae5b7705f8997b042fcf7a665addb13181908d1fa7cb6d9bc1c0e6" dependencies = [ "wasm-bindgen", ] @@ -32,7 +32,7 @@ clap = { version = "3.2", features = ["derive", "cargo", "wrap_help"] } clap_complete = "3.2.3" clap_mangen = "0.1" comrak = "0.14.0" -fast_qr = "0.3.1" +fast_qr = "0.5.1" futures = "0.3" get_if_addrs = "0.5" hex = "0.4" @@ -45,6 +45,7 @@ mime = "0.3" nanoid = "0.4" percent-encoding = "2" port_check = "0.1" +regex = "1" rustls = { version = "0.20", optional = true } rustls-pemfile = { version = "1.0", optional = true } serde = { version = "1", features = ["derive"] } diff --git a/src/listing.rs b/src/listing.rs index 7477599..fbee8de 100644 --- a/src/listing.rs +++ b/src/listing.rs @@ -9,6 +9,7 @@ use actix_web::{HttpMessage, HttpRequest, HttpResponse}; use bytesize::ByteSize; use comrak::{markdown_to_html, ComrakOptions}; use percent_encoding::{percent_decode_str, utf8_percent_encode}; +use regex::Regex; use serde::Deserialize; use strum_macros::{Display, EnumString}; @@ -224,6 +225,7 @@ pub fn directory_listing( let mut entries: Vec<Entry> = Vec::new(); let mut readme: Option<(String, String)> = None; + let readme_rx: Regex = Regex::new("^readme([.](md|txt))?$").unwrap(); for entry in dir.path.read_dir()? { if dir.is_visible(&entry) || conf.show_hidden { @@ -274,13 +276,18 @@ pub fn directory_listing( last_modification_date, symlink_dest, )); - if conf.readme && file_name.to_lowercase() == "readme.md" { + if conf.readme && readme_rx.is_match(&file_name.to_lowercase()) { + let ext = file_name.split('.').last().unwrap().to_lowercase(); readme = Some(( file_name.to_string(), - markdown_to_html( - &std::fs::read_to_string(entry.path())?, - &ComrakOptions::default(), - ), + if ext == "md" { + markdown_to_html( + &std::fs::read_to_string(entry.path())?, + &ComrakOptions::default(), + ) + } else { + format!("<pre>{}</pre>", &std::fs::read_to_string(entry.path())?) + }, )); } } diff --git a/src/renderer.rs b/src/renderer.rs index 38d2617..6aad5bd 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -241,7 +241,7 @@ fn qr_code_svg(url: impl AsRef<str>, margin: usize) -> Result<String, QRCodeErro let qr = QRBuilder::new(url.as_ref().into()) .ecl(consts::QR_EC_LEVEL) .build()?; - let svg = SvgBuilder::new().margin(margin).build_qr(qr); + let svg = SvgBuilder::default().margin(margin).to_str(&qr); Ok(svg) } diff --git a/tests/readme.rs b/tests/readme.rs index 56a3afd..3fcbe29 100644 --- a/tests/readme.rs +++ b/tests/readme.rs @@ -64,7 +64,11 @@ fn show_root_readme_contents( case("readme.md"), case("README.md"), case("README.MD"), - case("ReAdMe.Md") + case("ReAdMe.Md"), + case("Readme.txt"), + case("README.txt"), + case("README"), + case("ReAdMe") )] fn show_nested_readme_contents( #[with(&["--readme"])] server: TestServer, @@ -113,13 +117,11 @@ fn assert_readme_contents(parsed_dom: &Document, filename: &str) { .find(Attr("id", "readme-contents")) .next() .is_some()); - assert!( - parsed_dom - .find(Attr("id", "readme-contents")) - .next() - .unwrap() - .text() - .trim() - == format!("Contents of {}", filename) - ); + assert!(parsed_dom + .find(Attr("id", "readme-contents")) + .next() + .unwrap() + .text() + .trim() + .contains(&format!("Contents of {}", filename))); } |