diff --git a/CHANGELOG.md b/CHANGELOG.md index e1670f3..2b34915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,4 +60,11 @@ ## [2.6.11] - 2025.3.15 ### Features :sparkles: -- 更新自动打开文件夹选项,当解密结束后自动调用文件管理器打开输出目录 \ No newline at end of file +- 更新自动打开文件夹选项,当解密结束后自动调用文件管理器打开输出目录 + +## [2.7.11] - 2025.3.23 +### Fixed +- :arrow_up: 升级依赖 +- 修正了解密完成后不会自动退出的bug +### Refactoring +- :hammer: 重构部分代码! \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 5387c94..8194fd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -230,9 +230,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "cc" -version = "1.2.16" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "jobserver", "libc", @@ -811,7 +811,7 @@ checksum = "07dcca13d1740c0a665f77104803360da0bdb3323ecce2e93fa2c959a6d52806" [[package]] name = "ncmmiao" -version = "2.6.11" +version = "2.7.11" dependencies = [ "aes", "audiotags", @@ -1466,9 +1466,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-sys" @@ -1554,18 +1554,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 9f89623..e03e708 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ncmmiao" -version = "2.6.11" +version = "2.7.11" edition = "2021" authors = ["Lkhsss "] description = "A magic tool convert ncm to flac" diff --git a/README.md b/README.md index 59fa649..06e5107 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,11 @@ cargo build -r ``` ncmmiao [OPTIONS] Options: - -w, --workers 最大线程数 约束逻辑在主函数 - -i, --input <输入文件/文件夹> 需要解密的文件夹或文件 - -o, --output <输出文件夹> [默认: NcmmiaoOutput] + -w, --workers 并发的最大线程数,默认为8线程(性能还行的话建议直接32-64,嘎嘎快) + -i, --input <输入文件/目录> 需要解密的文件夹或文件 + -o, --output <输出目录> 输出目录 [default: NcmmiaoOutput] + -f, --forcesave 强制覆盖保存开关 + -a, --autoopen 自动打开输出目录 ``` ~~输出文件夹在output。等我想写了再写命令行解析(bushi。~~ 写了写了 diff --git a/src/clap.rs b/src/clap.rs index d34d3af..752d6e3 100644 --- a/src/clap.rs +++ b/src/clap.rs @@ -21,6 +21,6 @@ pub struct Cli { pub forcesave: bool, /// 自动打开输出目录 - #[arg(short,long,name="自动打开输出目录")] - pub autoopen:bool, + #[arg(short, long, name = "自动打开输出目录")] + pub autoopen: bool, } diff --git a/src/main.rs b/src/main.rs index 20a5982..8d283fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use colored::{Color, Colorize}; use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; use lazy_static::lazy_static; use log::{error, info, warn}; +use messager::Message; use std::time::Duration; use std::{ path::Path, @@ -16,13 +17,13 @@ mod clap; mod logger; mod messager; mod ncmdump; +mod opendir; mod pathparse; mod test; mod threadpool; -mod opendir; use ncmdump::Ncmfile; -const DEFAULT_MAXWORKER:usize = 8; +const DEFAULT_MAXWORKER: usize = 8; fn main() { let timer = ncmdump::TimeCompare::new(); @@ -54,7 +55,9 @@ fn main() { let undumpfile = pathparse::pathparse(input); // 该列表将存入文件的路径 let taskcount = undumpfile.len(); - let successful = Arc::new(Mutex::new(0)); + let mut success_count = 0; //成功任务数 + + if taskcount == 0 { error!("没有找到有效文件。使用-i参数输入需要解密的文件或文件夹。") } else { @@ -70,17 +73,20 @@ fn main() { // 循环开始 for filepath in undumpfile { let output = outputdir.clone(); - let successful = Arc::clone(&successful); - let sender: Sender = tx.clone(); + let senderin: Sender = tx.clone(); + let senderon: Sender = tx.clone(); pool.execute(move || match Ncmfile::new(filepath.as_str()) { - Ok(mut n) => match n.dump(Path::new(&output), sender, forcesave) { - Ok(_) => { - let mut num = successful.lock().unwrap(); - *num += 1; + Ok(mut n) => match n.dump(Path::new(&output), senderin, forcesave) { + Ok(_) => {} + Err(e) => { + let messager = messager::Messager::new(n.fullfilename, senderon); + messager.send(messager::Signals::Err(e)); } - Err(e) => error!("[{}] 解密失败: {}", filepath.yellow(), e), }, - Err(e) => error!("[{}] 解密失败: {}", filepath.yellow(), e), + Err(e) => { + let messager = messager::Messager::new(filepath, senderon); + messager.send(messager::Signals::Err(e)); + } }); } //循环到此结束 @@ -96,13 +102,21 @@ fn main() { ) .with_message("解密中"); let progressbar = MP.add(pb); - //接受消息 + //定义计数器 + // 接受消息!!!!!!!!!! for messages in rx { - progressbar.inc(1); - messages.log(); //发送log + match messages.signal{ + messager::Signals::End|messager::Signals::Err(_)=>{success_count+=1}, + _=>() + } + if success_count < taskcount { + progressbar.inc(1); + messages.log(); //发送log + } else { + break; + } } - progressbar.finish_and_clear(); } let timecount = timer.compare(); @@ -113,20 +127,20 @@ fn main() { format!("共计用时{}毫秒", timecount) } }; - let successful = *successful.lock().unwrap(); info!( "成功解密{}个文件,{}个文件解密失败,{}", - successful.to_string().bright_green(), - (taskcount - successful).to_string().bright_red(), + success_count.to_string().bright_green(), + (taskcount - success_count).to_string().bright_red(), showtime() ); // 自动打开输出文件夹 - if cli.autoopen{ + if cli.autoopen { + info!("自动打开文件夹:[{}]", outputdir.cyan()); opendir::opendir(outputdir.into()); + } else { + info!("输出文件夹:[{}]", outputdir.cyan()); }; - - } lazy_static! { diff --git a/src/messager.rs b/src/messager.rs index d5b355f..82c5598 100644 --- a/src/messager.rs +++ b/src/messager.rs @@ -1,7 +1,7 @@ use colored::Colorize; -use log::info; +use log::{error, info, warn}; -use crate::messager; +use crate::{messager, ncmdump}; use std::fmt::Debug; use std::sync::mpsc; pub struct Messager { @@ -23,10 +23,19 @@ impl Message { Signals::Decrypt => "解密歌曲信息", Signals::Save => "保存文件", Signals::End => "成功!", + Signals::Err(e)=>&e.to_string(), }; - info!("[{}] {}", self.name.cyan(), loginfo) + match &self.signal{ + Signals::Err(e)=>{match e{ + ncmdump::NcmError::ProtectFile=>warn!("[{}] {}", self.name.cyan(), loginfo), + _=>error!("[{}] {}", self.name.cyan(), loginfo), + }}, + _=>info!("[{}] {}", self.name.cyan(), loginfo) + } + } } +#[derive(PartialEq)] pub enum Signals { Start, GetMetaInfo, @@ -34,6 +43,7 @@ pub enum Signals { Decrypt, Save, End, + Err(ncmdump::NcmError), } impl Messager { @@ -56,6 +66,8 @@ impl Debug for Message { Signals::End => "破解完成", Signals::GetMetaInfo => "获取元数据", Signals::GetCover => "获取封面", + Signals::Err(e)=>&e.to_string(), + }; write!(f, "[{}] {}", self.name, message) } diff --git a/src/ncmdump.rs b/src/ncmdump.rs index 0fefe8c..7c73ded 100644 --- a/src/ncmdump.rs +++ b/src/ncmdump.rs @@ -559,7 +559,7 @@ fn unpad(data: &[u8]) -> Vec { data[..data.len() - data[data.len() - 1] as usize].to_vec() } -#[derive(Debug)] +#[derive(Debug,PartialEq)] #[allow(dead_code)] pub enum NcmError { NotNcmFile,