Migrate updater LAN and devkit features from old repo
This commit is contained in:
@@ -1,27 +1,147 @@
|
||||
mod commands;
|
||||
pub mod serial_core;
|
||||
mod lan_game;
|
||||
pub mod log;
|
||||
pub mod serial_core;
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
pub mod devkit;
|
||||
|
||||
use commands::serial::SerialConnectionState;
|
||||
#[cfg(feature = "devkit")]
|
||||
use tauri::Manager;
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
fn start_server_exe(exe_path: &std::path::Path) {
|
||||
let mut command = std::process::Command::new(exe_path);
|
||||
command.arg("--port").arg("50051");
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
use std::os::windows::process::CommandExt;
|
||||
command.creation_flags(0x08000000);
|
||||
}
|
||||
|
||||
match command.spawn() {
|
||||
Ok(_) => ::log::info!("DevKit Python server started: {}", exe_path.display()),
|
||||
Err(error) => ::log::warn!("Failed to start DevKit Python server: {error}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
tauri::Builder::default()
|
||||
let builder = tauri::Builder::default()
|
||||
.plugin(tauri_plugin_process::init())
|
||||
.manage(SerialConnectionState::default())
|
||||
.plugin(tauri_plugin_opener::init())
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
commands::file_explorer::file_explorer_list,
|
||||
commands::serial::serial_enum,
|
||||
commands::serial::serial_connect,
|
||||
commands::serial::serial_disconnect,
|
||||
commands::serial::serial_export_csv,
|
||||
commands::serial::serial_has_record_data,
|
||||
commands::serial::serial_export_csv_to_path,
|
||||
commands::serial::serial_import_csv,
|
||||
commands::serial::serial_import_csv_from_path,
|
||||
commands::window::win_minimize,
|
||||
commands::window::win_toggle_maximize,
|
||||
commands::window::win_close
|
||||
])
|
||||
.plugin(tauri_plugin_opener::init());
|
||||
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
let builder = builder.plugin(tauri_plugin_updater::Builder::new().build());
|
||||
|
||||
#[cfg(any(target_os = "android", target_os = "ios"))]
|
||||
let builder = builder;
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
let builder = {
|
||||
let devkit_state = devkit::DevKitState::default();
|
||||
let devkit_state_clone = devkit_state.clone();
|
||||
|
||||
builder.manage(devkit_state).setup(move |app| {
|
||||
tauri::async_runtime::spawn(async {
|
||||
if let Err(error) = lan_game::serve().await {
|
||||
::log::error!("LAN game server failed: {error:?}");
|
||||
}
|
||||
});
|
||||
|
||||
let resource_dir = app
|
||||
.path()
|
||||
.resource_dir()
|
||||
.unwrap_or_else(|_| std::path::PathBuf::from("./resources"));
|
||||
|
||||
tauri::async_runtime::spawn(async move {
|
||||
#[cfg(target_os = "windows")]
|
||||
let exe_name = "je-skin-devkit-server.exe";
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
let exe_name = "je-skin-devkit-server";
|
||||
|
||||
let bundled_exe = resource_dir.join(exe_name);
|
||||
let fallback_exe = std::env::current_exe()
|
||||
.ok()
|
||||
.and_then(|path| path.parent().map(|parent| parent.join(exe_name)));
|
||||
|
||||
let server_exe = if bundled_exe.exists() {
|
||||
Some(bundled_exe)
|
||||
} else {
|
||||
fallback_exe.filter(|path| path.exists())
|
||||
};
|
||||
|
||||
if let Some(exe_path) = server_exe {
|
||||
start_server_exe(&exe_path);
|
||||
tokio::time::sleep(std::time::Duration::from_millis(1200)).await;
|
||||
} else {
|
||||
::log::info!("DevKit Python server not found, skipping auto-start");
|
||||
}
|
||||
|
||||
if let Err(error) = devkit_state_clone.start(50051).await {
|
||||
::log::warn!("DevKit auto-start failed: {error}");
|
||||
} else {
|
||||
::log::info!("DevKit auto-started on 127.0.0.1:50051");
|
||||
}
|
||||
});
|
||||
|
||||
Ok(())
|
||||
})
|
||||
};
|
||||
|
||||
#[cfg(not(feature = "devkit"))]
|
||||
let builder = builder.setup(|_app| {
|
||||
tauri::async_runtime::spawn(async {
|
||||
if let Err(error) = lan_game::serve().await {
|
||||
::log::error!("LAN game server failed: {error:?}");
|
||||
}
|
||||
});
|
||||
|
||||
Ok(())
|
||||
});
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
let builder = builder.invoke_handler(tauri::generate_handler![
|
||||
commands::file_explorer::file_explorer_list,
|
||||
commands::serial::serial_enum,
|
||||
commands::serial::serial_connect,
|
||||
commands::serial::serial_disconnect,
|
||||
commands::serial::serial_export_csv,
|
||||
commands::serial::serial_has_record_data,
|
||||
commands::serial::serial_export_csv_to_path,
|
||||
commands::serial::serial_import_csv,
|
||||
commands::serial::serial_import_csv_from_path,
|
||||
commands::window::win_minimize,
|
||||
commands::window::win_toggle_maximize,
|
||||
commands::window::win_close,
|
||||
commands::devkit::devkit_status,
|
||||
commands::devkit::devkit_start,
|
||||
commands::devkit::devkit_stop,
|
||||
commands::devkit::devkit_get_config,
|
||||
commands::devkit::devkit_set_config,
|
||||
commands::devkit::devkit_process_export
|
||||
]);
|
||||
|
||||
#[cfg(not(feature = "devkit"))]
|
||||
let builder = builder.invoke_handler(tauri::generate_handler![
|
||||
commands::file_explorer::file_explorer_list,
|
||||
commands::serial::serial_enum,
|
||||
commands::serial::serial_connect,
|
||||
commands::serial::serial_disconnect,
|
||||
commands::serial::serial_export_csv,
|
||||
commands::serial::serial_has_record_data,
|
||||
commands::serial::serial_export_csv_to_path,
|
||||
commands::serial::serial_import_csv,
|
||||
commands::serial::serial_import_csv_from_path,
|
||||
commands::window::win_minimize,
|
||||
commands::window::win_toggle_maximize,
|
||||
commands::window::win_close
|
||||
]);
|
||||
|
||||
builder
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user