Переглянути джерело

feat: kill sidecars when update app

GyDi 3 роки тому
батько
коміт
f709117cc4

+ 7 - 1
src-tauri/src/cmds.rs

@@ -5,7 +5,7 @@ use crate::{
 };
 use serde_yaml::Mapping;
 use std::process::Command;
-use tauri::State;
+use tauri::{api, State};
 
 /// get all profiles from `profiles.yaml`
 /// do not acquire the lock of ProfileLock
@@ -273,6 +273,12 @@ pub async fn patch_verge_config(
   verge.patch_config(payload)
 }
 
+/// kill all sidecars when update app
+#[tauri::command]
+pub fn kill_sidecars() {
+  api::process::kill_children();
+}
+
 /// open app config dir
 #[tauri::command]
 pub fn open_app_dir() -> Result<(), String> {

+ 1 - 0
src-tauri/src/main.rs

@@ -74,6 +74,7 @@ fn main() -> std::io::Result<()> {
       cmds::restart_sidecar,
       cmds::get_sys_proxy,
       cmds::get_cur_proxy,
+      cmds::kill_sidecars,
       cmds::open_app_dir,
       cmds::open_logs_dir,
       // clash

+ 2 - 0
src/components/layout/update-dialog.tsx

@@ -10,6 +10,7 @@ import {
   DialogContentText,
   DialogTitle,
 } from "@mui/material";
+import { killSidecars } from "../../services/cmds";
 
 interface Props {
   open: boolean;
@@ -31,6 +32,7 @@ const UpdateDialog = (props: Props) => {
     try {
       setUploading(true);
       uploadingState = true;
+      await killSidecars();
       await installUpdate();
       await relaunch();
     } catch (error) {

+ 4 - 0
src/services/cmds.ts

@@ -64,6 +64,10 @@ export async function getSystemProxy() {
   return invoke<any>("get_sys_proxy");
 }
 
+export async function killSidecars() {
+  return invoke<any>("kill_sidecars");
+}
+
 export async function openAppDir() {
   return invoke<void>("open_app_dir");
 }