From f64a702ef58f27f73fa8d7c61dc5381afb861ab3 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 22 May 2025 09:06:55 +0800 Subject: [PATCH] Add a warning counter --- src/main.rs | 15 +++++++++------ src/scripts/circus/script.rs | 1 + src/utils/counter.rs | 11 +++++++++-- src/utils/encoding.rs | 2 ++ src/utils/encoding_win.rs | 1 + 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index b671f10..c2ddd7e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -257,6 +257,10 @@ pub fn import_script( Ok(types::ScriptResult::Ok) } +lazy_static::lazy_static! { + static ref COUNTER: utils::counter::Counter = utils::counter::Counter::new(); +} + fn main() { let arg = args::parse_args(); if arg.backtrace { @@ -265,7 +269,6 @@ fn main() { let cfg = types::ExtraConfig { circus_mes_type: arg.circus_mes_type.clone(), }; - let counter = utils::counter::Counter::new(); match &arg.command { args::Command::Export { input, output } => { let (scripts, is_dir) = utils::files::collect_files(input, arg.recursive).unwrap(); @@ -289,10 +292,10 @@ fn main() { let re = export_script(&script, &arg, &cfg, output, is_dir); match re { Ok(s) => { - counter.inc(s); + COUNTER.inc(s); } Err(e) => { - counter.inc_error(); + COUNTER.inc_error(); eprintln!("Error exporting {}: {}", script, e); if arg.backtrace { eprintln!("Backtrace: {}", e.backtrace()); @@ -326,10 +329,10 @@ fn main() { let re = import_script(&script, &arg, &cfg, args, is_dir, name_csv.as_ref()); match re { Ok(s) => { - counter.inc(s); + COUNTER.inc(s); } Err(e) => { - counter.inc_error(); + COUNTER.inc_error(); eprintln!("Error exporting {}: {}", script, e); if arg.backtrace { eprintln!("Backtrace: {}", e.backtrace()); @@ -339,5 +342,5 @@ fn main() { } } } - eprintln!("{}", counter); + eprintln!("{}", std::ops::Deref::deref(&COUNTER)); } diff --git a/src/scripts/circus/script.rs b/src/scripts/circus/script.rs index d05fdce..1e10537 100644 --- a/src/scripts/circus/script.rs +++ b/src/scripts/circus/script.rs @@ -248,6 +248,7 @@ impl Script for CircusMesScript { println!( "Warning: Some replacements cannot used in current encoding. Ruby text may be broken." ); + crate::COUNTER.inc_warning(); } } let mut buffer = Vec::with_capacity(self.data.len()); diff --git a/src/utils/counter.rs b/src/utils/counter.rs index 617dc91..f7f367c 100644 --- a/src/utils/counter.rs +++ b/src/utils/counter.rs @@ -6,6 +6,7 @@ pub struct Counter { ok: AtomicUsize, ignored: AtomicUsize, error: AtomicUsize, + warning: AtomicUsize, } impl Counter { @@ -14,6 +15,7 @@ impl Counter { ok: AtomicUsize::new(0), ignored: AtomicUsize::new(0), error: AtomicUsize::new(0), + warning: AtomicUsize::new(0), } } @@ -21,6 +23,10 @@ impl Counter { self.error.fetch_add(1, SeqCst); } + pub fn inc_warning(&self) { + self.warning.fetch_add(1, SeqCst); + } + pub fn inc(&self, result: ScriptResult) { match result { ScriptResult::Ok => self.ok.fetch_add(1, SeqCst), @@ -33,10 +39,11 @@ impl std::fmt::Display for Counter { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "OK: {}, Ignored: {}, Error: {}", + "OK: {}, Ignored: {}, Error: {}, Warning: {}", self.ok.load(SeqCst), self.ignored.load(SeqCst), - self.error.load(SeqCst) + self.error.load(SeqCst), + self.warning.load(SeqCst), ) } } diff --git a/src/utils/encoding.rs b/src/utils/encoding.rs index 8b3cebd..bd81f64 100644 --- a/src/utils/encoding.rs +++ b/src/utils/encoding.rs @@ -47,6 +47,7 @@ pub fn encode_string( "Warning: Some characters could not be encoded in Shift-JIS: {}", data ); + crate::COUNTER.inc_warning(); } Ok(result.0.to_vec()) } @@ -60,6 +61,7 @@ pub fn encode_string( "Warning: Some characters could not be encoded in GB2312: {}", data ); + crate::COUNTER.inc_warning(); } Ok(result.0.to_vec()) } diff --git a/src/utils/encoding_win.rs b/src/utils/encoding_win.rs index 75756a3..75b8094 100644 --- a/src/utils/encoding_win.rs +++ b/src/utils/encoding_win.rs @@ -123,6 +123,7 @@ pub fn encode_string(cp: u32, data: &str, check: bool) -> Result, WinErr "Warning: Some characters could not be encoded in code page {}: {}", cp, data ); + crate::COUNTER.inc_warning(); } } if result == 0 {