Use xdg_mime::SharedMimeInfo to find icon names for mime types
This commit is contained in:
parent
983e85ab89
commit
ed8fd870a9
3 changed files with 97 additions and 13 deletions
91
Cargo.lock
generated
91
Cargo.lock
generated
|
|
@ -64,7 +64,7 @@ source = "git+https://github.com/wash2/accesskit.git?tag=winit-0.28#db6f2587f663
|
|||
dependencies = [
|
||||
"accesskit",
|
||||
"accesskit_consumer",
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"once_cell",
|
||||
"paste",
|
||||
"windows",
|
||||
|
|
@ -207,6 +207,12 @@ version = "0.3.7"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.7.4"
|
||||
|
|
@ -872,6 +878,7 @@ dependencies = [
|
|||
"serde",
|
||||
"syntect",
|
||||
"two-face",
|
||||
"xdg-mime",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1170,6 +1177,16 @@ dependencies = [
|
|||
"dirs-sys 0.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-next"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"dirs-sys-next",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys"
|
||||
version = "0.3.7"
|
||||
|
|
@ -1193,6 +1210,17 @@ dependencies = [
|
|||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys-next"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dispatch"
|
||||
version = "0.2.0"
|
||||
|
|
@ -1897,6 +1925,12 @@ dependencies = [
|
|||
"system-deps",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
|
||||
[[package]]
|
||||
name = "glow"
|
||||
version = "0.12.3"
|
||||
|
|
@ -2553,7 +2587,7 @@ version = "0.9.5"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -2568,6 +2602,19 @@ version = "0.5.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
|
||||
|
||||
[[package]]
|
||||
name = "lexical-core"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
|
||||
dependencies = [
|
||||
"arrayvec 0.5.2",
|
||||
"bitflags 1.3.2",
|
||||
"cfg-if",
|
||||
"ryu",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.150"
|
||||
|
|
@ -2745,7 +2792,7 @@ version = "1.0.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74df1ff0a0147282eb10699537a03baa7d31972b58984a1d44ce0624043fe8ad"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"euclid",
|
||||
"num-traits",
|
||||
]
|
||||
|
|
@ -3041,6 +3088,17 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "5.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b"
|
||||
dependencies = [
|
||||
"lexical-core",
|
||||
"memchr",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
|
|
@ -4499,7 +4557,7 @@ name = "taffy"
|
|||
version = "0.3.11"
|
||||
source = "git+https://github.com/DioxusLabs/taffy#1876f72bee5e376023eaa518aa7b8a34c769bd1b"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"grid",
|
||||
"num-traits",
|
||||
"slotmap",
|
||||
|
|
@ -4600,7 +4658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"bytemuck",
|
||||
"cfg-if",
|
||||
"png",
|
||||
|
|
@ -4614,7 +4672,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"bytemuck",
|
||||
"cfg-if",
|
||||
"log",
|
||||
|
|
@ -5276,7 +5334,7 @@ version = "0.16.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"log",
|
||||
|
|
@ -5300,7 +5358,7 @@ version = "0.16.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"bit-vec",
|
||||
"bitflags 2.4.1",
|
||||
"codespan-reporting",
|
||||
|
|
@ -5324,7 +5382,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448"
|
||||
dependencies = [
|
||||
"android_system_properties",
|
||||
"arrayvec",
|
||||
"arrayvec 0.7.4",
|
||||
"ash",
|
||||
"bit-set",
|
||||
"bitflags 2.4.1",
|
||||
|
|
@ -5693,7 +5751,7 @@ version = "0.3.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
|
||||
dependencies = [
|
||||
"nom",
|
||||
"nom 7.1.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -5712,6 +5770,19 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xdg-mime"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87bf7b69bb50588d70a36e467be29d3df3e8c32580276d62eded9738c1a797aa"
|
||||
dependencies = [
|
||||
"dirs-next",
|
||||
"glob",
|
||||
"mime",
|
||||
"nom 5.1.3",
|
||||
"unicase",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xml-rs"
|
||||
version = "0.8.19"
|
||||
|
|
|
|||
|
|
@ -11,10 +11,12 @@ fontdb = "0.15.0"
|
|||
lazy_static = "1.4.0"
|
||||
log = "0.4.20"
|
||||
mime_guess = "2"
|
||||
#TODO: this is using gtk for file dialogues
|
||||
rfd = { version = "0.12.0", optional = true }
|
||||
serde = { version = "1", features = ["serde_derive"] }
|
||||
syntect = "5.1.0"
|
||||
two-face = "0.3.0"
|
||||
xdg-mime = "0.3.3"
|
||||
# Internationalization
|
||||
i18n-embed = { version = "0.13.4", features = ["fluent-system", "desktop-requester"] }
|
||||
i18n-embed-fl = "0.6.4"
|
||||
|
|
|
|||
|
|
@ -3,11 +3,22 @@ use std::path::Path;
|
|||
|
||||
pub const FALLBACK_MIME_ICON: &str = "text-x-generic";
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
static ref SHARED_MIME_INFO: xdg_mime::SharedMimeInfo = xdg_mime::SharedMimeInfo::new();
|
||||
}
|
||||
|
||||
pub fn mime_icon<P: AsRef<Path>>(path: P, size: u16) -> icon::Icon {
|
||||
let path = path.as_ref();
|
||||
for mime in mime_guess::from_path(path).iter() {
|
||||
//TODO: correct some common issues (like application/x-sh not being found)
|
||||
let icon_name = mime.essence_str().replace("/", "-");
|
||||
//TODO: SHARED_MIME_INFO.get_mime_types_from_file_name(path)
|
||||
for mime_type in mime_guess::from_path(path) {
|
||||
for icon_name in SHARED_MIME_INFO.lookup_icon_names(&mime_type) {
|
||||
let named = icon::from_name(icon_name).size(size);
|
||||
if named.clone().path().is_some() {
|
||||
return named.icon();
|
||||
}
|
||||
}
|
||||
|
||||
let icon_name = mime_type.essence_str().replace("/", "-");
|
||||
let named = icon::from_name(icon_name).size(size);
|
||||
if named.clone().path().is_some() {
|
||||
return named.icon();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue