diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 2ff256a..64241f3 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -126,6 +126,18 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures 0.2.17", + "password-hash", +] + [[package]] name = "arrayvec" version = "0.7.6" @@ -321,6 +333,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "bit-set" version = "0.8.0" @@ -351,6 +369,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -593,9 +620,9 @@ dependencies = [ [[package]] name = "cedarwood" -version = "0.4.6" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d910bedd62c24733263d0bed247460853c9d22e8956bd4cd964302095e04e90" +checksum = "c0524a528a6a0288df1863c3c20fe92c301875b4941e7b6c4b394ab08c5a4c55" dependencies = [ "smallvec", ] @@ -646,6 +673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", + "cipher", "cpufeatures 0.3.0", "rand_core 0.10.0", ] @@ -657,8 +685,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-link 0.2.1", ] @@ -668,6 +698,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" dependencies = [ + "block-buffer 0.12.0", "crypto-common 0.2.1", "inout", ] @@ -1219,6 +1250,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "crypto-common 0.1.7", + "subtle", ] [[package]] @@ -1564,9 +1596,9 @@ dependencies = [ [[package]] name = "fancy-regex" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72cf461f865c862bb7dc573f643dd6a2b6842f7c30b07882b56bd148cc2761b8" +checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" dependencies = [ "bit-set", "regex-automata", @@ -1575,9 +1607,9 @@ dependencies = [ [[package]] name = "fastcdc" -version = "3.2.1" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf51ceb43e96afbfe4dd5c6f6082af5dfd60e220820b8123792d61963f2ce6bc" +checksum = "77af40d8a8dadb92dc178569a5f5edb5f3056e98255c2de48ab5d59a52892e0c" [[package]] name = "fastrand" @@ -2725,19 +2757,20 @@ dependencies = [ [[package]] name = "jieba-macros" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348294e44ee7e3c42685da656490f8febc7359632544019621588902216da95c" +checksum = "46adade69b634535a8f495cf87710ed893cff53e1dbc9dd750c2ab81c5defb82" dependencies = [ "phf_codegen 0.13.1", ] [[package]] name = "jieba-rs" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "766bd7012aa5ba49411ebdf4e93bddd59b182d2918e085d58dec5bb9b54b7105" +checksum = "11b53580aaa8ec8b713da271da434f8947409242c537a9ab3f7b76bdbb19e8a9" dependencies = [ + "bytecount", "cedarwood", "include-flate", "jieba-macros", @@ -2840,6 +2873,16 @@ dependencies = [ "serde_json", ] +[[package]] +name = "keccak" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", +] + [[package]] name = "keyboard-types" version = "0.7.0" @@ -3176,16 +3219,20 @@ dependencies = [ [[package]] name = "msg_tool" -version = "0.3.1" +version = "0.4.0-alpha.2" dependencies = [ "adler", "aes", "anyhow", + "argon2", "base64 0.22.1", + "blake2", "block_compression", "byteorder", "bytes", "cbc", + "chacha20", + "chrono", "clap 4.6.0", "crc32fast", "crossbeam", @@ -3197,6 +3244,7 @@ dependencies = [ "fancy-regex", "fastcdc", "flate2", + "hex", "include-flate", "int-enum", "jieba-rs", @@ -3217,6 +3265,7 @@ dependencies = [ "parse-size", "pelite", "png 0.18.1", + "qoi", "rand 0.10.1", "rust-ini", "serde", @@ -3224,6 +3273,9 @@ dependencies = [ "serde_yaml_ng", "sha1", "sha2 0.11.0", + "sha3", + "shake", + "siphasher 1.0.2", "stylua", "tendril 0.5.0", "unicode-segmentation", @@ -3232,13 +3284,16 @@ dependencies = [ "webp", "windows-sys 0.61.2", "xml5ever", + "xxhash-rust", "zopfli", "zstd", ] [[package]] name = "msg_tool_build" -version = "0.3.1" +version = "0.4.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8386042ba7f224865098b365961d45df240b4f43ac6c8e279d16616ae25188ae" dependencies = [ "json", "zstd", @@ -3246,7 +3301,9 @@ dependencies = [ [[package]] name = "msg_tool_macro" -version = "0.3.0" +version = "0.4.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177ed201ff17ef103ad65d1f5a679d105e463a4e36e61a977978bdb97b5d04bc" dependencies = [ "quote", "syn 2.0.117", @@ -3254,7 +3311,7 @@ dependencies = [ [[package]] name = "msg_tool_xp3data" -version = "0.3.1" +version = "0.4.0-alpha.2" dependencies = [ "msg_tool_build", "zstd", @@ -3648,6 +3705,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b" +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" @@ -4096,6 +4164,15 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-error" version = "2.0.1" @@ -4730,6 +4807,28 @@ dependencies = [ "digest 0.11.2", ] +[[package]] +name = "sha3" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" +dependencies = [ + "digest 0.11.2", + "keccak", + "sponge-cursor", +] + +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest 0.11.2", + "keccak", + "sponge-cursor", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4854,6 +4953,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -4948,6 +5053,12 @@ dependencies = [ "toml 0.8.2", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "swift-rs" version = "1.0.7" @@ -6809,6 +6920,12 @@ dependencies = [ "markup5ever 0.38.0", ] +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + [[package]] name = "yoke" version = "0.8.2" diff --git a/src-tauri/src/backend.rs b/src-tauri/src/backend.rs index 0302977..b2449de 100644 --- a/src-tauri/src/backend.rs +++ b/src-tauri/src/backend.rs @@ -34,12 +34,7 @@ impl<'a> CacheEntry<'a> { script_type: Option, ) -> Result { let (entry_type, msg_tool_type) = if let Some(typ) = script_type { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = reader.read(&mut buffer)?; @@ -94,12 +89,7 @@ impl CacheManager { let mut entry = cache.archive.open_file(index)?; index += 1; let (entry_type, msg_tool_type) = if let Some(typ) = entry.script_type() { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = entry.read(&mut buffer)?; @@ -194,7 +184,7 @@ fn query_entry_type(script_type: &ScriptType) -> EntryType { if let Some(entry_type) = cache.get(script_type) { return entry_type.clone(); } - let entry_type = if script_type.is_audio() { + let entry_type = if matches!(script_type, ScriptType::BGIAudio | ScriptType::CircusPcm) { EntryType::Audio } else { let builder = BUILDER @@ -207,17 +197,6 @@ fn query_entry_type(script_type: &ScriptType) -> EntryType { entry_type } -/// 到时候可能考虑把识别写到msg_tool那里 -trait ScriptTypeExt { - fn is_audio(&self) -> bool; -} - -impl ScriptTypeExt for ScriptType { - fn is_audio(&self) -> bool { - matches!(self, ScriptType::BGIAudio | ScriptType::CircusPcm) - } -} - trait ScriptBuilderExt { fn entry_type(&self) -> EntryType; } @@ -228,7 +207,7 @@ impl ScriptBuilderExt for T { EntryType::Image } else if self.is_archive() { EntryType::Archive - } else if self.script_type().is_audio() { + } else if self.is_audio() { EntryType::Audio } else { EntryType::Unknown @@ -431,12 +410,7 @@ fn list_archive_directory_in_archive<'a>( .and_then(|opts| opts.get(index).cloned()) .unwrap_or_default(); let (entry_type, msg_tool_type) = if let Some(typ) = typ { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = reader.read(&mut buffer)?; @@ -484,12 +458,7 @@ fn list_archive_directory_in_archive<'a>( let mut entry = archive.open_file(index)?; index += 1; let (entry_type, msg_tool_type) = if let Some(typ) = entry.script_type() { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = entry.read(&mut buffer)?; @@ -589,12 +558,7 @@ fn preview_image_in_directory<'a>( index: usize, ) -> Result> { let (entry_type, msg_tool_type) = if let Some(typ) = script_type { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = reader.read(&mut buffer)?; @@ -649,12 +613,7 @@ fn preview_image_in_archive<'a>( .and_then(|opts| opts.get(index).cloned()) .unwrap_or_default(); let (entry_type, msg_tool_type) = if let Some(typ) = typ { - let entry_type = if typ.is_audio() { - EntryType::Audio - } else { - query_entry_type(&typ) - }; - (entry_type, Some(typ.clone())) + (query_entry_type(&typ), Some(typ.clone())) } else { let mut buffer = [0; 1024]; let n = reader.read(&mut buffer)?;