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.
107 lines
3.1 KiB
Rust
107 lines
3.1 KiB
Rust
use std::collections::{HashMap, HashSet};
|
|
|
|
use aur_rpc::PackageInfo;
|
|
use console::Alignment;
|
|
use crossterm::style::Stylize;
|
|
|
|
use crate::{
|
|
builder::pacman::PacmanQueryBuilder, fl, internal::dependencies::DependencyInformation,
|
|
};
|
|
|
|
use super::get_logger;
|
|
|
|
pub async fn print_dependency_list(dependencies: &[DependencyInformation]) -> bool {
|
|
let (mut deps_repo, mut makedeps_repo, deps_aur, makedeps_aur) = dependencies
|
|
.iter()
|
|
.map(|d| {
|
|
(
|
|
d.depends.repo.iter().collect(),
|
|
d.make_depends.repo.iter().collect(),
|
|
d.depends.aur.iter().collect(),
|
|
d.make_depends.aur.iter().collect(),
|
|
)
|
|
})
|
|
.fold(
|
|
(Vec::new(), Vec::new(), Vec::new(), Vec::new()),
|
|
|mut acc, mut deps| {
|
|
acc.0.append(&mut deps.0);
|
|
acc.1.append(&mut deps.1);
|
|
acc.2.append(&mut deps.2);
|
|
acc.3.append(&mut deps.3);
|
|
|
|
acc
|
|
},
|
|
);
|
|
deps_repo.dedup();
|
|
makedeps_repo.dedup();
|
|
|
|
let mut empty = true;
|
|
if !deps_repo.is_empty() {
|
|
tracing::info!("{}", fl!("repo-dependencies"));
|
|
get_logger().print_list(&deps_repo, " ", 2);
|
|
empty = false;
|
|
get_logger().print_newline();
|
|
}
|
|
if !deps_aur.is_empty() {
|
|
tracing::info!("{}", fl!("aur-dependencies"));
|
|
print_aur_package_list(&deps_aur).await;
|
|
empty = false;
|
|
get_logger().print_newline();
|
|
}
|
|
|
|
if !makedeps_repo.is_empty() {
|
|
tracing::info!("{}", fl!("repo-make-dependencies"));
|
|
get_logger().print_list(&makedeps_repo, " ", 2);
|
|
empty = false;
|
|
get_logger().print_newline();
|
|
}
|
|
|
|
if !makedeps_aur.is_empty() {
|
|
tracing::info!("{}", fl!("aur-make-dependencies"));
|
|
print_aur_package_list(&makedeps_aur).await;
|
|
empty = false;
|
|
get_logger().print_newline();
|
|
}
|
|
|
|
empty
|
|
}
|
|
|
|
pub async fn print_aur_package_list(packages: &[&PackageInfo]) -> bool {
|
|
let pkgs = packages
|
|
.iter()
|
|
.map(|p| p.metadata.name.clone())
|
|
.collect::<HashSet<_>>();
|
|
let installed = PacmanQueryBuilder::all()
|
|
.query_with_output()
|
|
.await
|
|
.unwrap()
|
|
.into_iter()
|
|
.filter(|p| pkgs.contains(&p.name))
|
|
.map(|p| (p.name.clone(), p))
|
|
.collect::<HashMap<_, _>>();
|
|
|
|
get_logger().print_list(
|
|
packages.iter().map(|pkg| {
|
|
format!(
|
|
"{} {} {} ({} {}) {}",
|
|
console::pad_str(&pkg.metadata.name, 30, Alignment::Left, Some("...")).bold(),
|
|
fl!("version"),
|
|
pkg.metadata.version.clone().dim(),
|
|
pkg.metadata.num_votes,
|
|
fl!("votes"),
|
|
if installed.contains_key(&pkg.metadata.name) {
|
|
format!("({})", fl!("capital-installed"))
|
|
} else {
|
|
"".to_string()
|
|
}
|
|
.bold()
|
|
.magenta()
|
|
)
|
|
}),
|
|
"\n",
|
|
2,
|
|
);
|
|
|
|
!installed.is_empty()
|
|
}
|