From 079fdd512c40c2fb5d0da13277f739245feaa60a Mon Sep 17 00:00:00 2001 From: polv Date: Sun, 22 Mar 2026 21:46:47 +0700 Subject: [PATCH] try spawn blocking --- Cargo.toml | 3 +++ src-core/src/service.rs | 1 + src-tauri/src/command.rs | 41 ++++++++++++++++++++++++---------------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e9615e3..2e0563c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,6 @@ resolver = "3" lto = true codegen-units = 1 strip = true +# debug = true # keep symbols +# lto = false # disable LTO +# opt-level = 1 # reduce but don't maximize optimization \ No newline at end of file diff --git a/src-core/src/service.rs b/src-core/src/service.rs index bd16202..7df16ef 100644 --- a/src-core/src/service.rs +++ b/src-core/src/service.rs @@ -40,6 +40,7 @@ pub enum SqlParam { Bool(bool), } +#[derive(Clone)] pub struct AppService { db: Database, tokenizer: Tokenizer, diff --git a/src-tauri/src/command.rs b/src-tauri/src/command.rs index 9e0150c..580994e 100644 --- a/src-tauri/src/command.rs +++ b/src-tauri/src/command.rs @@ -59,26 +59,35 @@ pub async fn init_yomitan( .map(|d| data_dir.join(&d.filepath)) .collect(); - let update_count = Cell::new(0usize); + let state = state.inner().clone(); + let app_clone = app.clone(); - state.load_yomitan_zip_dir( - zip_files, - &yomitan_assets, - lang.as_str(), - |r| { - update_count.set(update_count.get() + r.new_dicts.len() + r.to_be_removed_dicts.len()); - app.emit("load-yomitan-dir", r).unwrap(); - }, - |r| { - update_count.set(update_count.get() + 1); - app.emit("yomitan-import-progress", r).unwrap(); - }, - )?; + let update_count = tokio::task::spawn_blocking(move || { + let update_count = Cell::new(0usize); - if update_count.get() > 0 { + state.load_yomitan_zip_dir( + zip_files, + &yomitan_assets, + lang.as_str(), + |r| { + update_count + .set(update_count.get() + r.new_dicts.len() + r.to_be_removed_dicts.len()); + app.emit("load-yomitan-dir", r).unwrap(); + }, + |r| { + update_count.set(update_count.get() + 1); + app.emit("yomitan-import-progress", r).unwrap(); + }, + )?; + Ok::(update_count.get()) + }) + .await + .map_err(|e| CJDicError::Error(e.to_string()))??; + + if update_count > 0 { println!("Request app restart?",); // Request app restart anyway - app.request_restart(); + app_clone.request_restart(); } Ok(())