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 crate::core::cmd::get_jan_data_folder_path;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user