From fd884ecd19f54ff94ea1826879d4aa3b2a9fb8d9 Mon Sep 17 00:00:00 2001 From: pompurin404 Date: Wed, 7 Aug 2024 17:11:16 +0800 Subject: [PATCH] adjust a little --- .gitignore | 1 - src/main/core/tray.ts | 25 ----- src/main/utils/template.ts | 10 +- .../src/components/sider/dns-card.tsx | 8 +- .../src/components/sider/sniff-card.tsx | 2 +- src/renderer/src/pages/dns.tsx | 98 +++++++++---------- src/renderer/src/pages/sniffer.tsx | 78 +++++++++------ src/shared/types.d.ts | 50 +++++++--- 8 files changed, 134 insertions(+), 138 deletions(-) diff --git a/.gitignore b/.gitignore index 9ee22ec5..d072e8a9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ out .DS_Store *.log* .idea -.vscode \ No newline at end of file diff --git a/src/main/core/tray.ts b/src/main/core/tray.ts index 9b6fa4cb..1a9dbdea 100644 --- a/src/main/core/tray.ts +++ b/src/main/core/tray.ts @@ -93,31 +93,6 @@ const buildContextMenu = (): Menu => { } }, { type: 'separator' }, - { - type: 'checkbox', - label: 'DNS', - checked: getControledMihomoConfig().dns?.enable ?? false, - click: (item): void => { - const enable = item.checked - setControledMihomoConfig({ dns: { enable } }) - patchMihomoConfig({ dns: { enable } }) - window?.webContents.send('controledMihomoConfigUpdated') - updateTrayMenu() - } - }, - { - type: 'checkbox', - label: '域名嗅探', - checked: getControledMihomoConfig().sniffer?.enable ?? false, - click: (item): void => { - const enable = item.checked - setControledMihomoConfig({ sniffer: { enable } }) - patchMihomoConfig({ sniffer: { enable } }) - window?.webContents.send('controledMihomoConfigUpdated') - updateTrayMenu() - } - }, - { type: 'separator' }, { type: 'submenu', label: '打开目录', diff --git a/src/main/utils/template.ts b/src/main/utils/template.ts index 4a816b27..211de2fd 100644 --- a/src/main/utils/template.ts +++ b/src/main/utils/template.ts @@ -37,11 +37,7 @@ export const defaultControledMihomoConfig: Partial = { 'fake-ip-range': '198.18.0.1/16', 'use-hosts': false, 'use-system-hosts': false, - // 'respect-rules': false, - nameserver:[ - 'https://doh.pub/dns-query', - 'https://dns.alidns.com/dns-query' - ] + nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'] }, sniffer: { enable: true, @@ -58,9 +54,7 @@ export const defaultControledMihomoConfig: Partial = { ports: [443] } }, - "skip-domain": [ - '+.push.apple.com' - ] + 'skip-domain': ['+.push.apple.com'] } } diff --git a/src/renderer/src/components/sider/dns-card.tsx b/src/renderer/src/components/sider/dns-card.tsx index 87181a08..3caf9d06 100644 --- a/src/renderer/src/components/sider/dns-card.tsx +++ b/src/renderer/src/components/sider/dns-card.tsx @@ -1,7 +1,7 @@ import { Button, Card, CardBody, CardFooter } from '@nextui-org/react' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' import BorderSwitch from '@renderer/components/base/border-swtich' -import { MdOutlineDns } from "react-icons/md" +import { MdOutlineDns } from 'react-icons/md' import { useLocation, useNavigate } from 'react-router-dom' import { patchMihomoConfig } from '@renderer/utils/ipc' @@ -20,7 +20,7 @@ const DNSCard: React.FC = () => { return ( navigate('/dns')} > @@ -45,9 +45,7 @@ const DNSCard: React.FC = () => { -

+

DNS

diff --git a/src/renderer/src/components/sider/sniff-card.tsx b/src/renderer/src/components/sider/sniff-card.tsx index b825b924..1bfb4744 100644 --- a/src/renderer/src/components/sider/sniff-card.tsx +++ b/src/renderer/src/components/sider/sniff-card.tsx @@ -1,6 +1,6 @@ import { Button, Card, CardBody, CardFooter } from '@nextui-org/react' import BorderSwitch from '@renderer/components/base/border-swtich' -import { GrDomain } from "react-icons/gr" +import { GrDomain } from 'react-icons/gr' import { useLocation, useNavigate } from 'react-router-dom' import { patchMihomoConfig } from '@renderer/utils/ipc' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' diff --git a/src/renderer/src/pages/dns.tsx b/src/renderer/src/pages/dns.tsx index f57f1f66..ed678b5f 100644 --- a/src/renderer/src/pages/dns.tsx +++ b/src/renderer/src/pages/dns.tsx @@ -1,5 +1,6 @@ -import { Button, Tab, Input, Switch, Tabs } from '@nextui-org/react' +import { Button, Tab, Input, Switch, Tabs, Divider } from '@nextui-org/react' import BasePage from '@renderer/components/base/base-page' +import { MdDeleteForever } from 'react-icons/md' import SettingCard from '@renderer/components/base/base-setting-card' import SettingItem from '@renderer/components/base/base-setting-item' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' @@ -14,11 +15,7 @@ const DNS: React.FC = () => { 'enhanced-mode': enhancedMode = 'fake-ip', 'use-hosts': useHosts = false, 'use-system-hosts': useSystemHosts = false, - // 'respect-rules': respectRules = false, - nameserver =[ - 'https://doh.pub/dns-query', - 'https://dns.alidns.com/dns-query' - ], + nameserver = ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'] } = dns || {} const [values, setValues] = useState({ @@ -26,41 +23,40 @@ const DNS: React.FC = () => { useHosts, enhancedMode, useSystemHosts, - // respectRules, nameserver, hosts: Object.entries(hosts || {}).map(([domain, value]) => ({ domain, value })) }) - const handleNameserverChange = (value: string, index: number) => { - const newNameservers = [...values.nameserver]; + const handleNameserverChange = (value: string, index: number): void => { + const newNameservers = [...values.nameserver] if (index === newNameservers.length) { if (value.trim() !== '') { - newNameservers.push(value); + newNameservers.push(value) } } else { if (value.trim() === '') { - newNameservers.splice(index, 1); + newNameservers.splice(index, 1) } else { - newNameservers[index] = value; + newNameservers[index] = value } } - setValues({ ...values, nameserver: newNameservers }); + setValues({ ...values, nameserver: newNameservers }) } - const handleHostsChange = (domain: string, value: string, index: number) => { - const newHosts = [...values.hosts]; + const handleHostsChange = (domain: string, value: string, index: number): void => { + const newHosts = [...values.hosts] if (index === newHosts.length) { if (domain.trim() !== '' || value.trim() !== '') { - newHosts.push({ domain: domain.trim(), value: value.trim() }); + newHosts.push({ domain: domain.trim(), value: value.trim() }) } } else { if (domain.trim() === '' && value.trim() === '') { - newHosts.splice(index, 1); + newHosts.splice(index, 1) } else { - newHosts[index] = { domain: domain.trim(), value: value.trim() }; + newHosts[index] = { domain: domain.trim(), value: value.trim() } } } - setValues({ ...values, hosts: newHosts }); + setValues({ ...values, hosts: newHosts }) } const onSave = async (patch: Partial): Promise => { @@ -78,18 +74,17 @@ const DNS: React.FC = () => { onPress={() => { const hostsObject = values.hosts.reduce((acc, { domain, value }) => { if (domain) { - acc[domain] = value; + acc[domain] = value } - return acc; - }, {}); + return acc + }, {}) onSave({ dns: { ipv6: values.ipv6, 'enhanced-mode': values.enhancedMode, 'use-hosts': values.useHosts, 'use-system-hosts': values.useSystemHosts, - // 'respect-rules': values.respectRules, - nameserver: values.nameserver, + nameserver: values.nameserver }, hosts: hostsObject }) @@ -97,7 +92,6 @@ const DNS: React.FC = () => { > 保存 - } > @@ -113,7 +107,7 @@ const DNS: React.FC = () => { - + { }} /> - {/* - { - setValues({ ...values, respectRules: v }) - }} - /> - */}
-

DNS服务器

+

DNS服务器

{[...values.nameserver, ''].map((ns, index) => ( -
+
handleNameserverChange(e.target.value, index)} - className="flex-grow" + onValueChange={(v) => handleNameserverChange(v, index)} /> {index < values.nameserver.length && ( - + )}
))}
-
+ {

{[...values.hosts, { domain: '', value: '' }].map(({ domain, value }, index) => ( -
-
+
+
handleHostsChange(e.target.value, Array.isArray(value) ? value.join(', ') : value, index)} - className="w-full" + onValueChange={(v) => + handleHostsChange(v, Array.isArray(value) ? value.join(', ') : value, index) + } />
- : -
+ : +
handleHostsChange(domain, e.target.value, index)} - className="flex-grow" + onValueChange={(v) => handleHostsChange(domain, v, index)} /> {index < values.hosts.length && ( )}
diff --git a/src/renderer/src/pages/sniffer.tsx b/src/renderer/src/pages/sniffer.tsx index e49c1a89..30073d06 100644 --- a/src/renderer/src/pages/sniffer.tsx +++ b/src/renderer/src/pages/sniffer.tsx @@ -1,10 +1,11 @@ -import { Button, Input, Switch } from '@nextui-org/react' +import { Button, Divider, Input, Switch } from '@nextui-org/react' import BasePage from '@renderer/components/base/base-page' import SettingCard from '@renderer/components/base/base-setting-card' import SettingItem from '@renderer/components/base/base-setting-item' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' import { restartCore } from '@renderer/utils/ipc' import React, { useState } from 'react' +import { MdDeleteForever } from 'react-icons/md' const Sniffer: React.FC = () => { const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig() @@ -15,12 +16,10 @@ const Sniffer: React.FC = () => { sniff = { HTTP: { ports: [80, 443] }, TLS: { ports: [443] }, - QUIC: { ports: [443] }, + QUIC: { ports: [443] } }, - 'skip-domain': skipDomain = [ - '+.push.apple.com' - ], - 'force-domain': forceDomain = [], + 'skip-domain': skipDomain = ['+.push.apple.com'], + 'force-domain': forceDomain = [] } = sniffer || {} const [values, setValues] = useState({ @@ -28,7 +27,7 @@ const Sniffer: React.FC = () => { overrideDestination, sniff, skipDomain, - forceDomain, + forceDomain }) const onSave = async (patch: Partial): Promise => { @@ -36,35 +35,34 @@ const Sniffer: React.FC = () => { await restartCore() } - const handleSniffPortChange = (protocol: keyof typeof sniff, value: string) => { + const handleSniffPortChange = (protocol: keyof typeof sniff, value: string): void => { setValues({ ...values, sniff: { ...values.sniff, [protocol]: { ...values.sniff[protocol], - ports: value.split(',').map(port => port.trim()), - }, - }, - }); - }; - const handleDomainChange = (type: string, value: string, index: number) => { - const newDomains = [...values[type]]; + ports: value.split(',').map((port) => port.trim()) + } + } + }) + } + const handleDomainChange = (type: string, value: string, index: number): void => { + const newDomains = [...values[type]] if (index === newDomains.length) { if (value.trim() !== '') { - newDomains.push(value); + newDomains.push(value) } } else { if (value.trim() === '') { - newDomains.splice(index, 1); + newDomains.splice(index, 1) } else { - newDomains[index] = value; + newDomains[index] = value } } - setValues({ ...values, [type]: newDomains }); + setValues({ ...values, [type]: newDomains }) } - return ( { 'override-destination': values.overrideDestination, sniff: values.sniff, 'skip-domain': values.skipDomain, - 'force-domain': values.forceDomain, + 'force-domain': values.forceDomain } }) } @@ -132,36 +130,52 @@ const Sniffer: React.FC = () => { />
-

跳过嗅探

+

跳过嗅探

{[...values.skipDomain, ''].map((d, index) => ( -
+
handleDomainChange('skipDomain', e.target.value, index)} - className="flex-grow" + onValueChange={(v) => handleDomainChange('skipDomain', v, index)} /> {index < values.skipDomain.length && ( - + )}
))}
-
+
-

强制嗅探

+

强制嗅探

{[...values.forceDomain, ''].map((d, index) => ( -
+
handleDomainChange('forceDomain', e.target.value, index)} - className="flex-grow" + onValueChange={(v) => handleDomainChange('forceDomain', v, index)} /> {index < values.forceDomain.length && ( - + )}
))} diff --git a/src/shared/types.d.ts b/src/shared/types.d.ts index b8594835..e0e7b0af 100644 --- a/src/shared/types.d.ts +++ b/src/shared/types.d.ts @@ -2,7 +2,26 @@ type OutboundMode = 'rule' | 'global' | 'direct' type LogLevel = 'info' | 'debug' | 'warning' | 'error' | 'silent' type SysProxyMode = 'auto' | 'manual' type MihomoGroupType = 'Selector' | 'URLTest' | 'LoadBalance' | 'Relay' -type MihomoProxyType = 'Direct' | 'Reject' | 'RejectDrop' | 'Pass' | 'Dns' | 'Compatible' | 'Socks5' | 'Http' | 'Ssh' | 'Shadowsocks' | 'ShadowsocksR' | 'Snell' | 'Vmess' | 'Vless' | 'Trojan' | 'Hysteria' | 'Hysteria2' | 'Tuic' | 'WireGuard' +type MihomoProxyType = + | 'Direct' + | 'Reject' + | 'RejectDrop' + | 'Pass' + | 'Dns' + | 'Compatible' + | 'Socks5' + | 'Http' + | 'Ssh' + | 'Shadowsocks' + | 'ShadowsocksR' + | 'Snell' + | 'Vmess' + | 'Vless' + | 'Trojan' + | 'Hysteria' + | 'Hysteria2' + | 'Tuic' + | 'WireGuard' type TunStack = 'gvisor' | 'mixed' | 'system' type FindProcessMode = 'off' | 'strict' | 'always' type DnsMode = 'normal' | 'fake-ip' | 'redir-host' @@ -187,25 +206,26 @@ interface IMihomoDNSConfig { 'proxy-server-nameserver'?: string[] 'nameserver-policy'?: { [key: string]: string | string[] } } + interface IMihomoSnifferConfig { - enable?: boolean; - 'parse-pure-ip'?: boolean; - 'override-destination'?: boolean; - 'force-dns-mapping'?: boolean; - 'force-domain'?: string[]; - 'skip-domain'?: string[]; + enable?: boolean + 'parse-pure-ip'?: boolean + 'override-destination'?: boolean + 'force-dns-mapping'?: boolean + 'force-domain'?: string[] + 'skip-domain'?: string[] sniff?: { HTTP?: { - ports: (number | string)[]; - 'override-destination'?: boolean; - }; + ports: (number | string)[] + 'override-destination'?: boolean + } TLS?: { - ports: (number | string)[]; - }; + ports: (number | string)[] + } QUIC?: { - ports: (number | string)[]; - }; - }; + ports: (number | string)[] + } + } } interface IMihomoConfig { 'external-controller': string