diff --git a/Cargo.toml b/Cargo.toml index 80da6cd..d5a1477 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ process = ["dep:nix"] # Use rfd for file dialogs rfd = ["dep:rfd"] # Enables desktop files helpers -desktop = ["process", "dep:freedesktop-desktop-entry", "dep:shlex"] +desktop = ["process", "dep:freedesktop-desktop-entry", "dep:mime", "dep:shlex"] # Enables keycode serialization serde-keycode = ["iced_core/serde"] # Prevents multiple separate process instances. @@ -67,6 +67,7 @@ derive_setters = "0.1.5" fraction = "0.14.0" image = { version = "0.24.6", optional = true } lazy_static = "1.4.0" +mime = { version = "0.3.17", optional = true } nix = { version = "0.27", features = ["process"], optional = true } palette = "0.7.3" rfd = { version = "0.13.0", optional = true } diff --git a/src/desktop.rs b/src/desktop.rs index 9ec539f..7e74345 100644 --- a/src/desktop.rs +++ b/src/desktop.rs @@ -1,4 +1,5 @@ pub use freedesktop_desktop_entry::DesktopEntry; +pub use mime::Mime; use std::{ borrow::Cow, ffi::OsStr, @@ -57,6 +58,7 @@ pub struct DesktopEntryData { pub path: Option, pub categories: String, pub desktop_actions: Vec, + pub mime_types: Vec, pub prefers_dgpu: bool, } @@ -182,6 +184,15 @@ impl DesktopEntryData { .collect::>() }) .unwrap_or_default(), + mime_types: de + .mime_type() + .map(|mime_types| { + mime_types + .split_terminator(';') + .filter_map(|mime_type| mime_type.parse::().ok()) + .collect::>() + }) + .unwrap_or_default(), prefers_dgpu: de.prefers_non_default_gpu(), } }