Compare commits

...

2 Commits

Author SHA1 Message Date
3c3ebfa894 Add file size 2026-06-09 10:55:19 +08:00
81df6cc2df Update msg_tool to v0.4.0-alpha.2 and simplify audio type detection 2026-06-09 10:26:36 +08:00
2 changed files with 143 additions and 65 deletions

145
src-tauri/Cargo.lock generated
View File

@@ -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"

View File

@@ -34,12 +34,7 @@ impl<'a> CacheEntry<'a> {
script_type: Option<ScriptType>,
) -> Result<Self> {
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)?;
@@ -92,14 +87,10 @@ impl CacheManager {
for entry in cache.archive.iter_archive_filename()? {
let name = entry?;
let mut entry = cache.archive.open_file(index)?;
let file_size = entry.size();
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)?;
@@ -111,7 +102,7 @@ impl CacheManager {
is_dir: false,
entry_type,
msg_tool_type,
size: None,
size: file_size,
});
}
Ok(result)
@@ -194,7 +185,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 +198,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 +208,7 @@ impl<T: ScriptBuilder + ?Sized> 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 +411,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)?;
@@ -482,14 +457,10 @@ fn list_archive_directory_in_archive<'a>(
for entry in archive.iter_archive_filename()? {
let name = entry?;
let mut entry = archive.open_file(index)?;
let file_size = entry.size();
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)?;
@@ -501,7 +472,7 @@ fn list_archive_directory_in_archive<'a>(
is_dir: false,
entry_type,
msg_tool_type,
size: None,
size: file_size,
});
}
Ok(result)
@@ -589,12 +560,7 @@ fn preview_image_in_directory<'a>(
index: usize,
) -> Result<Vec<u8>> {
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 +615,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)?;