From 085debe43c09e56bad7f2bb950485ea7dd19822e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Czy=C5=BC?= Date: Sun, 4 Aug 2024 22:53:15 +0200 Subject: [PATCH] refactor and choose install --- src/cli.rs | 3 ++ src/main.rs | 3 +- src/packages/choose_install.rs | 50 ++++++++++++++++++++++++++++++++++ src/packages/find.rs | 2 +- src/packages/install.rs | 4 +-- src/packages/mod.rs | 4 +++ src/packages/rebuild.rs | 4 +-- src/packages/remove.rs | 3 +- src/packages/sync.rs | 4 +-- src/packages/upgrade.rs | 4 +-- 10 files changed, 65 insertions(+), 16 deletions(-) create mode 100644 src/packages/choose_install.rs diff --git a/src/cli.rs b/src/cli.rs index b769288..9fae514 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -35,6 +35,9 @@ pub enum Commands { #[command(alias = "f", about = "Find packages")] Find(Query), + + #[command(alias = "fi", about = "Find and install packages")] + ChooseInstall(Query), } #[derive(Args)] diff --git a/src/main.rs b/src/main.rs index 5b3f822..2d5af59 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,8 @@ fn main() { Some(cli::Commands::Sync { noconfirm }) => packages::sync(noconfirm), Some(cli::Commands::Remove(PackageList { packages })) => packages::remove(packages), Some(cli::Commands::Find(Query { query })) => packages::find(query), - None => packages::rebuild(true), + Some(cli::Commands::ChooseInstall(Query { query })) => packages::choose_install(query), + None => packages::upgrade(true), }; if let Err(err) = result { diff --git a/src/packages/choose_install.rs b/src/packages/choose_install.rs new file mode 100644 index 0000000..eca3fcc --- /dev/null +++ b/src/packages/choose_install.rs @@ -0,0 +1,50 @@ +use colored::Colorize; +use std::io::Write; +use std::process::{Command, Stdio}; + +use crate::packages::PACKAGE_MANAGER; + +pub fn choose_install(query: Vec) -> Result<(), Box> { + println!( + "{} {}", + "::".bold().green(), + "Looking for package...".bold() + ); + + if query.is_empty() { + return Err("No query provided".into()); + } + + let mut child = Command::new(PACKAGE_MANAGER) + .arg("--color") + .arg("always") + .arg("s") + .arg("-") + .stdin(Stdio::piped()) + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .expect("Failed to execute command"); + + if let Some(mut stdin) = child.stdin.take() { + for word in query.clone() { + writeln!(stdin, "{}", word).unwrap(); + } + } + + let status = child.wait().expect("Failed to wait on child"); + + if !status.success() { + return Err("Failed to install packages".into()); + } + + println!("{} {}", "::".bold().green(), "Packages installed".bold()); + + println!( + "{} {}", + "::".bold().red(), + "Package index has not been updated!".bold() + ); + + Ok(()) +} diff --git a/src/packages/find.rs b/src/packages/find.rs index 9a2e758..9d74eb6 100644 --- a/src/packages/find.rs +++ b/src/packages/find.rs @@ -1,7 +1,7 @@ use colored::Colorize; use std::process::Command; -const PACKAGE_MANAGER: &str = "paru"; +use crate::packages::PACKAGE_MANAGER; pub fn find(query: Vec) -> Result<(), Box> { println!( diff --git a/src/packages/install.rs b/src/packages/install.rs index baaf9e5..e5378c5 100644 --- a/src/packages/install.rs +++ b/src/packages/install.rs @@ -1,10 +1,9 @@ +use crate::packages::PACKAGE_MANAGER; use crate::{file, packages::get_package_path}; use colored::Colorize; use std::io::Write; use std::process::{Command, Stdio}; -const PACKAGE_MANAGER: &str = "paru"; - pub fn install(new_packages: Vec) -> Result<(), Box> { println!( "{} {}", @@ -24,7 +23,6 @@ pub fn install(new_packages: Vec) -> Result<(), Box PathBuf { let home_dir = std::env::var("HOME").unwrap(); diff --git a/src/packages/rebuild.rs b/src/packages/rebuild.rs index ffc53ff..eaadfd8 100644 --- a/src/packages/rebuild.rs +++ b/src/packages/rebuild.rs @@ -3,9 +3,7 @@ use std::io::Write; use std::process::{Command, Stdio}; use crate::file; -use crate::packages::{ask_confirmation, get_package_path}; - -const PACKAGE_MANAGER: &str = "paru"; +use crate::packages::{ask_confirmation, get_package_path, PACKAGE_MANAGER}; pub fn rebuild(noconfirm: bool) -> Result<(), Box> { println!( diff --git a/src/packages/remove.rs b/src/packages/remove.rs index f716668..f757f72 100644 --- a/src/packages/remove.rs +++ b/src/packages/remove.rs @@ -1,10 +1,9 @@ +use crate::packages::PACKAGE_MANAGER; use crate::{file, packages::get_package_path}; use colored::Colorize; use std::io::Write; use std::process::{Command, Stdio}; -const PACKAGE_MANAGER: &str = "paru"; - pub fn remove(unwanted_packages: Vec) -> Result<(), Box> { println!("{} {}", "::".bold().green(), "Removing packages...".bold()); diff --git a/src/packages/sync.rs b/src/packages/sync.rs index 68f8ecf..6365b2f 100644 --- a/src/packages/sync.rs +++ b/src/packages/sync.rs @@ -3,9 +3,7 @@ use std::io::Write; use std::process::{Command, Stdio}; use crate::file; -use crate::packages::{ask_confirmation, get_package_path}; - -const PACKAGE_MANAGER: &str = "paru"; +use crate::packages::{ask_confirmation, get_package_path, PACKAGE_MANAGER}; pub fn sync(noconfirm: bool) -> Result<(), Box> { println!("{} {}", "::".bold().green(), "Syncing packages...".bold()); diff --git a/src/packages/upgrade.rs b/src/packages/upgrade.rs index 3241ab5..da8e0d4 100644 --- a/src/packages/upgrade.rs +++ b/src/packages/upgrade.rs @@ -1,9 +1,7 @@ use colored::Colorize; use std::process::Command; -use crate::packages::ask_confirmation; - -const PACKAGE_MANAGER: &str = "paru"; +use crate::packages::{ask_confirmation, PACKAGE_MANAGER}; pub fn upgrade(noconfirm: bool) -> Result<(), Box> { println!("{} {}", "::".bold().green(), "Upgrading packages...".bold());