mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-26 20:50:30 +08:00
refactor: Sniffing module with override logic
This commit is contained in:
parent
0a064bdbb8
commit
58e0925c5b
@ -4,7 +4,7 @@ import SettingItem from '../base/base-setting-item'
|
||||
import { Button, Input, Select, SelectItem, Switch, Tooltip } from '@heroui/react'
|
||||
import { useAppConfig } from '@renderer/hooks/use-app-config'
|
||||
import debounce from '@renderer/utils/debounce'
|
||||
import { getGistUrl, patchControledMihomoConfig, restartCore } from '@renderer/utils/ipc'
|
||||
import { getGistUrl, restartCore } from '@renderer/utils/ipc'
|
||||
import { MdDeleteForever } from 'react-icons/md'
|
||||
import { BiCopy } from 'react-icons/bi'
|
||||
import { IoIosHelpCircle } from 'react-icons/io'
|
||||
@ -16,7 +16,6 @@ const MihomoConfig: React.FC = () => {
|
||||
const { appConfig, patchAppConfig } = useAppConfig()
|
||||
const {
|
||||
diffWorkDir = false,
|
||||
controlSniff = true,
|
||||
delayTestConcurrency,
|
||||
delayTestTimeout,
|
||||
githubToken = '',
|
||||
@ -193,21 +192,7 @@ const MihomoConfig: React.FC = () => {
|
||||
/>
|
||||
</SettingItem>
|
||||
|
||||
<SettingItem title={t('mihomo.controlSniff')} divider>
|
||||
<Switch
|
||||
size="sm"
|
||||
isSelected={controlSniff}
|
||||
onValueChange={async (v) => {
|
||||
try {
|
||||
await patchAppConfig({ controlSniff: v })
|
||||
await patchControledMihomoConfig({})
|
||||
await restartCore()
|
||||
} catch (e) {
|
||||
alert(e)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</SettingItem>
|
||||
|
||||
<SettingItem title={t('mihomo.autoCloseConnection')} divider>
|
||||
<Switch
|
||||
size="sm"
|
||||
|
||||
@ -2,7 +2,7 @@ import { Button, Card, CardBody, CardFooter, Tooltip } from '@heroui/react'
|
||||
import BorderSwitch from '@renderer/components/base/border-swtich'
|
||||
import { RiScan2Fill } from 'react-icons/ri'
|
||||
import { useLocation, useNavigate } from 'react-router-dom'
|
||||
import { patchMihomoConfig } from '@renderer/utils/ipc'
|
||||
import { restartCore } from '@renderer/utils/ipc'
|
||||
import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config'
|
||||
import { useSortable } from '@dnd-kit/sortable'
|
||||
import { CSS } from '@dnd-kit/utilities'
|
||||
@ -15,15 +15,13 @@ interface Props {
|
||||
}
|
||||
const SniffCard: React.FC<Props> = (props) => {
|
||||
const { t } = useTranslation()
|
||||
const { appConfig } = useAppConfig()
|
||||
const { appConfig, patchAppConfig } = useAppConfig()
|
||||
const { iconOnly } = props
|
||||
const { sniffCardStatus = 'col-span-1', controlSniff = true } = appConfig || {}
|
||||
const location = useLocation()
|
||||
const navigate = useNavigate()
|
||||
const match = location.pathname.includes('/sniffer')
|
||||
const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig()
|
||||
const { sniffer } = controledMihomoConfig || {}
|
||||
const { enable } = sniffer || {}
|
||||
const { patchControledMihomoConfig } = useControledMihomoConfig()
|
||||
const {
|
||||
attributes,
|
||||
listeners,
|
||||
@ -35,14 +33,19 @@ const SniffCard: React.FC<Props> = (props) => {
|
||||
id: 'sniff'
|
||||
})
|
||||
const transform = tf ? { x: tf.x, y: tf.y, scaleX: 1, scaleY: 1 } : null
|
||||
const onChange = async (enable: boolean): Promise<void> => {
|
||||
await patchControledMihomoConfig({ sniffer: { enable } })
|
||||
await patchMihomoConfig({ sniffer: { enable } })
|
||||
const onChange = async (controlSniff: boolean): Promise<void> => {
|
||||
try {
|
||||
await patchAppConfig({ controlSniff })
|
||||
await patchControledMihomoConfig({})
|
||||
await restartCore()
|
||||
} catch (e) {
|
||||
alert(e)
|
||||
}
|
||||
}
|
||||
|
||||
if (iconOnly) {
|
||||
return (
|
||||
<div className={`${sniffCardStatus} ${!controlSniff ? 'hidden' : ''} flex justify-center`}>
|
||||
<div className={`${sniffCardStatus} flex justify-center`}>
|
||||
<Tooltip content={t('sider.cards.sniff')} placement="right">
|
||||
<Button
|
||||
size="sm"
|
||||
@ -68,7 +71,7 @@ const SniffCard: React.FC<Props> = (props) => {
|
||||
transition,
|
||||
zIndex: isDragging ? 'calc(infinity)' : undefined
|
||||
}}
|
||||
className={`${sniffCardStatus} ${!controlSniff ? 'hidden' : ''} sniff-card`}
|
||||
className={`${sniffCardStatus} sniff-card`}
|
||||
>
|
||||
<Card
|
||||
fullWidth
|
||||
@ -91,8 +94,8 @@ const SniffCard: React.FC<Props> = (props) => {
|
||||
/>
|
||||
</Button>
|
||||
<BorderSwitch
|
||||
isShowBorder={match && enable}
|
||||
isSelected={enable}
|
||||
isShowBorder={match && controlSniff}
|
||||
isSelected={controlSniff}
|
||||
onValueChange={onChange}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -216,7 +216,7 @@
|
||||
"sider.cards.connections": "Connections",
|
||||
"sider.cards.core": "Core Settings",
|
||||
"sider.cards.dns": "DNS Override",
|
||||
"sider.cards.sniff": "Sniffing",
|
||||
"sider.cards.sniff": "Sniff OVRD",
|
||||
"sider.cards.logs": "Logs",
|
||||
"sider.cards.substore": "Sub-Store",
|
||||
"sider.cards.config": "Runtime Config",
|
||||
@ -269,6 +269,7 @@
|
||||
"proxies.search.placeholder": "Search Proxies",
|
||||
"proxies.locate": "Locate Current Proxy",
|
||||
"sniffer.title": "Domain Sniffing Settings",
|
||||
"sniffer.enable": "Enable Domain Sniffing",
|
||||
"sniffer.parsePureIP": "Sniff Unmapped IP Addresses",
|
||||
"sniffer.forceDNSMapping": "Sniff Real IP Mappings",
|
||||
"sniffer.overrideDestination": "Override Connection Address",
|
||||
|
||||
@ -207,7 +207,7 @@
|
||||
"sider.cards.connections": "اتصالات",
|
||||
"sider.cards.core": "تنظیمات هسته",
|
||||
"sider.cards.dns": "بازنویسی دیاناس",
|
||||
"sider.cards.sniff": "تشخیص دامنه",
|
||||
"sider.cards.sniff": "لغو بو کشیدن",
|
||||
"sider.cards.logs": "گزارشها",
|
||||
"sider.cards.substore": "ساب استور",
|
||||
"sider.cards.config": "پیکربندی اجرا",
|
||||
@ -260,6 +260,7 @@
|
||||
"proxies.search.placeholder": "جستجوی پراکسیها",
|
||||
"proxies.locate": "یافتن پراکسی فعلی",
|
||||
"sniffer.title": "تنظیمات تشخیص دامنه",
|
||||
"sniffer.enable": "فعال کردن قابلیت شنود دامنه",
|
||||
"sniffer.parsePureIP": "تشخیص آدرسهای IP بدون نگاشت",
|
||||
"sniffer.forceDNSMapping": "تشخیص نگاشتهای IP واقعی",
|
||||
"sniffer.overrideDestination": "جایگزینی آدرس اتصال",
|
||||
|
||||
@ -207,7 +207,7 @@
|
||||
"sider.cards.connections": "Подключения",
|
||||
"sider.cards.core": "Настройки ядра",
|
||||
"sider.cards.dns": "Переопределение DNS",
|
||||
"sider.cards.sniff": "Анализ трафика",
|
||||
"sider.cards.sniff": "переопределение сниффинга",
|
||||
"sider.cards.logs": "Журналы",
|
||||
"sider.cards.substore": "Sub-Store",
|
||||
"sider.cards.config": "Конфигурация",
|
||||
@ -260,6 +260,7 @@
|
||||
"proxies.search.placeholder": "Поиск прокси",
|
||||
"proxies.locate": "Найти текущий прокси",
|
||||
"sniffer.title": "Настройки анализа доменов",
|
||||
"sniffer.enable": "Включить анализ домена",
|
||||
"sniffer.parsePureIP": "Анализировать немаппированные IP-адреса",
|
||||
"sniffer.forceDNSMapping": "Анализировать реальные IP-маппинги",
|
||||
"sniffer.overrideDestination": "Переопределить адрес подключения",
|
||||
|
||||
@ -216,7 +216,7 @@
|
||||
"sider.cards.connections": "连接",
|
||||
"sider.cards.core": "内核设置",
|
||||
"sider.cards.dns": "DNS覆写",
|
||||
"sider.cards.sniff": "域名嗅探",
|
||||
"sider.cards.sniff": "嗅探覆写",
|
||||
"sider.cards.logs": "日志",
|
||||
"sider.cards.substore": "Sub-Store",
|
||||
"sider.cards.config": "运行时配置",
|
||||
@ -269,6 +269,7 @@
|
||||
"proxies.search.placeholder": "搜索节点",
|
||||
"proxies.locate": "定位到当前节点",
|
||||
"sniffer.title": "域名嗅探设置",
|
||||
"sniffer.enable": "启用域名嗅探",
|
||||
"sniffer.parsePureIP": "对未映射 IP 地址嗅探",
|
||||
"sniffer.forceDNSMapping": "对真实 IP 映射嗅探",
|
||||
"sniffer.overrideDestination": "覆盖连接地址",
|
||||
|
||||
@ -13,6 +13,7 @@ const Sniffer: React.FC = () => {
|
||||
const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig()
|
||||
const { sniffer } = controledMihomoConfig || {}
|
||||
const {
|
||||
enable = true,
|
||||
'parse-pure-ip': parsePureIP = true,
|
||||
'force-dns-mapping': forceDNSMapping = true,
|
||||
'override-destination': overrideDestination = false,
|
||||
@ -65,6 +66,15 @@ const Sniffer: React.FC = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const onEnableChange = async (enable: boolean): Promise<void> => {
|
||||
try {
|
||||
await patchControledMihomoConfig({ sniffer: { enable } })
|
||||
await restartCore()
|
||||
} catch (e) {
|
||||
alert(e)
|
||||
}
|
||||
}
|
||||
|
||||
const handleSniffPortChange = (protocol: keyof typeof sniff, value: string): void => {
|
||||
setValues({
|
||||
...values,
|
||||
@ -146,6 +156,13 @@ const Sniffer: React.FC = () => {
|
||||
}
|
||||
>
|
||||
<SettingCard>
|
||||
<SettingItem title={t('sniffer.enable')} divider>
|
||||
<Switch
|
||||
size="sm"
|
||||
isSelected={enable}
|
||||
onValueChange={onEnableChange}
|
||||
/>
|
||||
</SettingItem>
|
||||
<SettingItem title={t('sniffer.overrideDestination')} divider>
|
||||
<Switch
|
||||
size="sm"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user