mirror of
https://github.com/ankitects/anki.git
synced 2025-11-06 12:47:11 -05:00
refactor app
This commit is contained in:
parent
6d6df1c91d
commit
eaa514fb7a
3 changed files with 26 additions and 9 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue