From 29ec4dc546648e3e904f23cdfa676fdb320a337d Mon Sep 17 00:00:00 2001 From: huzibaca Date: Mon, 13 Jan 2025 20:48:25 +0800 Subject: [PATCH] feat: maoos tray speed can be closed --- src-tauri/src/config/verge.rs | 12 +++++++--- src-tauri/src/core/tray/mod.rs | 22 ++++++++++++------- src-tauri/src/feat.rs | 5 +++++ src/components/setting/mods/layout-viewer.tsx | 16 ++++++++++++++ src/locales/ar.json | 3 ++- src/locales/en.json | 3 ++- src/locales/fa.json | 3 ++- src/locales/id.json | 3 ++- src/locales/ru.json | 3 ++- src/locales/tt.json | 3 ++- src/locales/zh.json | 3 ++- src/services/types.d.ts | 1 + 12 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 73f045a8..54496252 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -1,7 +1,7 @@ use crate::config::DEFAULT_PAC; use crate::config::{deserialize_encrypted, serialize_encrypted}; -use crate::utils::{dirs, help}; use crate::utils::i18n; +use crate::utils::{dirs, help}; use anyhow::Result; use log::LevelFilter; use serde::{Deserialize, Serialize}; @@ -176,6 +176,8 @@ pub struct IVerge { default )] pub webdav_password: Option, + + pub enable_tray_speed: Option, } #[derive(Default, Debug, Clone, Deserialize, Serialize)] @@ -207,10 +209,10 @@ impl IVerge { let sys_lang = sys_locale::get_locale() .unwrap_or_else(|| String::from("en")) .to_lowercase(); - + let lang_code = sys_lang.split(['_', '-']).next().unwrap_or("en"); let supported_languages = i18n::get_supported_languages(); - + if supported_languages.contains(&lang_code.to_string()) { lang_code.to_string() } else { @@ -276,6 +278,7 @@ impl IVerge { webdav_url: None, webdav_username: None, webdav_password: None, + enable_tray_speed: Some(true), ..Self::default() } } @@ -355,6 +358,7 @@ impl IVerge { patch!(webdav_url); patch!(webdav_username); patch!(webdav_password); + patch!(enable_tray_speed); } /// 在初始化前尝试拿到单例端口的值 @@ -441,6 +445,7 @@ pub struct IVergeResponse { pub webdav_url: Option, pub webdav_username: Option, pub webdav_password: Option, + pub enable_tray_speed: Option, } impl From for IVergeResponse { @@ -501,6 +506,7 @@ impl From for IVergeResponse { webdav_url: verge.webdav_url, webdav_username: verge.webdav_username, webdav_password: verge.webdav_password, + enable_tray_speed: verge.enable_tray_speed, } } } diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index 123546f5..59602acd 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -216,16 +216,22 @@ impl Tray { #[cfg(target_os = "macos")] { + let enable_tray_speed = Config::verge().latest().enable_tray_speed.unwrap_or(true); let is_template = crate::utils::help::is_monochrome_image_from_bytes(&icon_bytes).unwrap_or(false); - // 如果rate为None,获取当前速率 - let rate = rate.or_else(|| { - self.speed_rate - .lock() - .as_ref() - .and_then(|speed_rate| speed_rate.get_curent_rate()) - }); - let icon_bytes = SpeedRate::add_speed_text(icon_bytes, rate)?; + + let icon_bytes = if enable_tray_speed { + let rate = rate.or_else(|| { + self.speed_rate + .lock() + .as_ref() + .and_then(|speed_rate| speed_rate.get_curent_rate()) + }); + SpeedRate::add_speed_text(icon_bytes, rate)? + } else { + icon_bytes + }; + let _ = tray.set_icon(Some(tauri::image::Image::from_bytes(&icon_bytes)?)); let _ = tray.set_icon_as_template(is_template); } diff --git a/src-tauri/src/feat.rs b/src-tauri/src/feat.rs index 3cecdc23..821f3c37 100644 --- a/src-tauri/src/feat.rs +++ b/src-tauri/src/feat.rs @@ -194,6 +194,7 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> { let socks_port = patch.verge_socks_port; let http_enabled = patch.verge_http_enabled; let http_port = patch.verge_port; + let enable_tray_speed = patch.enable_tray_speed; let res: std::result::Result<(), anyhow::Error> = { let mut should_restart_core = false; @@ -260,6 +261,10 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> { should_update_systray_menu = true; } + if enable_tray_speed.is_some() { + should_update_systray_icon = true; + } + if should_restart_core { CoreManager::global().restart_core().await?; } diff --git a/src/components/setting/mods/layout-viewer.tsx b/src/components/setting/mods/layout-viewer.tsx index be0d70cd..21f79f5e 100644 --- a/src/components/setting/mods/layout-viewer.tsx +++ b/src/components/setting/mods/layout-viewer.tsx @@ -8,6 +8,7 @@ import { styled, ListItem, ListItemText, + Box, } from "@mui/material"; import { useVerge } from "@/hooks/use-verge"; import { BaseDialog, DialogRef, Notice, Switch } from "@/components/base"; @@ -163,6 +164,21 @@ export const LayoutViewer = forwardRef((props, ref) => { )} + {OS === "macos" && ( + + + onChangeData({ enable_tray_speed: e })} + onGuard={(e) => patchVerge({ enable_tray_speed: e })} + > + + + + )} diff --git a/src/locales/ar.json b/src/locales/ar.json index 07913544..d5594f49 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -433,5 +433,6 @@ "Dashboard": "لوحة التحكم", "Rule Mode": "وضع القواعد", "Global Mode": "الوضع العالمي", - "Direct Mode": "الوضع المباشر" + "Direct Mode": "الوضع المباشر", + "Enable Tray Speed": "تفعيل سرعة التراي" } diff --git a/src/locales/en.json b/src/locales/en.json index c9f96ec8..867588b7 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -436,5 +436,6 @@ "Dashboard": "Dashboard", "Rule Mode": "Rule Mode", "Global Mode": "Global Mode", - "Direct Mode": "Direct Mode" + "Direct Mode": "Direct Mode", + "Enable Tray Speed": "Enable Tray Speed" } diff --git a/src/locales/fa.json b/src/locales/fa.json index 4333c0d6..2cbc4a6d 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -430,5 +430,6 @@ "More": "بیشتر", "Rule Mode": "حالت قوانین", "Global Mode": "حالت جهانی", - "Direct Mode": "حالت مستقیم" + "Direct Mode": "حالت مستقیم", + "Enable Tray Speed": "فعال کردن سرعت ترای" } diff --git a/src/locales/id.json b/src/locales/id.json index 67cf34e8..9da5e859 100644 --- a/src/locales/id.json +++ b/src/locales/id.json @@ -429,5 +429,6 @@ "Confirm to delete this backup file?": "Konfirmasi untuk menghapus file cadangan ini?", "Confirm to restore this backup file?": "Konfirmasi untuk memulihkan file cadangan ini?", "Restore Success, App will restart in 1s": "Pemulihan Berhasil, Aplikasi akan dimulai ulang dalam 1 detik", - "Failed to fetch backup files": "Gagal mengambil file cadangan" + "Failed to fetch backup files": "Gagal mengambil file cadangan", + "Enable Tray Speed": "Aktifkan Tray Speed" } diff --git a/src/locales/ru.json b/src/locales/ru.json index 6ba19eb5..0fb0b78f 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -430,5 +430,6 @@ "More": "Ещё", "Rule Mode": "Режим правил", "Global Mode": "Глобальный режим", - "Direct Mode": "Прямой режим" + "Direct Mode": "Прямой режим", + "Enable Tray Speed": "Включить скорость в лотке" } diff --git a/src/locales/tt.json b/src/locales/tt.json index 2d5c6dc0..37829d08 100644 --- a/src/locales/tt.json +++ b/src/locales/tt.json @@ -429,5 +429,6 @@ "More": "Башҡа", "Rule Mode": "Кагыйдә режимы", "Global Mode": "Глобаль режим", - "Direct Mode": "Туры режим" + "Direct Mode": "Туры режим", + "Enable Tray Speed": "Трей скоростьне үстерү" } diff --git a/src/locales/zh.json b/src/locales/zh.json index cd0c500f..8b8492fa 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -430,5 +430,6 @@ "More": "更多", "Rule Mode": "规则模式", "Global Mode": "全局模式", - "Direct Mode": "直连模式" + "Direct Mode": "直连模式", + "Enable Tray Speed": "启用托盘速率" } diff --git a/src/services/types.d.ts b/src/services/types.d.ts index 4da1beb5..2ce4a891 100644 --- a/src/services/types.d.ts +++ b/src/services/types.d.ts @@ -706,6 +706,7 @@ interface IVergeConfig { common_tray_icon?: boolean; sysproxy_tray_icon?: boolean; tun_tray_icon?: boolean; + enable_tray_speed?: boolean; enable_tun_mode?: boolean; enable_auto_launch?: boolean; enable_silent_start?: boolean;