From 3e3d2dcbcb6800d7ec725817c9f4b423a193ee1e Mon Sep 17 00:00:00 2001 From: polv Date: Thu, 25 Jun 2026 15:18:23 +0700 Subject: [PATCH] tauri to manage and kill ws-server --- package.json | 7 ++-- src-tauri/build.rs | 2 +- src-tauri/src/lib.rs | 68 +++++++++++++++++++++++++++++++-------- src-tauri/src/main.rs | 2 +- src-tauri/tauri.conf.json | 5 +-- 5 files changed, 64 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index e6484fb8..e77ca031 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,10 @@ "concurrently": "^10.0.3" }, "scripts": { - "dev": "concurrently 'pnpm:dev:*'", - "dev:server": "node server.js", - "dev:tauri": "tauri dev", + "dev": "tauri dev", + "browser": "concurrently 'pnpm:b:*'", + "b:server": "node server.js", + "b:vite": "vitepress dev docs --open", "vite": "vitepress dev docs", "build": "vitepress build docs", "preview": "vitepress preview docs" diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 795b9b7c..d860e1e6 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -1,3 +1,3 @@ fn main() { - tauri_build::build() + tauri_build::build() } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 9c3118c5..0f90805e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,16 +1,58 @@ +use tauri::Manager; + +use std::{process::{Child, Command}, sync::Mutex}; + +struct State { + child: Mutex>, +} + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - tauri::Builder::default() - .setup(|app| { - if cfg!(debug_assertions) { - app.handle().plugin( - tauri_plugin_log::Builder::default() - .level(log::LevelFilter::Info) - .build(), - )?; - } - Ok(()) - }) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + tauri::Builder::default() + .manage(State { + child: Mutex::new(None), + }) + .setup(|app| { + if cfg!(debug_assertions) { + app.handle().plugin( + tauri_plugin_log::Builder::default() + .level(log::LevelFilter::Info) + .build(), + )?; + } + + #[cfg(target_os = "windows")] + { + use std::{env, process::Stdio}; + + let cwd = env::current_dir()?; + let p = cwd.join("..").join("server.js"); + println!("{:?}", p); + + let child = Command::new("node") + .arg(p) + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .expect("spawn ws-server"); + + let state = app.handle().state::(); + *state.child.lock().unwrap() = Some(child); + } + + Ok(()) + }) + .build(tauri::generate_context!()) + .expect("error while running tauri application") + .run(|app_handle, event| match event { + // On exit handler should be avoided for mobile + #[cfg(target_os = "windows")] + tauri::RunEvent::ExitRequested { .. } => { + if let Some(mut child) = app_handle.state::().child.lock().unwrap().take() { + let _ = child.kill().expect("ws-server not killed"); + } + + } + _ => {} + }); } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index ad5fe839..69c3a72e 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,5 +2,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - app_lib::run(); + app_lib::run(); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index a40ad7ec..2e7bf421 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -13,9 +13,10 @@ "windows": [ { "title": "yt2press", - "width": 800, - "height": 600, + "width": 1024, + "height": 768, "resizable": true, + "maximized": true, "fullscreen": false } ],