diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 34d7059..1ac332d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -928,6 +928,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -956,6 +969,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -3034,18 +3056,6 @@ dependencies = [ "web_atoms", ] -[[package]] -name = "markup5ever_rcdom" -version = "0.38.0+unofficial" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333171ccdf66e915257740d44e38ea5b1b19ce7b45d33cc35cb6f118fbd981ff" -dependencies = [ - "html5ever 0.38.0", - "markup5ever 0.38.0", - "tendril 0.5.0", - "xml5ever", -] - [[package]] name = "match_token" version = "0.1.0" @@ -3179,6 +3189,7 @@ dependencies = [ "cbc", "clap 4.6.0", "crc32fast", + "crossbeam", "csv", "ctrlc", "digest-io", @@ -3196,7 +3207,6 @@ dependencies = [ "libtlg-rs", "lz4", "markup5ever 0.38.0", - "markup5ever_rcdom", "md5", "memchr", "mozjpeg", @@ -3216,6 +3226,7 @@ dependencies = [ "sha1", "sha2 0.11.0", "stylua", + "tendril 0.5.0", "unicode-segmentation", "url", "utf16string", @@ -4874,7 +4885,6 @@ dependencies = [ "parking_lot", "phf_shared 0.13.1", "precomputed-hash", - "serde", ] [[package]] diff --git a/src-tauri/src/backend.rs b/src-tauri/src/backend.rs index d03369a..dd651f1 100644 --- a/src-tauri/src/backend.rs +++ b/src-tauri/src/backend.rs @@ -199,6 +199,13 @@ fn detect_file_type(filename: &str, data: &[u8]) -> (EntryType, Option + ?Sized>(path: &P) -> Result<(EntryType, Option)> { + let mut file = File::open(path)?; + let mut buffer = [0; 1024]; + let n = file.read(&mut buffer)?; + Ok(detect_file_type(&path.as_ref().to_string_lossy(), &buffer[..n])) +} + fn list_fs_directory(path: &Path) -> Result> { let mut result = Vec::new(); for entry in std::fs::read_dir(path)? { @@ -215,10 +222,13 @@ fn list_fs_directory(path: &Path) -> Result> { let (entry_type, msg_tool_type) = if is_dir { (EntryType::Folder, None) } else { - let mut file = std::fs::File::open(entry.path())?; - let mut buffer = [0; 1024]; - let n = file.read(&mut buffer)?; - detect_file_type(&name, &buffer[..n]) + match try_detect_file_type(&entry.path()) { + Ok(t) => t, + Err(e) => { + eprintln!("无法识别文件类型:{} {}", name, e); + (EntryType::Unknown, None) + } + } }; let size = if is_dir { None } else { Some(metadata.len()) }; result.push(Entry { @@ -292,7 +302,7 @@ fn list_archive_directory(path: &Path, option: Option<&Vec>) -> Res fn list_archive_directory_in_archive<'a>( path: &str, - mut reader: Box, + mut reader: Box, filename: &str, option: Option<&Vec>, typ: Option, @@ -462,7 +472,7 @@ pub fn get_xp3_supported_games() -> Vec { } fn preview_image_in_directory<'a>( - mut reader: Box, + mut reader: Box, filename: &str, options: Option<&Vec>, script_type: Option, @@ -518,7 +528,7 @@ fn preview_image_in_directory<'a>( fn preview_image_in_archive<'a>( path: &str, - mut reader: Box, + mut reader: Box, filename: &str, option: Option<&Vec>, typ: Option,