Эх сурвалжийг харах

fix(core): sidecar command path (#1584)

Lucas Fernandes Nogueira 4 жил өмнө
parent
commit
99307d02c3

+ 5 - 0
.changes/sidecar-fix.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch
+---
+
+Fixes `sidecar` Command API.

+ 30 - 5
core/tauri/src/api/command.rs

@@ -23,7 +23,7 @@ use shared_child::SharedChild;
 use tauri_utils::platform;
 
 /// Payload for the `Terminated` command event.
-#[derive(Serialize)]
+#[derive(Debug, Clone, Serialize)]
 pub struct TerminatedPayload {
   /// Exit code of the process.
   pub code: Option<i32>,
@@ -32,7 +32,7 @@ pub struct TerminatedPayload {
 }
 
 /// A event sent to the command callback.
-#[derive(Serialize)]
+#[derive(Debug, Clone, Serialize)]
 #[serde(tag = "event", content = "payload")]
 pub enum CommandEvent {
   /// Stderr line.
@@ -88,6 +88,30 @@ impl CommandChild {
   }
 }
 
+#[cfg(not(windows))]
+fn relative_command_path(command: String) -> crate::Result<String> {
+  match std::env::current_exe()?.parent() {
+    Some(exe_dir) => Ok(format!(
+      "{}/{}",
+      exe_dir.to_string_lossy().to_string(),
+      command
+    )),
+    None => Err(super::Error::Command("Could not evaluate executable dir".to_string()).into()),
+  }
+}
+
+#[cfg(windows)]
+fn relative_command_path(command: String) -> crate::Result<String> {
+  match std::env::current_exe()?.parent() {
+    Some(exe_dir) => Ok(format!(
+      "{}/{}.exe",
+      exe_dir.to_string_lossy().to_string(),
+      command
+    )),
+    None => Err(super::Error::Command("Could not evaluate executable dir".to_string()).into()),
+  }
+}
+
 impl Command {
   /// Creates a new Command for launching the given program.
   pub fn new<S: Into<String>>(program: S) -> Self {
@@ -98,12 +122,13 @@ impl Command {
   }
 
   /// Creates a new Command for launching the given sidecar program.
-  pub fn new_sidecar<S: Into<String>>(program: S) -> Self {
-    Self::new(format!(
+  pub fn new_sidecar<S: Into<String>>(program: S) -> crate::Result<Self> {
+    let program = format!(
       "{}-{}",
       program.into(),
       platform::target_triple().expect("unsupported platform")
-    ))
+    );
+    Ok(Self::new(relative_command_path(program)?))
   }
 
   /// Append args to the command.

+ 3 - 0
core/tauri/src/api/error.rs

@@ -5,6 +5,9 @@
 /// The error types.
 #[derive(thiserror::Error, Debug)]
 pub enum Error {
+  /// Command error.
+  #[error("Command Error: {0}")]
+  Command(String),
   /// The extract archive error.
   #[error("Extract Error: {0}")]
   Extract(String),

+ 1 - 1
core/tauri/src/endpoints/shell.rs

@@ -70,7 +70,7 @@ impl Cmd {
         #[cfg(shell_execute)]
         {
           let mut command = if sidecar {
-            Command::new_sidecar(program)
+            Command::new_sidecar(program)?
           } else {
             Command::new(program)
           };