feat: maoos tray speed can be closed

This commit is contained in:
huzibaca 2025-01-13 20:48:25 +08:00
parent d0d5204cbc
commit 29ec4dc546
12 changed files with 59 additions and 18 deletions

View File

@ -1,7 +1,7 @@
use crate::config::DEFAULT_PAC; use crate::config::DEFAULT_PAC;
use crate::config::{deserialize_encrypted, serialize_encrypted}; use crate::config::{deserialize_encrypted, serialize_encrypted};
use crate::utils::{dirs, help};
use crate::utils::i18n; use crate::utils::i18n;
use crate::utils::{dirs, help};
use anyhow::Result; use anyhow::Result;
use log::LevelFilter; use log::LevelFilter;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -176,6 +176,8 @@ pub struct IVerge {
default default
)] )]
pub webdav_password: Option<String>, pub webdav_password: Option<String>,
pub enable_tray_speed: Option<bool>,
} }
#[derive(Default, Debug, Clone, Deserialize, Serialize)] #[derive(Default, Debug, Clone, Deserialize, Serialize)]
@ -276,6 +278,7 @@ impl IVerge {
webdav_url: None, webdav_url: None,
webdav_username: None, webdav_username: None,
webdav_password: None, webdav_password: None,
enable_tray_speed: Some(true),
..Self::default() ..Self::default()
} }
} }
@ -355,6 +358,7 @@ impl IVerge {
patch!(webdav_url); patch!(webdav_url);
patch!(webdav_username); patch!(webdav_username);
patch!(webdav_password); patch!(webdav_password);
patch!(enable_tray_speed);
} }
/// 在初始化前尝试拿到单例端口的值 /// 在初始化前尝试拿到单例端口的值
@ -441,6 +445,7 @@ pub struct IVergeResponse {
pub webdav_url: Option<String>, pub webdav_url: Option<String>,
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>,
} }
impl From<IVerge> for IVergeResponse { impl From<IVerge> for IVergeResponse {
@ -501,6 +506,7 @@ impl From<IVerge> for IVergeResponse {
webdav_url: verge.webdav_url, webdav_url: verge.webdav_url,
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,
} }
} }
} }

View File

@ -216,16 +216,22 @@ impl Tray {
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
{ {
let enable_tray_speed = Config::verge().latest().enable_tray_speed.unwrap_or(true);
let is_template = let is_template =
crate::utils::help::is_monochrome_image_from_bytes(&icon_bytes).unwrap_or(false); crate::utils::help::is_monochrome_image_from_bytes(&icon_bytes).unwrap_or(false);
// 如果rate为None获取当前速率
let rate = rate.or_else(|| { let icon_bytes = if enable_tray_speed {
self.speed_rate let rate = rate.or_else(|| {
.lock() self.speed_rate
.as_ref() .lock()
.and_then(|speed_rate| speed_rate.get_curent_rate()) .as_ref()
}); .and_then(|speed_rate| speed_rate.get_curent_rate())
let icon_bytes = SpeedRate::add_speed_text(icon_bytes, 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(Some(tauri::image::Image::from_bytes(&icon_bytes)?));
let _ = tray.set_icon_as_template(is_template); let _ = tray.set_icon_as_template(is_template);
} }

View File

@ -194,6 +194,7 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
let socks_port = patch.verge_socks_port; let socks_port = patch.verge_socks_port;
let http_enabled = patch.verge_http_enabled; let http_enabled = patch.verge_http_enabled;
let http_port = patch.verge_port; let http_port = patch.verge_port;
let enable_tray_speed = patch.enable_tray_speed;
let res: std::result::Result<(), anyhow::Error> = { let res: std::result::Result<(), anyhow::Error> = {
let mut should_restart_core = false; let mut should_restart_core = false;
@ -260,6 +261,10 @@ pub async fn patch_verge(patch: IVerge) -> Result<()> {
should_update_systray_menu = true; should_update_systray_menu = true;
} }
if enable_tray_speed.is_some() {
should_update_systray_icon = true;
}
if should_restart_core { if should_restart_core {
CoreManager::global().restart_core().await?; CoreManager::global().restart_core().await?;
} }

View File

@ -8,6 +8,7 @@ import {
styled, styled,
ListItem, ListItem,
ListItemText, ListItemText,
Box,
} from "@mui/material"; } from "@mui/material";
import { useVerge } from "@/hooks/use-verge"; import { useVerge } from "@/hooks/use-verge";
import { BaseDialog, DialogRef, Notice, Switch } from "@/components/base"; import { BaseDialog, DialogRef, Notice, Switch } from "@/components/base";
@ -163,6 +164,21 @@ export const LayoutViewer = forwardRef<DialogRef>((props, ref) => {
</GuardState> </GuardState>
</Item> </Item>
)} )}
{OS === "macos" && (
<Item>
<ListItemText primary={t("Enable Tray Speed")} />
<GuardState
value={verge?.enable_tray_speed ?? true}
valueProps="checked"
onCatch={onError}
onFormat={onSwitchFormat}
onChange={(e) => onChangeData({ enable_tray_speed: e })}
onGuard={(e) => patchVerge({ enable_tray_speed: e })}
>
<Switch edge="end" />
</GuardState>
</Item>
)}
<Item> <Item>
<ListItemText primary={t("Common Tray Icon")} /> <ListItemText primary={t("Common Tray Icon")} />

View File

@ -433,5 +433,6 @@
"Dashboard": "لوحة التحكم", "Dashboard": "لوحة التحكم",
"Rule Mode": "وضع القواعد", "Rule Mode": "وضع القواعد",
"Global Mode": "الوضع العالمي", "Global Mode": "الوضع العالمي",
"Direct Mode": "الوضع المباشر" "Direct Mode": "الوضع المباشر",
"Enable Tray Speed": "تفعيل سرعة التراي"
} }

View File

@ -436,5 +436,6 @@
"Dashboard": "Dashboard", "Dashboard": "Dashboard",
"Rule Mode": "Rule Mode", "Rule Mode": "Rule Mode",
"Global Mode": "Global Mode", "Global Mode": "Global Mode",
"Direct Mode": "Direct Mode" "Direct Mode": "Direct Mode",
"Enable Tray Speed": "Enable Tray Speed"
} }

View File

@ -430,5 +430,6 @@
"More": "بیشتر", "More": "بیشتر",
"Rule Mode": "حالت قوانین", "Rule Mode": "حالت قوانین",
"Global Mode": "حالت جهانی", "Global Mode": "حالت جهانی",
"Direct Mode": "حالت مستقیم" "Direct Mode": "حالت مستقیم",
"Enable Tray Speed": "فعال کردن سرعت ترای"
} }

View File

@ -429,5 +429,6 @@
"Confirm to delete this backup file?": "Konfirmasi untuk menghapus file cadangan ini?", "Confirm to delete this backup file?": "Konfirmasi untuk menghapus file cadangan ini?",
"Confirm to restore this backup file?": "Konfirmasi untuk memulihkan 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", "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"
} }

View File

@ -430,5 +430,6 @@
"More": "Ещё", "More": "Ещё",
"Rule Mode": "Режим правил", "Rule Mode": "Режим правил",
"Global Mode": "Глобальный режим", "Global Mode": "Глобальный режим",
"Direct Mode": "Прямой режим" "Direct Mode": "Прямой режим",
"Enable Tray Speed": "Включить скорость в лотке"
} }

View File

@ -429,5 +429,6 @@
"More": "Башҡа", "More": "Башҡа",
"Rule Mode": "Кагыйдә режимы", "Rule Mode": "Кагыйдә режимы",
"Global Mode": "Глобаль режим", "Global Mode": "Глобаль режим",
"Direct Mode": "Туры режим" "Direct Mode": "Туры режим",
"Enable Tray Speed": "Трей скоростьне үстерү"
} }

View File

@ -430,5 +430,6 @@
"More": "更多", "More": "更多",
"Rule Mode": "规则模式", "Rule Mode": "规则模式",
"Global Mode": "全局模式", "Global Mode": "全局模式",
"Direct Mode": "直连模式" "Direct Mode": "直连模式",
"Enable Tray Speed": "启用托盘速率"
} }

View File

@ -706,6 +706,7 @@ interface IVergeConfig {
common_tray_icon?: boolean; common_tray_icon?: boolean;
sysproxy_tray_icon?: boolean; sysproxy_tray_icon?: boolean;
tun_tray_icon?: boolean; tun_tray_icon?: boolean;
enable_tray_speed?: boolean;
enable_tun_mode?: boolean; enable_tun_mode?: boolean;
enable_auto_launch?: boolean; enable_auto_launch?: boolean;
enable_silent_start?: boolean; enable_silent_start?: boolean;