diff --git a/qt/launcher-gui/src-tauri/src/app.rs b/qt/launcher-gui/src-tauri/src/app.rs index afe517be7..578ae8c32 100644 --- a/qt/launcher-gui/src-tauri/src/app.rs +++ b/qt/launcher-gui/src-tauri/src/app.rs @@ -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 { + 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 = 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); diff --git a/qt/launcher-gui/src-tauri/src/lang.rs b/qt/launcher-gui/src-tauri/src/lang.rs index 9c6d918c0..dc61b0817 100644 --- a/qt/launcher-gui/src-tauri/src/lang.rs +++ b/qt/launcher-gui/src-tauri/src/lang.rs @@ -16,7 +16,6 @@ pub type I18n = anki_i18n::I18n; pub type Tr = RwLock>; pub fn setup_i18n(app: &AppHandle, locales: &[&str]) { - app.manage(Tr::default()); // no-op if it already exists *app.state::().write().expect("tr lock was poisoned!") = Some(I18n::new(locales)); } diff --git a/qt/launcher-gui/src-tauri/src/main.rs b/qt/launcher-gui/src-tauri/src/main.rs index ad0e86800..3e477b9da 100644 --- a/qt/launcher-gui/src-tauri/src/main.rs +++ b/qt/launcher-gui/src-tauri/src/main.rs @@ -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)