mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 06:23:44 +08:00
feat: add lightweight mode
This commit is contained in:
parent
f5760784bf
commit
3b0635e8a1
@ -181,6 +181,9 @@ pub struct IVerge {
|
|||||||
pub webdav_password: Option<String>,
|
pub webdav_password: Option<String>,
|
||||||
|
|
||||||
pub enable_tray_speed: Option<bool>,
|
pub enable_tray_speed: Option<bool>,
|
||||||
|
|
||||||
|
/// 轻量模式 - 只保留内核运行
|
||||||
|
pub enable_lite_mode: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
||||||
@ -283,6 +286,7 @@ impl IVerge {
|
|||||||
webdav_password: None,
|
webdav_password: None,
|
||||||
enable_tray_speed: Some(true),
|
enable_tray_speed: Some(true),
|
||||||
enable_global_hotkey: Some(true),
|
enable_global_hotkey: Some(true),
|
||||||
|
enable_lite_mode: Some(false),
|
||||||
..Self::default()
|
..Self::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,6 +368,7 @@ impl IVerge {
|
|||||||
patch!(webdav_username);
|
patch!(webdav_username);
|
||||||
patch!(webdav_password);
|
patch!(webdav_password);
|
||||||
patch!(enable_tray_speed);
|
patch!(enable_tray_speed);
|
||||||
|
patch!(enable_lite_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 在初始化前尝试拿到单例端口的值
|
/// 在初始化前尝试拿到单例端口的值
|
||||||
@ -452,6 +457,7 @@ pub struct IVergeResponse {
|
|||||||
pub webdav_username: Option<String>,
|
pub webdav_username: Option<String>,
|
||||||
pub webdav_password: Option<String>,
|
pub webdav_password: Option<String>,
|
||||||
pub enable_tray_speed: Option<bool>,
|
pub enable_tray_speed: Option<bool>,
|
||||||
|
pub enable_lite_mode: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<IVerge> for IVergeResponse {
|
impl From<IVerge> for IVergeResponse {
|
||||||
@ -514,6 +520,7 @@ impl From<IVerge> for IVergeResponse {
|
|||||||
webdav_username: verge.webdav_username,
|
webdav_username: verge.webdav_username,
|
||||||
webdav_password: verge.webdav_password,
|
webdav_password: verge.webdav_password,
|
||||||
enable_tray_speed: verge.enable_tray_speed,
|
enable_tray_speed: verge.enable_tray_speed,
|
||||||
|
enable_lite_mode: verge.enable_lite_mode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -246,6 +246,7 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
|||||||
let proxy_bypass = patch.system_proxy_bypass;
|
let proxy_bypass = patch.system_proxy_bypass;
|
||||||
let language = patch.language;
|
let language = patch.language;
|
||||||
let mixed_port = patch.verge_mixed_port;
|
let mixed_port = patch.verge_mixed_port;
|
||||||
|
let lite_mode = patch.enable_lite_mode;
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
let tray_icon = patch.tray_icon;
|
let tray_icon = patch.tray_icon;
|
||||||
#[cfg(not(target_os = "macos"))]
|
#[cfg(not(target_os = "macos"))]
|
||||||
@ -373,6 +374,23 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
|
|||||||
if should_update_systray_tooltip {
|
if should_update_systray_tooltip {
|
||||||
tray::Tray::global().update_tooltip()?;
|
tray::Tray::global().update_tooltip()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理轻量模式切换
|
||||||
|
if lite_mode.is_some() {
|
||||||
|
if let Some(window) = handle::Handle::global().get_window() {
|
||||||
|
if lite_mode.unwrap() {
|
||||||
|
// 完全退出 webview 进程
|
||||||
|
window.close()?; // 先关闭窗口
|
||||||
|
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||||
|
if let Some(webview) = app_handle.get_webview_window("main") {
|
||||||
|
webview.destroy()?; // 销毁 webview 进程
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resolve::create_window(); // 重新创建窗口
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
<Result<()>>::Ok(())
|
<Result<()>>::Ok(())
|
||||||
};
|
};
|
||||||
match res {
|
match res {
|
||||||
|
@ -60,6 +60,7 @@ const SettingVerge = ({ onError }: Props) => {
|
|||||||
env_type,
|
env_type,
|
||||||
startup_script,
|
startup_script,
|
||||||
start_page,
|
start_page,
|
||||||
|
enable_lite_mode,
|
||||||
} = verge ?? {};
|
} = verge ?? {};
|
||||||
const configRef = useRef<DialogRef>(null);
|
const configRef = useRef<DialogRef>(null);
|
||||||
const hotkeyRef = useRef<DialogRef>(null);
|
const hotkeyRef = useRef<DialogRef>(null);
|
||||||
@ -69,7 +70,7 @@ const SettingVerge = ({ onError }: Props) => {
|
|||||||
const updateRef = useRef<DialogRef>(null);
|
const updateRef = useRef<DialogRef>(null);
|
||||||
const backupRef = useRef<DialogRef>(null);
|
const backupRef = useRef<DialogRef>(null);
|
||||||
|
|
||||||
const onChangeData = (patch: Partial<IVergeConfig>) => {
|
const onChangeData = (patch: any) => {
|
||||||
mutateVerge({ ...verge, ...patch }, false);
|
mutateVerge({ ...verge, ...patch }, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -292,6 +293,14 @@ const SettingVerge = ({ onError }: Props) => {
|
|||||||
|
|
||||||
<SettingItem onClick={openDevTools} label={t("Open Dev Tools")} />
|
<SettingItem onClick={openDevTools} label={t("Open Dev Tools")} />
|
||||||
|
|
||||||
|
<SettingItem
|
||||||
|
label={t("Lite Mode")}
|
||||||
|
extra={
|
||||||
|
<TooltipIcon title={t("Lite Mode Info")} sx={{ opacity: "0.7" }} />
|
||||||
|
}
|
||||||
|
onClick={() => patchVerge({ enable_lite_mode: true })}
|
||||||
|
/>
|
||||||
|
|
||||||
<SettingItem
|
<SettingItem
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
exitApp();
|
exitApp();
|
||||||
|
@ -433,5 +433,7 @@
|
|||||||
"Rule Mode": "规则模式",
|
"Rule Mode": "规则模式",
|
||||||
"Global Mode": "全局模式",
|
"Global Mode": "全局模式",
|
||||||
"Direct Mode": "直连模式",
|
"Direct Mode": "直连模式",
|
||||||
"Enable Tray Speed": "启用托盘速率"
|
"Enable Tray Speed": "启用托盘速率",
|
||||||
|
"Lite Mode": "轻量模式",
|
||||||
|
"Lite Mode Info": "开启后将关闭GUI界面,仅保留内核运行"
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import { getPortableFlag } from "@/services/cmds";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { TransitionGroup, CSSTransition } from "react-transition-group";
|
import { TransitionGroup, CSSTransition } from "react-transition-group";
|
||||||
import { useListen } from "@/hooks/use-listen";
|
import { useListen } from "@/hooks/use-listen";
|
||||||
|
import { listen } from "@tauri-apps/api/event";
|
||||||
|
|
||||||
const appWindow = getCurrentWebviewWindow();
|
const appWindow = getCurrentWebviewWindow();
|
||||||
export let portableFlag = false;
|
export let portableFlag = false;
|
||||||
@ -91,6 +92,24 @@ const Layout = () => {
|
|||||||
await appWindow.show();
|
await appWindow.show();
|
||||||
await appWindow.setFocus();
|
await appWindow.setFocus();
|
||||||
}, 50);
|
}, 50);
|
||||||
|
|
||||||
|
// 监听窗口显示/隐藏事件
|
||||||
|
const setupListeners = async () => {
|
||||||
|
const unlisten1 = await listen("verge://hide-window", () => {
|
||||||
|
appWindow.hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
const unlisten2 = await listen("verge://show-window", () => {
|
||||||
|
appWindow.show();
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
unlisten1();
|
||||||
|
unlisten2();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
setupListeners();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user