Prechádzať zdrojové kódy

feat: allow disable group icon

MystiPanda 1 rok pred
rodič
commit
603c6b826c

+ 8 - 0
src-tauri/src/config/verge.rs

@@ -36,6 +36,9 @@ pub struct IVerge {
     /// show memory info (only for Clash Meta)
     pub enable_memory_usage: Option<bool>,
 
+    /// enable group icon
+    pub enable_group_icon: Option<bool>,
+
     /// common tray icon
     pub common_tray_icon: Option<bool>,
 
@@ -172,6 +175,10 @@ impl IVerge {
             start_page: Some("/".into()),
             traffic_graph: Some(true),
             enable_memory_usage: Some(true),
+            enable_group_icon: Some(true),
+            common_tray_icon: Some(false),
+            sysproxy_tray_icon: Some(false),
+            tun_tray_icon: Some(false),
             enable_auto_launch: Some(false),
             enable_silent_start: Some(false),
             enable_system_proxy: Some(false),
@@ -213,6 +220,7 @@ impl IVerge {
         patch!(startup_script);
         patch!(traffic_graph);
         patch!(enable_memory_usage);
+        patch!(enable_group_icon);
         patch!(common_tray_icon);
         patch!(sysproxy_tray_icon);
         patch!(tun_tray_icon);

+ 29 - 12
src/components/proxy/proxy-render.tsx

@@ -16,6 +16,7 @@ import { ProxyHead } from "./proxy-head";
 import { ProxyItem } from "./proxy-item";
 import { ProxyItemMini } from "./proxy-item-mini";
 import type { IRenderItem } from "./use-render-list";
+import { useVerge } from "@/hooks/use-verge";
 
 interface RenderProps {
   item: IRenderItem;
@@ -30,6 +31,8 @@ export const ProxyRender = (props: RenderProps) => {
   const { indent, item, onLocation, onCheckAll, onHeadState, onChangeProxy } =
     props;
   const { type, group, headState, proxy, proxyCol } = item;
+  const { verge } = useVerge();
+  const enable_group_icon = verge?.enable_group_icon ?? true;
 
   if (type === 0 && !group.hidden) {
     return (
@@ -37,18 +40,32 @@ export const ProxyRender = (props: RenderProps) => {
         dense
         onClick={() => onHeadState(group.name, { open: !headState?.open })}
       >
-        {group.icon && group.icon.trim().startsWith("http") && (
-          <img src={group.icon} height="40px" style={{ marginRight: "8px" }} />
-        )}
-        {group.icon && group.icon.trim().startsWith("data") && (
-          <img src={group.icon} height="40px" style={{ marginRight: "8px" }} />
-        )}
-        {group.icon && group.icon.trim().startsWith("<svg") && (
-          <img
-            src={`data:image/svg+xml;base64,${btoa(group.icon)}`}
-            height="40px"
-          />
-        )}
+        {enable_group_icon &&
+          group.icon &&
+          group.icon.trim().startsWith("http") && (
+            <img
+              src={group.icon}
+              height="40px"
+              style={{ marginRight: "8px" }}
+            />
+          )}
+        {enable_group_icon &&
+          group.icon &&
+          group.icon.trim().startsWith("data") && (
+            <img
+              src={group.icon}
+              height="40px"
+              style={{ marginRight: "8px" }}
+            />
+          )}
+        {enable_group_icon &&
+          group.icon &&
+          group.icon.trim().startsWith("<svg") && (
+            <img
+              src={`data:image/svg+xml;base64,${btoa(group.icon)}`}
+              height="40px"
+            />
+          )}
         <ListItemText
           primary={group.name}
           secondary={

+ 13 - 0
src/components/setting/mods/layout-viewer.tsx

@@ -84,6 +84,19 @@ export const LayoutViewer = forwardRef<DialogRef>((props, ref) => {
           </GuardState>
         </SettingItem>
 
+        <SettingItem label={t("Proxy Group Icon")}>
+          <GuardState
+            value={verge?.enable_group_icon ?? true}
+            valueProps="checked"
+            onCatch={onError}
+            onFormat={onSwitchFormat}
+            onChange={(e) => onChangeData({ enable_group_icon: e })}
+            onGuard={(e) => patchVerge({ enable_group_icon: e })}
+          >
+            <Switch edge="end" />
+          </GuardState>
+        </SettingItem>
+
         <SettingItem label={t("Common Tray Icon")}>
           <GuardState
             value={verge?.common_tray_icon}

+ 1 - 0
src/locales/en.json

@@ -110,6 +110,7 @@
   "Hotkey Setting": "Hotkey Setting",
   "Traffic Graph": "Traffic Graph",
   "Memory Usage": "Memory Usage",
+  "Proxy Group Icon": "Proxy Group Icon",
   "Common Tray Icon": "Common Tray Icon",
   "System Proxy Tray Icon": "System Proxy Tray Icon",
   "Tun Tray Icon": "Tun Tray Icon",

+ 1 - 0
src/locales/zh.json

@@ -110,6 +110,7 @@
   "Hotkey Setting": "热键设置",
   "Traffic Graph": "流量图显",
   "Memory Usage": "内存使用",
+  "Proxy Group Icon": "代理组图标",
   "Common Tray Icon": "常规托盘图标",
   "System Proxy Tray Icon": "系统代理托盘图标",
   "Tun Tray Icon": "Tun模式托盘图标",

+ 1 - 0
src/services/types.d.ts

@@ -200,6 +200,7 @@ interface IVergeConfig {
   theme_mode?: "light" | "dark" | "system";
   traffic_graph?: boolean;
   enable_memory_usage?: boolean;
+  enable_group_icon?: boolean;
   common_tray_icon?: boolean;
   sysproxy_tray_icon?: boolean;
   tun_tray_icon?: boolean;