chore: improve startup time
This commit is contained in:
parent
726bf4d333
commit
9467834c29
@ -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 std::fs;
|
||||
use std::path::PathBuf;
|
||||
|
||||
@ -11,19 +11,18 @@ use tauri_plugin_shell::process::CommandEvent;
|
||||
use tauri_plugin_shell::ShellExt;
|
||||
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> {
|
||||
let store = app.store("store.json").expect("Store not initialized");
|
||||
let stored_version = if let Some(version) = store.get("version") {
|
||||
if let Some(version_str) = version.as_str() {
|
||||
version_str.to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
}
|
||||
} else {
|
||||
"".to_string()
|
||||
};
|
||||
let stored_version = store
|
||||
.get("version")
|
||||
.and_then(|v| v.as_str().map(String::from))
|
||||
.unwrap_or_default();
|
||||
|
||||
let app_version = app
|
||||
.config()
|
||||
@ -31,10 +30,8 @@ pub fn install_extensions(app: tauri::AppHandle, force: bool) -> Result<(), Stri
|
||||
.clone()
|
||||
.unwrap_or_else(|| "".to_string());
|
||||
|
||||
if !force {
|
||||
if stored_version == app_version {
|
||||
return Ok(());
|
||||
}
|
||||
if !force && stored_version == app_version {
|
||||
return Ok(());
|
||||
}
|
||||
let extensions_path = get_jan_extensions_path(app.clone());
|
||||
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
|
||||
if !extensions_path.exists() {
|
||||
fs::create_dir_all(&extensions_path).map_err(|e| e.to_string())?;
|
||||
@ -177,6 +178,19 @@ fn extract_extension_manifest<R: Read>(
|
||||
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> {
|
||||
// Setup sidecar
|
||||
|
||||
|
||||
@ -1,13 +1,11 @@
|
||||
mod core;
|
||||
use core::{
|
||||
cmd::get_jan_data_folder_path,
|
||||
mcp::run_mcp_commands,
|
||||
setup::{self, setup_engine_binaries, setup_sidecar},
|
||||
setup::{self, setup_engine_binaries, setup_mcp, setup_sidecar},
|
||||
state::{generate_app_token, AppState},
|
||||
};
|
||||
use std::{collections::HashMap, sync::Arc};
|
||||
|
||||
use tauri::{Emitter, Manager};
|
||||
use tauri::Emitter;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
@ -62,16 +60,7 @@ pub fn run() {
|
||||
eprintln!("Failed to install extensions: {}", e);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
setup_mcp(app);
|
||||
|
||||
setup_sidecar(app).expect("Failed to setup sidecar");
|
||||
|
||||
@ -80,7 +69,7 @@ pub fn run() {
|
||||
Ok(())
|
||||
})
|
||||
.on_window_event(|window, event| match event {
|
||||
tauri::WindowEvent::CloseRequested { .. } => {
|
||||
tauri::WindowEvent::CloseRequested { .. } => {
|
||||
window.emit("kill-sidecar", ()).unwrap();
|
||||
}
|
||||
_ => {}
|
||||
|
||||
@ -24,7 +24,9 @@ export const CoreConfigurator = ({ children }: PropsWithChildren) => {
|
||||
setTimeout(async () => {
|
||||
if (!isCoreExtensionInstalled()) {
|
||||
setSettingUp(true)
|
||||
await setupBaseExtensions()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 500))
|
||||
setupBaseExtensions()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user