diff --git a/Cargo.lock b/Cargo.lock index 90f3105..39d69e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2139,7 +2139,7 @@ dependencies = [ [[package]] name = "tiny-encrypt" -version = "0.1.0" +version = "0.1.1" dependencies = [ "aes-gcm-stream", "base64", diff --git a/Cargo.toml b/Cargo.toml index 271527f..84a1bab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tiny-encrypt" -version = "0.1.0" +version = "0.1.1" edition = "2021" license = "MIT" description = "A simple and tiny file encrypt tool" diff --git a/src/cmd_decrypt.rs b/src/cmd_decrypt.rs index 617711a..7a59402 100644 --- a/src/cmd_decrypt.rs +++ b/src/cmd_decrypt.rs @@ -265,13 +265,12 @@ fn select_envelop(meta: &TinyEncryptMeta) -> XResult<&TinyEncryptEnvelop> { } envelops.iter().enumerate().for_each(|(i, envelop)| { - println!("#{} {}{}", i + 1, + let kid = iff!(envelop.kid.is_empty(), "".into(), format!(", Kid: {}", envelop.kid)); + let desc = envelop.desc.as_ref().map(|desc| format!(", Desc: {}", desc)).unwrap_or_else(|| "".to_string()); + println!("#{} {}{}{}", i + 1, envelop.r#type.get_upper_name(), - if envelop.kid.is_empty() { - "".into() - } else { - format!(", Kid: {}", envelop.kid) - } + kid, + desc, ); }); diff --git a/src/cmd_info.rs b/src/cmd_info.rs index 620e8ee..a3fe46a 100644 --- a/src/cmd_info.rs +++ b/src/cmd_info.rs @@ -5,23 +5,38 @@ use std::path::PathBuf; use std::time::{Duration, SystemTime}; use clap::Args; -use rust_util::{iff, opt_result, success, util_time, XResult}; +use rust_util::{iff, opt_result, simple_error, success, util_time, warning, XResult}; use simpledateformat::format_human2; use crate::{file, util}; +use crate::util::TINY_ENC_FILE_EXT; #[derive(Debug, Args)] pub struct CmdInfo { /// File - pub path: PathBuf, + pub paths: Vec, /// Show raw meta #[arg(long, default_value_t = false)] pub raw_meta: bool, } pub fn info(cmd_info: CmdInfo) -> XResult<()> { - let path_display = format!("{}", cmd_info.path.display()); - let mut file_in = opt_result!(File::open(&cmd_info.path), "Open file: {} failed: {}", &path_display); + for (i, path) in cmd_info.paths.iter().enumerate() { + if i > 0 { println!("{}", "-".repeat(88)); } + if let Err(e) = info_single(path, &cmd_info) { + warning!("Parse Tiny Encrypt file info failed: {}", e); + } + } + Ok(()) +} + +pub fn info_single(path: &PathBuf, cmd_info: &CmdInfo) -> XResult<()> { + let path_display = format!("{}", path.display()); + if !path_display.ends_with(TINY_ENC_FILE_EXT) { + return simple_error!("Not a Tiny Encrypt file: {}", path_display); + } + + let mut file_in = opt_result!(File::open(path), "Open file: {} failed: {}", &path_display); let meta = opt_result!( file::read_tiny_encrypt_meta_and_normalize(&mut file_in), "Read file: {}, failed: {}", &path_display ); @@ -56,7 +71,7 @@ pub fn info(cmd_info: CmdInfo) -> XResult<()> { meta.envelops.as_ref().map(|envelops| envelops.iter().enumerate().for_each(|(i, envelop)| { let kid = iff!(envelop.kid.is_empty(), "".into(), format!(", Kid: {}", envelop.kid)); - let desc = iff!(envelop.desc.is_none(), "".into(), format!(", Desc: {}", envelop.desc.as_ref().unwrap())); + let desc = envelop.desc.as_ref().map(|desc| format!(", Desc: {}", desc)).unwrap_or_else(|| "".to_string()); infos.push(format!("{}: {}{}{}", header(&format!("Envelop #{}", i + 1)), envelop.r#type.get_upper_name(),