cli: add progress indicators to various commands
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I49d0c21e12e5f424bad105b32845798d6a6a6964
This commit is contained in:
parent
d445b1814a
commit
1873bb19ae
4 changed files with 142 additions and 18 deletions
|
|
@ -1,4 +1,7 @@
|
|||
use std::{collections::HashMap, path::Path};
|
||||
use std::{collections::HashMap, path::Path, time::Duration};
|
||||
|
||||
use indicatif::{ProgressBar, ProgressStyle};
|
||||
use yansi::Paint;
|
||||
|
||||
use crate::{
|
||||
error::{PakkerError, Result},
|
||||
|
|
@ -113,6 +116,15 @@ pub async fn execute(
|
|||
|
||||
let platform = create_platform("curseforge", cf_api_key)?;
|
||||
|
||||
let spinner = ProgressBar::new_spinner();
|
||||
spinner.set_style(
|
||||
ProgressStyle::default_spinner()
|
||||
.template("{spinner:.green} {msg}")
|
||||
.expect("spinner template is valid"),
|
||||
);
|
||||
spinner.enable_steady_tick(Duration::from_millis(80));
|
||||
spinner.set_message("Fetching from CurseForge...");
|
||||
|
||||
let mut project = platform
|
||||
.request_project_with_files(&input, mc_versions, &loaders)
|
||||
.await
|
||||
|
|
@ -122,6 +134,8 @@ pub async fn execute(
|
|||
))
|
||||
})?;
|
||||
|
||||
spinner.finish_and_clear();
|
||||
|
||||
// If file_id specified, filter to that file
|
||||
if let Some(fid) = file_id {
|
||||
project.files.retain(|f| f.id == fid);
|
||||
|
|
@ -133,6 +147,7 @@ pub async fn execute(
|
|||
}
|
||||
|
||||
projects_to_merge.push(project);
|
||||
spinner.finish_and_clear();
|
||||
}
|
||||
|
||||
// Modrinth
|
||||
|
|
@ -142,6 +157,15 @@ pub async fn execute(
|
|||
|
||||
let platform = create_platform("modrinth", None)?;
|
||||
|
||||
let spinner = ProgressBar::new_spinner();
|
||||
spinner.set_style(
|
||||
ProgressStyle::default_spinner()
|
||||
.template("{spinner:.green} {msg}")
|
||||
.expect("spinner template is valid"),
|
||||
);
|
||||
spinner.enable_steady_tick(Duration::from_millis(80));
|
||||
spinner.set_message("Fetching from Modrinth...");
|
||||
|
||||
let mut project = platform
|
||||
.request_project_with_files(&input, mc_versions, &loaders)
|
||||
.await
|
||||
|
|
@ -159,6 +183,7 @@ pub async fn execute(
|
|||
}
|
||||
}
|
||||
|
||||
spinner.finish_and_clear();
|
||||
projects_to_merge.push(project);
|
||||
}
|
||||
|
||||
|
|
@ -170,6 +195,15 @@ pub async fn execute(
|
|||
let gh_token = std::env::var("GITHUB_TOKEN").ok();
|
||||
let platform = create_platform("github", gh_token)?;
|
||||
|
||||
let spinner = ProgressBar::new_spinner();
|
||||
spinner.set_style(
|
||||
ProgressStyle::default_spinner()
|
||||
.template("{spinner:.green} {msg}")
|
||||
.expect("spinner template is valid"),
|
||||
);
|
||||
spinner.enable_steady_tick(Duration::from_millis(80));
|
||||
spinner.set_message("Fetching from GitHub...");
|
||||
|
||||
let repo_path = format!("{owner}/{repo}");
|
||||
let mut project = platform
|
||||
.request_project_with_files(&repo_path, mc_versions, &loaders)
|
||||
|
|
@ -190,6 +224,7 @@ pub async fn execute(
|
|||
}
|
||||
}
|
||||
|
||||
spinner.finish_and_clear();
|
||||
projects_to_merge.push(project);
|
||||
}
|
||||
|
||||
|
|
@ -259,7 +294,10 @@ pub async fn execute(
|
|||
|
||||
log::info!("Replacing existing project: {existing_name}");
|
||||
lockfile.projects[pos] = combined_project.clone();
|
||||
println!("✓ Replaced '{existing_name}' with '{project_name}'");
|
||||
println!(
|
||||
"{}",
|
||||
format!("✓ Replaced '{existing_name}' with '{project_name}'").green()
|
||||
);
|
||||
} else {
|
||||
if !yes {
|
||||
let prompt_msg = format!("Add project '{project_name}'?");
|
||||
|
|
@ -270,13 +308,22 @@ pub async fn execute(
|
|||
}
|
||||
|
||||
lockfile.add_project(combined_project.clone());
|
||||
println!("✓ Added '{project_name}'");
|
||||
println!("{}", format!("✓ Added '{project_name}'").green());
|
||||
}
|
||||
|
||||
// Resolve dependencies unless --no-deps is specified
|
||||
if !no_deps {
|
||||
log::info!("Resolving dependencies...");
|
||||
|
||||
let dep_spinner = ProgressBar::new_spinner();
|
||||
dep_spinner.set_style(
|
||||
ProgressStyle::default_spinner()
|
||||
.template("{spinner:.green} {msg}")
|
||||
.expect("spinner template is valid"),
|
||||
);
|
||||
dep_spinner.enable_steady_tick(Duration::from_millis(80));
|
||||
dep_spinner.set_message("Resolving dependencies...");
|
||||
|
||||
let platforms = create_all_platforms();
|
||||
let mut resolver = DependencyResolver::new();
|
||||
|
||||
|
|
@ -284,6 +331,8 @@ pub async fn execute(
|
|||
.resolve(&mut combined_project, &mut lockfile, &platforms)
|
||||
.await?;
|
||||
|
||||
dep_spinner.finish_and_clear();
|
||||
|
||||
for dep in deps {
|
||||
// Skip if already in lockfile
|
||||
if lockfile.projects.iter().any(|p| {
|
||||
|
|
@ -310,7 +359,7 @@ pub async fn execute(
|
|||
|
||||
log::info!("Adding dependency: {dep_name}");
|
||||
lockfile.add_project(dep);
|
||||
println!(" ✓ Added dependency '{dep_name}'");
|
||||
println!("{}", format!(" ✓ Added dependency '{dep_name}'").green());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue