chore: improve startup time

This commit is contained in:
Louis 2025-03-30 22:18:54 +07:00
parent 726bf4d333
commit 9467834c29
No known key found for this signature in database
GPG Key ID: 44FA9F4D33C37DE2
4 changed files with 37 additions and 30 deletions

View File

@ -1,3 +1,5 @@
// WARNING: These APIs will be deprecated soon due to removing FS API access from frontend.
// It's added to ensure the legacy implementation from frontend still functions before removal.
use crate::core::cmd::get_jan_data_folder_path; use crate::core::cmd::get_jan_data_folder_path;
use std::fs; use std::fs;
use std::path::PathBuf; use std::path::PathBuf;

View File

@ -11,19 +11,18 @@ use tauri_plugin_shell::process::CommandEvent;
use tauri_plugin_shell::ShellExt; use tauri_plugin_shell::ShellExt;
use tauri_plugin_store::StoreExt; use tauri_plugin_store::StoreExt;
use super::{cmd::get_jan_extensions_path, state::AppState}; use super::{
cmd::{get_jan_data_folder_path, get_jan_extensions_path},
mcp::run_mcp_commands,
state::AppState,
};
pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), String> { pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), String> {
let store = app.store("store.json").expect("Store not initialized"); let store = app.store("store.json").expect("Store not initialized");
let stored_version = if let Some(version) = store.get("version") { let stored_version = store
if let Some(version_str) = version.as_str() { .get("version")
version_str.to_string() .and_then(|v| v.as_str().map(String::from))
} else { .unwrap_or_default();
"".to_string()
}
} else {
"".to_string()
};
let app_version = app let app_version = app
.config() .config()
@ -31,10 +30,8 @@ pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), Stri
.clone() .clone()
.unwrap_or_else(|| "".to_string()); .unwrap_or_else(|| "".to_string());
if !force { if !force && stored_version == app_version {
if stored_version == app_version { return Ok(());
return Ok(());
}
} }
let extensions_path = get_jan_extensions_path(app.clone()); let extensions_path = get_jan_extensions_path(app.clone());
let pre_install_path = PathBuf::from("./resources/pre-install"); let pre_install_path = PathBuf::from("./resources/pre-install");
@ -46,6 +43,10 @@ pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), Stri
}); });
} }
if !force {
return Ok(());
};
// Attempt to create it again // Attempt to create it again
if !extensions_path.exists() { if !extensions_path.exists() {
fs::create_dir_all(&extensions_path).map_err(|e| e.to_string())?; fs::create_dir_all(&extensions_path).map_err(|e| e.to_string())?;
@ -177,6 +178,19 @@ fn extract_extension_manifest<R: Read>(
Ok(None) Ok(None)
} }
pub fn setup_mcp(app: &App) {
let app_path = get_jan_data_folder_path(app.handle().clone());
let state = app.state::<AppState>().inner();
let app_path_str = app_path.to_str().unwrap().to_string();
let servers = state.mcp_servers.clone();
tauri::async_runtime::spawn(async move {
if let Err(e) = run_mcp_commands(app_path_str, servers).await {
eprintln!("Failed to run mcp commands: {}", e);
}
});
}
pub fn setup_sidecar(app: &App) -> Result<(), String> { pub fn setup_sidecar(app: &App) -> Result<(), String> {
// Setup sidecar // Setup sidecar

View File

@ -1,13 +1,11 @@
mod core; mod core;
use core::{ use core::{
cmd::get_jan_data_folder_path, setup::{self, setup_engine_binaries, setup_mcp, setup_sidecar},
mcp::run_mcp_commands,
setup::{self, setup_engine_binaries, setup_sidecar},
state::{generate_app_token, AppState}, state::{generate_app_token, AppState},
}; };
use std::{collections::HashMap, sync::Arc}; use std::{collections::HashMap, sync::Arc};
use tauri::{Emitter, Manager}; use tauri::Emitter;
use tokio::sync::Mutex; use tokio::sync::Mutex;
#[cfg_attr(mobile, tauri::mobile_entry_point)] #[cfg_attr(mobile, tauri::mobile_entry_point)]
@ -62,16 +60,7 @@ pub fn run() {
eprintln!("Failed to install extensions: {}", e); eprintln!("Failed to install extensions: {}", e);
} }
let app_path = get_jan_data_folder_path(app.handle().clone()); setup_mcp(app);
let state = app.state::<AppState>().inner();
let app_path_str = app_path.to_str().unwrap().to_string();
let servers = state.mcp_servers.clone();
tauri::async_runtime::spawn(async move {
if let Err(e) = run_mcp_commands(app_path_str, servers).await {
eprintln!("Failed to run mcp commands: {}", e);
}
});
setup_sidecar(app).expect("Failed to setup sidecar"); setup_sidecar(app).expect("Failed to setup sidecar");
@ -80,7 +69,7 @@ pub fn run() {
Ok(()) Ok(())
}) })
.on_window_event(|window, event| match event { .on_window_event(|window, event| match event {
tauri::WindowEvent::CloseRequested { .. } => { tauri::WindowEvent::CloseRequested { .. } => {
window.emit("kill-sidecar", ()).unwrap(); window.emit("kill-sidecar", ()).unwrap();
} }
_ => {} _ => {}

View File

@ -24,7 +24,9 @@ export const CoreConfigurator = ({ children }: PropsWithChildren) => {
setTimeout(async () => { setTimeout(async () => {
if (!isCoreExtensionInstalled()) { if (!isCoreExtensionInstalled()) {
setSettingUp(true) setSettingUp(true)
await setupBaseExtensions()
await new Promise((resolve) => setTimeout(resolve, 500))
setupBaseExtensions()
return return
} }