diff --git a/Cargo.lock b/Cargo.lock index 407dfa3..f5bd22b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,9 +105,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "cc" -version = "1.0.61" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d" +checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40" [[package]] name = "cfg-if" @@ -172,9 +172,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "core-foundation" -version = "0.7.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" dependencies = [ "core-foundation-sys", "libc", @@ -182,9 +182,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" [[package]] name = "crossbeam-utils" @@ -285,6 +285,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + [[package]] name = "freedesktop_entry_parser" version = "1.1.0" @@ -704,9 +714,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" +checksum = "1a1cda389c26d6b88f3d2dc38aa1b750fe87d298cc5d795ec9e975f402f00372" dependencies = [ "lazy_static", "libc", @@ -799,9 +809,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac6fe3538f701e339953a3ebbe4f39941aababa8a3f6964635b24ab526daeac" +checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" [[package]] name = "percent-encoding" @@ -1106,9 +1116,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "0.4.4" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" +checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69" dependencies = [ "bitflags", "core-foundation", @@ -1119,9 +1129,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "0.4.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" +checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b" dependencies = [ "core-foundation-sys", "libc", @@ -1452,10 +1462,11 @@ checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" [[package]] name = "url" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ + "form_urlencoded", "idna", "matches", "percent-encoding", diff --git a/src/common/desktop_entry.rs b/src/common/desktop_entry.rs index 8835182..dfb7ea8 100644 --- a/src/common/desktop_entry.rs +++ b/src/common/desktop_entry.rs @@ -73,9 +73,8 @@ impl DesktopEntry { // If the entry expects a terminal (emulator), but this process is not running in one, we // launch a new one. if self.term && !atty::is(atty::Stream::Stdout) { - let terminal_emulator_args = - shlex::split(&CONFIG.terminal_emulator).unwrap(); - split = terminal_emulator_args + split = shlex::split(&CONFIG.terminal_emulator) + .unwrap() .into_iter() .chain(split.into_iter()) .collect(); diff --git a/src/common/mime_types.rs b/src/common/mime_types.rs index 2bb8a69..381f60d 100644 --- a/src/common/mime_types.rs +++ b/src/common/mime_types.rs @@ -42,32 +42,37 @@ impl TryFrom<&str> for MimeType { } } +fn mime_to_option(mime: Mime) -> Option { + if mime == mime::APPLICATION_OCTET_STREAM { + None + } else { + Some(mime) + } +} + impl TryFrom<&Path> for MimeType { type Error = Error; fn try_from(path: &Path) -> Result { use mime::APPLICATION_OCTET_STREAM as UNKNOWN; let db = xdg_mime::SharedMimeInfo::new(); - let name_guess = || match path.file_name() { + let name_guess = mime_to_option(match path.file_name() { Some(f) => db.get_mime_types_from_file_name(&f.to_string_lossy()) [0] .clone(), None => UNKNOWN, - }; + }); - let content_guess = db.guess_mime_type().path(&path).guess(); + let content_guess = mime_to_option({ + let guess = db.guess_mime_type().path(&path).guess(); + guess.mime_type().clone() + }); - let mime = match (name_guess(), content_guess.mime_type().clone()) { - (m1, m2) if m1 == UNKNOWN && m2 == UNKNOWN => { - return Err(Error::Ambiguous(path.to_owned())) - } - (m1, m2) if m1 == UNKNOWN => m2, - (m1, m2) if m2 == UNKNOWN => m1, - (m1, m2) if m1 != m2 => m2, - (m1, _) => m1, - }; - - Ok(Self(mime.clone())) + Ok(Self( + name_guess + .or(content_guess) + .ok_or_else(|| Error::Ambiguous(path.to_owned()))?, + )) } } @@ -123,7 +128,10 @@ mod tests { #[test] fn filename_priority() -> Result<()> { - assert_eq!(MimeType::try_from("./tests/p.html")?.0, "text/html"); + assert_eq!( + MimeType::try_from("./tests/p.html")?.0, + "application/x-extension-html" + ); Ok(()) }