diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-11-06 22:06:59 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-11-06 22:06:59 +0800 |
| commit | 0358011c4be7797a4946f1bc8cfdaf0e2c209cfe (patch) | |
| tree | 463bc89d4bec356d22ff08a222c4046098f003ce /src | |
| parent | 46d0c0213aa634fba4bfd617c83cf6c6f18a495d (diff) | |
feat: enhance jvv command with raw output support
- Add --raw option to member list for script-friendly output
- Use size_str function for consistent file size formatting
- Improve member list sorting (host first)
- Add better error handling and output formatting
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/jvv.rs | 97 |
1 files changed, 52 insertions, 45 deletions
diff --git a/src/bin/jvv.rs b/src/bin/jvv.rs index 38a5982..6c3258a 100644 --- a/src/bin/jvv.rs +++ b/src/bin/jvv.rs @@ -18,7 +18,10 @@ use just_enough_vcs::{ }; use just_enough_vcs_cli::{ data::compile_info::CompileInfo, - utils::{build_env_logger::build_env_logger, lang_selector::current_locales, md_colored::md}, + utils::{ + build_env_logger::build_env_logger, display::size_str, lang_selector::current_locales, + md_colored::md, + }, }; use log::{error, info}; use rust_i18n::{set_locale, t}; @@ -158,6 +161,10 @@ struct MemberListArgs { /// Show help information #[arg(short, long)] help: bool, + + /// Show raw output for list + #[arg(short, long)] + raw: bool, } #[derive(Parser, Debug)] @@ -323,7 +330,14 @@ async fn main() { return; } }; - jvv_member_list(vault, MemberListArgs { help: false }).await; + jvv_member_list( + vault, + MemberListArgs { + help: false, + raw: false, + }, + ) + .await; } } } @@ -412,21 +426,6 @@ async fn jvv_here(_args: HereArgs) { }; let num_ref_sheet_managed_files = ref_sheet.mapping().len(); - let total_size_str = if total_size < 1024 { - format!("{} B", total_size) - } else if total_size < 1024 * 1024 { - format!("{:.2} KB", total_size as f64 / 1024.0) - } else if total_size < 1024 * 1024 * 1024 { - format!("{:.2} MB", total_size as f64 / (1024.0 * 1024.0)) - } else if total_size < 1024 * 1024 * 1024 * 1024 { - format!("{:.2} GB", total_size as f64 / (1024.0 * 1024.0 * 1024.0)) - } else { - format!( - "{:.2} TB", - total_size as f64 / (1024.0 * 1024.0 * 1024.0 * 1024.0) - ) - }; - // Success println!( "{}", @@ -438,7 +437,7 @@ async fn jvv_here(_args: HereArgs) { num_mem = num_mem, num_pk = num_pk, num_ref_sheet_managed_files = num_ref_sheet_managed_files, - total_size = total_size_str + total_size = size_str(total_size as usize) )) ) } @@ -590,24 +589,18 @@ async fn jvv_member_remove(vault: Vault, args: MemberRemoveArgs) { ) } -async fn jvv_member_list(vault: Vault, _args: MemberListArgs) { +async fn jvv_member_list(vault: Vault, args: MemberListArgs) { // Get id list let ids = match vault.member_ids() { Ok(ids) => ids, Err(_) => { - eprintln!("{}", t!("jvv.fail.member.list").trim()); + if !args.raw { + eprintln!("{}", t!("jvv.fail.member.list").trim()); + } return; } }; - // Print header - println!( - "{}", - md(t!("jvv.success.member.list.header", num = ids.len())) - ); - - // Print list - let mut i = 0; let mut members: Vec<String> = ids.into_iter().collect(); // Sort members to put "host" first if it exists @@ -621,24 +614,38 @@ async fn jvv_member_list(vault: Vault, _args: MemberListArgs) { } }); - let mut has_pubkey = 0; - for member in members { - println!("{}. {} {}", i + 1, &member, { - // Key registered - if vault.member_key_path(&member).exists() { - has_pubkey += 1; - t!("jvv.success.member.list.status_key_registered") - } else { - std::borrow::Cow::Borrowed("") - } - }); - i += 1; - } + if args.raw { + for member in members { + println!("{}", member); + } + } else { + // Print header + println!( + "{}", + md(t!("jvv.success.member.list.header", num = members.len())) + ); - println!( - "{}", - md(t!("jvv.success.member.list.footer", num = has_pubkey)) - ); + // Print list + let mut i = 0; + let mut has_pubkey = 0; + for member in members { + println!("{}. {} {}", i + 1, &member, { + // Key registered + if vault.member_key_path(&member).exists() { + has_pubkey += 1; + t!("jvv.success.member.list.status_key_registered") + } else { + std::borrow::Cow::Borrowed("") + } + }); + i += 1; + } + + println!( + "{}", + md(t!("jvv.success.member.list.footer", num = has_pubkey)) + ); + } } async fn jvv_service_listen(args: ListenArgs) { |
