You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amethyst/src/operations/search.rs

80 lines
2.1 KiB
Rust

use crate::internal::commands::ShellCommand;
use crate::internal::error::SilentUnwrap;
use crate::internal::exit_code::AppExitCode;
use crate::internal::rpc::rpcsearch;
use crate::{info, log, Options};
use chrono::{Local, TimeZone};
use colored::Colorize;
3 years ago
2 years ago
#[allow(clippy::module_name_repetitions)]
pub fn aur_search(query: &str, options: Options) {
// Initialise variables
3 years ago
let verbosity = options.verbosity;
// Query AUR for package info
2 years ago
let res = rpcsearch(query);
3 years ago
// Format output
for package in &res.results {
3 years ago
println!(
"{}{} {} {}\n {}",
"aur/".cyan().bold(),
package.name.bold(),
package.version.green().bold(),
if package.out_of_date.is_some() {
format!(
"[out of date: since {}]",
Local
.timestamp(package.out_of_date.unwrap().try_into().unwrap(), 0)
.date_naive()
)
.red()
.bold()
} else {
"".bold()
},
package
.description
3 years ago
.as_ref()
.unwrap_or(&"No description".to_string())
2 years ago
);
3 years ago
}
if res.results.is_empty() {
info!("No results found for \"{}\" in the AUR", query);
}
if verbosity >= 1 {
log!("Found {} resuls for \"{}\" in AUR", res.resultcount, query);
}
3 years ago
}
2 years ago
#[allow(clippy::module_name_repetitions)]
pub fn repo_search(query: &str, options: Options) {
// Initialise variables
3 years ago
let verbosity = options.verbosity;
// Query pacman for package info
let output = ShellCommand::pacman()
.arg("-Ss")
.arg(query)
.wait_with_output()
.silent_unwrap(AppExitCode::PacmanError)
.stdout;
3 years ago
if verbosity >= 1 {
log!(
"Found {} results for \"{}\" in repos",
&output.split('\n').count() / 2,
&query
);
3 years ago
}
if output.trim().is_empty() {
info!("No results found for \"{}\" in the repos", query);
} else {
println!("{}", output.trim());
}
3 years ago
}