diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index e2582053..ac3c1190 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -169,8 +169,10 @@ pub async fn patch_clash_config(payload: Mapping) -> CmdResult { } #[tauri::command] -pub fn get_verge_config() -> CmdResult { - Ok(Config::verge().data().clone()) +pub fn get_verge_config() -> CmdResult { + let verge = Config::verge(); + let verge_data = verge.data().clone(); + Ok(IVergeResponse::from(verge_data)) } #[tauri::command] diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 0fb66ef4..596f8c2a 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -116,7 +116,7 @@ pub struct IVerge { /// proxy 页面布局 列数 pub proxy_layout_column: Option, - /// 测试网站列表 + /// 测试站列表 pub test_list: Option>, /// 日志清理 @@ -153,7 +153,8 @@ pub struct IVerge { #[serde( serialize_with = "serialize_encrypted", deserialize_with = "deserialize_encrypted", - skip_serializing_if = "Option::is_none" + skip_serializing_if = "Option::is_none", + default )] pub webdav_url: Option, @@ -161,7 +162,8 @@ pub struct IVerge { #[serde( serialize_with = "serialize_encrypted", deserialize_with = "deserialize_encrypted", - skip_serializing_if = "Option::is_none" + skip_serializing_if = "Option::is_none", + default )] pub webdav_username: Option, @@ -169,7 +171,8 @@ pub struct IVerge { #[serde( serialize_with = "serialize_encrypted", deserialize_with = "deserialize_encrypted", - skip_serializing_if = "Option::is_none" + skip_serializing_if = "Option::is_none", + default )] pub webdav_password: Option, } @@ -254,6 +257,9 @@ impl IVerge { auto_check_update: Some(true), enable_builtin_enhanced: Some(true), auto_log_clean: Some(3), + webdav_url: None, + webdav_username: None, + webdav_password: None, ..Self::default() } } @@ -361,3 +367,124 @@ impl IVerge { } } } + +#[derive(Debug, Clone, Serialize)] +pub struct IVergeResponse { + pub app_log_level: Option, + pub language: Option, + pub theme_mode: Option, + pub tray_event: Option, + pub env_type: Option, + pub start_page: Option, + pub startup_script: Option, + pub traffic_graph: Option, + pub enable_memory_usage: Option, + pub enable_group_icon: Option, + pub common_tray_icon: Option, + #[cfg(target_os = "macos")] + pub tray_icon: Option, + pub menu_icon: Option, + pub sysproxy_tray_icon: Option, + pub tun_tray_icon: Option, + pub enable_tun_mode: Option, + pub enable_auto_launch: Option, + pub enable_silent_start: Option, + pub enable_system_proxy: Option, + pub enable_proxy_guard: Option, + pub use_default_bypass: Option, + pub system_proxy_bypass: Option, + pub proxy_guard_duration: Option, + pub proxy_auto_config: Option, + pub pac_file_content: Option, + pub theme_setting: Option, + pub web_ui_list: Option>, + pub clash_core: Option, + pub hotkeys: Option>, + pub auto_close_connection: Option, + pub auto_check_update: Option, + pub default_latency_test: Option, + pub default_latency_timeout: Option, + pub enable_builtin_enhanced: Option, + pub proxy_layout_column: Option, + pub test_list: Option>, + pub auto_log_clean: Option, + pub enable_random_port: Option, + #[cfg(not(target_os = "windows"))] + pub verge_redir_port: Option, + #[cfg(not(target_os = "windows"))] + pub verge_redir_enabled: Option, + #[cfg(target_os = "linux")] + pub verge_tproxy_port: Option, + #[cfg(target_os = "linux")] + pub verge_tproxy_enabled: Option, + pub verge_mixed_port: Option, + pub verge_socks_port: Option, + pub verge_socks_enabled: Option, + pub verge_port: Option, + pub verge_http_enabled: Option, + pub webdav_url: Option, + pub webdav_username: Option, + pub webdav_password: Option, +} + +impl From for IVergeResponse { + fn from(verge: IVerge) -> Self { + Self { + app_log_level: verge.app_log_level, + language: verge.language, + theme_mode: verge.theme_mode, + tray_event: verge.tray_event, + env_type: verge.env_type, + start_page: verge.start_page, + startup_script: verge.startup_script, + traffic_graph: verge.traffic_graph, + enable_memory_usage: verge.enable_memory_usage, + enable_group_icon: verge.enable_group_icon, + common_tray_icon: verge.common_tray_icon, + #[cfg(target_os = "macos")] + tray_icon: verge.tray_icon, + menu_icon: verge.menu_icon, + sysproxy_tray_icon: verge.sysproxy_tray_icon, + tun_tray_icon: verge.tun_tray_icon, + enable_tun_mode: verge.enable_tun_mode, + enable_auto_launch: verge.enable_auto_launch, + enable_silent_start: verge.enable_silent_start, + enable_system_proxy: verge.enable_system_proxy, + enable_proxy_guard: verge.enable_proxy_guard, + use_default_bypass: verge.use_default_bypass, + system_proxy_bypass: verge.system_proxy_bypass, + proxy_guard_duration: verge.proxy_guard_duration, + proxy_auto_config: verge.proxy_auto_config, + pac_file_content: verge.pac_file_content, + theme_setting: verge.theme_setting, + web_ui_list: verge.web_ui_list, + clash_core: verge.clash_core, + hotkeys: verge.hotkeys, + auto_close_connection: verge.auto_close_connection, + auto_check_update: verge.auto_check_update, + default_latency_test: verge.default_latency_test, + default_latency_timeout: verge.default_latency_timeout, + enable_builtin_enhanced: verge.enable_builtin_enhanced, + proxy_layout_column: verge.proxy_layout_column, + test_list: verge.test_list, + auto_log_clean: verge.auto_log_clean, + enable_random_port: verge.enable_random_port, + #[cfg(not(target_os = "windows"))] + verge_redir_port: verge.verge_redir_port, + #[cfg(not(target_os = "windows"))] + verge_redir_enabled: verge.verge_redir_enabled, + #[cfg(target_os = "linux")] + verge_tproxy_port: verge.verge_tproxy_port, + #[cfg(target_os = "linux")] + verge_tproxy_enabled: verge.verge_tproxy_enabled, + verge_mixed_port: verge.verge_mixed_port, + verge_socks_port: verge.verge_socks_port, + verge_socks_enabled: verge.verge_socks_enabled, + verge_port: verge.verge_port, + verge_http_enabled: verge.verge_http_enabled, + webdav_url: verge.webdav_url, + webdav_username: verge.webdav_username, + webdav_password: verge.webdav_password, + } + } +} diff --git a/src/components/setting/mods/backup-config-viewer.tsx b/src/components/setting/mods/backup-config-viewer.tsx index 67119be4..d5d9d605 100644 --- a/src/components/setting/mods/backup-config-viewer.tsx +++ b/src/components/setting/mods/backup-config-viewer.tsx @@ -58,6 +58,14 @@ export const BackupConfigViewer = memo( webdav_username !== username || webdav_password !== password; + console.log( + "webdavChanged", + webdavChanged, + webdav_url, + webdav_username, + webdav_password, + ); + const handleClickShowPassword = () => { setShowPassword((prev) => !prev); }; @@ -98,12 +106,14 @@ export const BackupConfigViewer = memo( checkForm(); try { setLoading(true); - await saveWebdavConfig(data.url, data.username, data.password).then( - () => { - Notice.success(t("WebDAV Config Saved")); - onSaveSuccess(); - } - ); + await saveWebdavConfig( + data.url.trim(), + data.username.trim(), + data.password.trim(), + ).then(() => { + Notice.success(t("WebDAV Config Saved")); + onSaveSuccess(); + }); } catch (error) { Notice.error(t("WebDAV Config Save Failed", { error }), 3000); } finally { @@ -193,9 +203,9 @@ export const BackupConfigViewer = memo( sx={{ height: "100%" }} > {webdavChanged || - webdav_url === null || - webdav_username === null || - webdav_password === null ? ( + webdav_url === undefined || + webdav_username === undefined || + webdav_password === undefined ? (