1
1
mirror of https://github.com/ellie/atuin.git synced 2024-09-11 21:18:22 +03:00

fix(gui): add support for checking if the cli is installed on windows (#2162)

* fix(windows): add support for checking if the cli is installed on windows

* refactor: remove debugging info

* refactor: cargo fmt
This commit is contained in:
YummyOreo 2024-06-19 05:55:03 -05:00 committed by GitHub
parent 33ef734116
commit 5f66fb6a03
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 9 deletions

View File

@ -4,6 +4,7 @@ use serde::Serialize;
use sysinfo::{get_current_pid, Process, System};
use thiserror::Error;
#[derive(PartialEq)]
pub enum Shell {
Sh,
Bash,
@ -11,6 +12,7 @@ pub enum Shell {
Zsh,
Xonsh,
Nu,
Powershell,
Unknown,
}
@ -24,6 +26,7 @@ impl std::fmt::Display for Shell {
Shell::Nu => "nu",
Shell::Xonsh => "xonsh",
Shell::Sh => "sh",
Shell::Powershell => "powershell",
Shell::Unknown => "unknown",
};
@ -91,6 +94,8 @@ impl Shell {
Shell::Sh.run_interactive([
"dscl localhost -read \"/Local/Default/Users/$USER\" shell | awk '{print $2}'",
])?
} else if cfg!(windows) {
return Ok(Shell::Powershell);
} else {
Shell::Sh.run_interactive(["getent passwd $LOGNAME | cut -d: -f7"])?
};
@ -115,6 +120,7 @@ impl Shell {
"xonsh" => Shell::Xonsh,
"nu" => Shell::Nu,
"sh" => Shell::Sh,
"powershell" => Shell::Powershell,
_ => Shell::Unknown,
}
@ -133,12 +139,18 @@ impl Shell {
S: AsRef<OsStr>,
{
let shell = self.to_string();
let output = Command::new(shell)
.arg("-ic")
.args(args)
.output()
.map_err(|e| ShellError::ExecError(e.to_string()))?;
let output = if self == &Self::Powershell {
Command::new(shell)
.args(args)
.output()
.map_err(|e| ShellError::ExecError(e.to_string()))?
} else {
Command::new(shell)
.arg("-ic")
.args(args)
.output()
.map_err(|e| ShellError::ExecError(e.to_string()))?
};
Ok(String::from_utf8(output.stdout).unwrap())
}

View File

@ -23,9 +23,14 @@ pub(crate) async fn install_cli() -> Result<(), String> {
#[tauri::command]
pub(crate) async fn is_cli_installed() -> Result<bool, String> {
let shell = Shell::default_shell().map_err(|e| format!("Failed to get default shell: {e}"))?;
let output = shell
.run_interactive(&["atuin --version && echo 'ATUIN FOUND'"])
.map_err(|e| format!("Failed to run interactive command"))?;
let output = if shell == Shell::Powershell {
shell.run_interactive(&["atuin --version; if ($?) {echo 'ATUIN FOUND'}"])
.map_err(|e| format!("Failed to run interactive command"))?
} else {
shell
.run_interactive(&["atuin --version && echo 'ATUIN FOUND'"])
.map_err(|e| format!("Failed to run interactive command"))?
};
Ok(output.contains("ATUIN FOUND"))
}