feat: implement auto lightweight mode timer functionality

This commit implements the automatic lightweight mode feature with timer functionality:

- Rename configuration properties from auto_enter_lite_mode to enable_auto_light_weight_mode and auto_enter_lite_mode_delay to auto_light_weight_minutes for better clarity
- Add window event listeners to detect when window is closed or gets focus
- Implement timer system to automatically enter lightweight mode after configured time
- Remove exit_lightweight_mode function as it's no longer needed with the new implementation
- Update UI components to reflect the new property names
- Add logging for lightweight mode operations
- Initialize lightweight mode based on user configuration at startup

The feature now allows users to set a timer that will automatically enter lightweight mode
after closing the main window, which can be cancelled by focusing the window again.
This commit is contained in:
Tunglies
2025-03-20 06:01:38 +08:00
parent 91ccb3045c
commit 81b5501b0e
9 changed files with 172 additions and 48 deletions

View File

@@ -190,10 +190,10 @@ pub struct IVerge {
pub enable_tray_speed: Option<bool>,
/// 自动进入轻量模式
pub auto_enter_lite_mode: Option<bool>,
pub enable_auto_light_weight_mode: Option<bool>,
/// 自动进入轻量模式的延迟(分钟)
pub auto_enter_lite_mode_delay: Option<u16>,
pub auto_light_weight_minutes: Option<u64>,
}
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
@@ -296,8 +296,8 @@ impl IVerge {
webdav_password: None,
enable_tray_speed: Some(true),
enable_global_hotkey: Some(true),
auto_enter_lite_mode: Some(false),
auto_enter_lite_mode_delay: Some(10),
enable_auto_light_weight_mode: Some(false),
auto_light_weight_minutes: Some(10),
enable_dns_settings: Some(true),
home_cards: None,
..Self::default()
@@ -381,8 +381,8 @@ impl IVerge {
patch!(webdav_username);
patch!(webdav_password);
patch!(enable_tray_speed);
patch!(auto_enter_lite_mode);
patch!(auto_enter_lite_mode_delay);
patch!(enable_auto_light_weight_mode);
patch!(auto_light_weight_minutes);
patch!(enable_dns_settings);
patch!(home_cards);
}
@@ -473,8 +473,8 @@ pub struct IVergeResponse {
pub webdav_username: Option<String>,
pub webdav_password: Option<String>,
pub enable_tray_speed: Option<bool>,
pub auto_enter_lite_mode: Option<bool>,
pub auto_enter_lite_mode_delay: Option<u16>,
pub enable_auto_light_weight_mode: Option<bool>,
pub auto_light_weight_minutes: Option<u64>,
pub enable_dns_settings: Option<bool>,
pub home_cards: Option<serde_json::Value>,
}
@@ -539,8 +539,8 @@ impl From<IVerge> for IVergeResponse {
webdav_username: verge.webdav_username,
webdav_password: verge.webdav_password,
enable_tray_speed: verge.enable_tray_speed,
auto_enter_lite_mode: verge.auto_enter_lite_mode,
auto_enter_lite_mode_delay: verge.auto_enter_lite_mode_delay,
enable_auto_light_weight_mode: verge.enable_auto_light_weight_mode,
auto_light_weight_minutes: verge.auto_light_weight_minutes,
enable_dns_settings: verge.enable_dns_settings,
home_cards: verge.home_cards,
}