mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
feat: lite mode settings
This commit is contained in:
@@ -191,6 +191,12 @@ pub struct IVerge {
|
||||
|
||||
/// 轻量模式 - 只保留内核运行
|
||||
pub enable_lite_mode: Option<bool>,
|
||||
|
||||
/// 自动进入轻量模式
|
||||
pub auto_enter_lite_mode: Option<bool>,
|
||||
|
||||
/// 自动进入轻量模式的延迟(分钟)
|
||||
pub auto_enter_lite_mode_delay: Option<u16>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
||||
@@ -294,6 +300,8 @@ impl IVerge {
|
||||
enable_tray_speed: Some(true),
|
||||
enable_global_hotkey: Some(true),
|
||||
enable_lite_mode: Some(false),
|
||||
auto_enter_lite_mode: Some(false),
|
||||
auto_enter_lite_mode_delay: Some(10),
|
||||
enable_dns_settings: Some(true),
|
||||
home_cards: None,
|
||||
..Self::default()
|
||||
@@ -378,6 +386,8 @@ impl IVerge {
|
||||
patch!(webdav_password);
|
||||
patch!(enable_tray_speed);
|
||||
patch!(enable_lite_mode);
|
||||
patch!(auto_enter_lite_mode);
|
||||
patch!(auto_enter_lite_mode_delay);
|
||||
patch!(enable_dns_settings);
|
||||
patch!(home_cards);
|
||||
}
|
||||
@@ -469,6 +479,8 @@ pub struct IVergeResponse {
|
||||
pub webdav_password: Option<String>,
|
||||
pub enable_tray_speed: Option<bool>,
|
||||
pub enable_lite_mode: Option<bool>,
|
||||
pub auto_enter_lite_mode: Option<bool>,
|
||||
pub auto_enter_lite_mode_delay: Option<u16>,
|
||||
pub enable_dns_settings: Option<bool>,
|
||||
pub home_cards: Option<serde_json::Value>,
|
||||
}
|
||||
@@ -534,6 +546,8 @@ impl From<IVerge> for IVergeResponse {
|
||||
webdav_password: verge.webdav_password,
|
||||
enable_tray_speed: verge.enable_tray_speed,
|
||||
enable_lite_mode: verge.enable_lite_mode,
|
||||
auto_enter_lite_mode: verge.auto_enter_lite_mode,
|
||||
auto_enter_lite_mode_delay: verge.auto_enter_lite_mode_delay,
|
||||
enable_dns_settings: verge.enable_dns_settings,
|
||||
home_cards: verge.home_cards,
|
||||
}
|
||||
|
||||
@@ -283,6 +283,41 @@ pub fn run() {
|
||||
api.prevent_close();
|
||||
let window = core::handle::Handle::global().get_window().unwrap();
|
||||
let _ = window.hide();
|
||||
|
||||
// 检查是否启用了自动进入 Lite Mode
|
||||
let verge = crate::config::Config::verge();
|
||||
let verge_config = verge.latest();
|
||||
let auto_enter_lite_mode = verge_config.auto_enter_lite_mode.unwrap_or(false);
|
||||
|
||||
if auto_enter_lite_mode {
|
||||
let delay_minutes = verge_config.auto_enter_lite_mode_delay.unwrap_or(10);
|
||||
let app_handle_clone = app_handle.clone();
|
||||
println!("自动进入 Lite Mode 已启用");
|
||||
// 启动一个线程,在指定延迟后启用 Lite Mode
|
||||
std::thread::spawn(move || {
|
||||
println!("等待 {} 分钟后自动进入 Lite Mode", delay_minutes);
|
||||
std::thread::sleep(std::time::Duration::from_secs(delay_minutes as u64 * 60));
|
||||
println!("Lite Mode 倒计时结束");
|
||||
|
||||
// 延迟后检查窗口是否仍然隐藏,如果是,则启用 Lite Mode
|
||||
let window_opt = app_handle_clone.get_webview_window("main");
|
||||
if let Some(window) = window_opt {
|
||||
if !window.is_visible().unwrap_or(true) {
|
||||
println!("倒计时结束,正在进入 Lite Mode...");
|
||||
// 应用 Lite Mode
|
||||
if let Err(e) = tauri::async_runtime::block_on(crate::feat::patch_verge(
|
||||
crate::config::IVerge {
|
||||
enable_lite_mode: Some(true),
|
||||
..Default::default()
|
||||
},
|
||||
false
|
||||
)) {
|
||||
println!("Lite Mode 进入失败: {:?}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
tauri::WindowEvent::Focused(true) => {
|
||||
#[cfg(target_os = "macos")]
|
||||
|
||||
Reference in New Issue
Block a user