mirror of
https://github.com/TECHNOFAB11/pay-respects.git
synced 2025-12-12 22:40:09 +01:00
feat: prompt to install missing command
This commit is contained in:
parent
ab3534f0ef
commit
c99c736ad5
7 changed files with 351 additions and 23 deletions
60
src/system.rs
Normal file
60
src/system.rs
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
use std::io::stderr;
|
||||
use std::process::Command;
|
||||
use std::process::Stdio;
|
||||
|
||||
pub fn get_package_manager(shell: &str) -> Option<String> {
|
||||
let package_managers = vec!["pacman", "apt", "dnf"];
|
||||
|
||||
for package_manager in package_managers {
|
||||
let success = Command::new(shell)
|
||||
.arg("-c")
|
||||
.arg(format!("command -v {}", package_manager))
|
||||
.output()
|
||||
.expect("failed to execute process")
|
||||
.status
|
||||
.success();
|
||||
|
||||
if success {
|
||||
return Some(package_manager.to_string());
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub fn get_packages(shell: &str, package_manager: &str, executable: &str) -> Option<Vec<String>> {
|
||||
match package_manager {
|
||||
"pacman" => {
|
||||
let result = Command::new(shell)
|
||||
.arg("-c")
|
||||
.arg(format!("pacman -Fq /usr/bin/{}", executable))
|
||||
.output()
|
||||
.expect("failed to execute process");
|
||||
if result.status.success() {
|
||||
let output = String::from_utf8_lossy(&result.stdout)
|
||||
.lines()
|
||||
.map(|line| line.split_whitespace().next().unwrap().to_string())
|
||||
.collect();
|
||||
Some(output)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
_ => unreachable!("Unsupported package manager"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn install_package(shell: &str, package_manager: &str, package: &str) -> bool {
|
||||
match package_manager {
|
||||
"pacman" => Command::new(shell)
|
||||
.arg("-c")
|
||||
.arg(format!("sudo pacman -S {}", package))
|
||||
.stdout(stderr())
|
||||
.stderr(Stdio::inherit())
|
||||
.spawn()
|
||||
.expect("failed to execute process")
|
||||
.wait()
|
||||
.unwrap()
|
||||
.success(),
|
||||
_ => unreachable!("Unsupported package manager"),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue