👷 use best available pacman wrapper(also gui)

This commit is contained in:
Vladislav Nepogodin 2022-07-06 22:30:28 +04:00
parent 325075a6b3
commit 1bef9e2086
No known key found for this signature in database
GPG Key ID: B62C3D10C54D5DA9
2 changed files with 34 additions and 4 deletions

View File

@ -1,4 +1,5 @@
use crate::utils;
use crate::utils::PacmanWrapper;
#[derive(Clone, Debug)]
#[repr(C)]
@ -74,15 +75,28 @@ impl AlpmHelper {
}
fn install_apps(&self, pkg_list: &Vec<String>, install: bool) -> bool {
let mut install_arg: &str = "-Sy";
if pkg_list.is_empty() {
return false;
} else if !install {
install_arg = "-R";
}
let (cmd, escalate) = match install {
true => match utils::get_pacman_wrapper_gui() {
PacmanWrapper::Pamac => ("pamac-installer", false),
PacmanWrapper::Pak => ("pak -Sy", false),
PacmanWrapper::Yay => ("yay -Sy", false),
PacmanWrapper::Paru => ("paru -Sy", false),
_ => ("pacman -Sy", true),
},
false => match utils::get_pacman_wrapper_gui() {
PacmanWrapper::Pamac => ("pamac-installer --remove", false),
PacmanWrapper::Pak => ("pak -R", false),
PacmanWrapper::Yay => ("yay -R", false),
PacmanWrapper::Paru => ("paru -R", false),
_ => ("pacman -R", true),
},
};
let packages_do = pkg_list.iter().map(|s| s.to_string() + " ").collect::<String>();
let _ = utils::run_cmd_terminal(format!("pacman {} {}", install_arg, packages_do), true);
let _ = utils::run_cmd_terminal(format!("{} {}", cmd, packages_do), escalate);
match install {
true => self.app_installed(&pkg_list[0]),
false => !self.app_installed(&pkg_list[0]),

View File

@ -10,6 +10,7 @@ pub enum PacmanWrapper {
Pak,
Yay,
Paru,
Pamac,
Pacman,
}
@ -105,6 +106,21 @@ pub fn get_pacman_wrapper() -> PacmanWrapper {
PacmanWrapper::Pacman
}
#[inline]
pub fn get_pacman_wrapper_gui() -> PacmanWrapper {
if Path::new("/sbin/pamac-installer").exists() {
return PacmanWrapper::Pamac;
} else if Path::new("/sbin/pak").exists() {
return PacmanWrapper::Pak;
} else if Path::new("/sbin/yay").exists() {
return PacmanWrapper::Yay;
} else if Path::new("/sbin/paru").exists() {
return PacmanWrapper::Paru;
}
PacmanWrapper::Pacman
}
#[cfg(test)]
mod test {
use super::*;