refactor app

This commit is contained in:
llama 2025-10-18 09:56:47 +08:00
parent 6d6df1c91d
commit eaa514fb7a
No known key found for this signature in database
GPG key ID: 0B7543854B9413C3
3 changed files with 26 additions and 9 deletions

View file

@ -13,13 +13,32 @@ use tauri::UriSchemeResponder;
use tauri_plugin_os::locale;
use crate::generated;
use crate::lang::setup_i18n;
use crate::lang::I18n;
use crate::state::State;
use crate::uv;
pub const PROTOCOL: &str = "anki";
pub fn setup(app: &mut App, state: uv::State) -> anyhow::Result<()> {
setup_i18n(app.app_handle(), &[&locale().unwrap_or_default()]);
pub fn init() -> Option<State> {
let mut state = State::init().unwrap_or_else(State::Error);
match state {
State::Normal(ref mut state) => state.check_versions(),
State::LaunchAnki(ref paths) => {
let args: Vec<String> = std::env::args().skip(1).collect();
let cmd = paths.build_python_command(&args).unwrap();
uv::launch_anki_normally(cmd).unwrap();
return None;
}
_ => {}
}
Some(state)
}
pub fn setup(app: &mut App, state: State) -> anyhow::Result<()> {
let tr = I18n::new(&[&locale().unwrap_or_default()]);
app.manage(crate::lang::Tr::new(Some(tr)));
app.manage(state);

View file

@ -16,7 +16,6 @@ pub type I18n = anki_i18n::I18n<anki_i18n::Launcher>;
pub type Tr = RwLock<Option<I18n>>;
pub fn setup_i18n<R: Runtime>(app: &AppHandle<R>, locales: &[&str]) {
app.manage(Tr::default()); // no-op if it already exists
*app.state::<Tr>().write().expect("tr lock was poisoned!") = Some(I18n::new(locales));
}

View file

@ -10,16 +10,13 @@ mod error;
mod generated;
mod lang;
mod platform;
mod state;
mod uv;
fn main() {
let Some(state) = uv::init_state().unwrap() else {
// either anki was spawned or os not supported (TODO)
return;
};
let Some(state) = app::init() else { return };
tauri::Builder::default()
.plugin(tauri_plugin_os::init())
.plugin(
tauri_plugin_log::Builder::new()
.clear_targets()
@ -29,6 +26,8 @@ fn main() {
.level(tauri_plugin_log::log::LevelFilter::Trace)
.build(),
)
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_single_instance::init(app::on_second_instance))
.setup(|app| Ok(app::setup(app, state)?))
.register_asynchronous_uri_scheme_protocol(app::PROTOCOL, app::serve)