diff --git a/.changes/deep-link-execute-error.md b/.changes/deep-link-execute-error.md new file mode 100644 index 000000000..dc32c6765 --- /dev/null +++ b/.changes/deep-link-execute-error.md @@ -0,0 +1,5 @@ +--- +"deep-link": major +--- + +**Breaking:** On Linux, failing to run `xdg-mime` or `update-desktop-database` in `register` and `is_registered` now returns the new `Error::Execute(command, io_error)` variant instead of logging the failure and returning the raw `Error::Io`. diff --git a/plugins/deep-link/src/error.rs b/plugins/deep-link/src/error.rs index 41eb764f1..1ef7aa6ba 100644 --- a/plugins/deep-link/src/error.rs +++ b/plugins/deep-link/src/error.rs @@ -23,21 +23,15 @@ pub enum Error { #[cfg(target_os = "linux")] #[error(transparent)] ParseIni(#[from] ini::ParseError), + /// Failed to run an OS command such as `xdg-mime` or `update-desktop-database`. + #[cfg(target_os = "linux")] + #[error("Failed to run OS command `{0}`: {1}")] + Execute(&'static str, #[source] std::io::Error), #[cfg(mobile)] #[error(transparent)] PluginInvoke(#[from] tauri::plugin::mobile::PluginInvokeError), } -// TODO(v3): change this into an error in v3, -// see . -#[inline] -#[cfg(target_os = "linux")] -pub(crate) fn inspect_command_error<'a>(command: &'a str) -> impl Fn(&std::io::Error) + 'a { - move |e| { - tracing::error!("Failed to run OS command `{command}`: {e}"); - } -} - impl Serialize for Error { fn serialize(&self, serializer: S) -> std::result::Result where diff --git a/plugins/deep-link/src/lib.rs b/plugins/deep-link/src/lib.rs index b60ca810f..574a79881 100644 --- a/plugins/deep-link/src/lib.rs +++ b/plugins/deep-link/src/lib.rs @@ -351,14 +351,12 @@ mod imp { Command::new("update-desktop-database") .arg(target) .status() - .inspect_err(crate::error::inspect_command_error( - "update-desktop-database", - ))?; + .map_err(|error| crate::Error::Execute("update-desktop-database", error))?; Command::new("xdg-mime") .args(["default", &file_name, mime_type.as_str()]) .status() - .inspect_err(crate::error::inspect_command_error("xdg-mime"))?; + .map_err(|error| crate::Error::Execute("xdg-mime", error))?; Ok(()) } @@ -463,7 +461,7 @@ mod imp { &format!("x-scheme-handler/{}", _protocol.as_ref()), ]) .output() - .inspect_err(crate::error::inspect_command_error("xdg-mime"))?; + .map_err(|error| crate::Error::Execute("xdg-mime", error))?; Ok(String::from_utf8_lossy(&output.stdout).contains(&file_name)) }