Skip to content

Commit 71ebb00

Browse files
author
pompurin404
committed
set sysproxy bypass
1 parent 95ae550 commit 71ebb00

File tree

3 files changed

+78
-9
lines changed

3 files changed

+78
-9
lines changed

src/main/resolve/sysproxy.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ export function triggerSysProxy(enable: boolean): void {
5252

5353
export function enableSysProxy(): void {
5454
const { sysProxy } = getAppConfig()
55-
const { mode, host, bypass = defaultBypass } = sysProxy
55+
const { mode, host, bypass = [], useDefaultBypass } = sysProxy
56+
if (useDefaultBypass) bypass.unshift(...defaultBypass)
5657
const { 'mixed-port': port = 7890 } = getControledMihomoConfig()
5758

5859
switch (mode || 'manual') {

src/renderer/src/pages/syspeoxy.tsx

+75-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Button, Input, Tab, Tabs } from '@nextui-org/react'
1+
import { Button, Input, Switch, Tab, Tabs } from '@nextui-org/react'
22
import BasePage from '@renderer/components/base/base-page'
33
import SettingCard from '@renderer/components/base/base-setting-card'
44
import SettingItem from '@renderer/components/base/base-setting-item'
@@ -7,6 +7,7 @@ import { useAppConfig } from '@renderer/hooks/use-app-config'
77
import { triggerSysProxy } from '@renderer/utils/ipc'
88
import { Key, useState } from 'react'
99
import React from 'react'
10+
import { MdDeleteForever } from 'react-icons/md'
1011

1112
const defaultPacScript = `
1213
function FindProxyForURL(url, host) {
@@ -16,10 +17,35 @@ function FindProxyForURL(url, host) {
1617

1718
const Sysproxy: React.FC = () => {
1819
const { appConfig, patchAppConfig } = useAppConfig()
19-
const { sysProxy } = appConfig || { sysProxy: { enable: false } }
20+
const { sysProxy } = appConfig || ({ sysProxy: { enable: false } } as IAppConfig)
21+
22+
const [values, setValues] = useState({
23+
enable: sysProxy.enable,
24+
host: sysProxy.host ?? '',
25+
useDefaultBypass: sysProxy.useDefaultBypass ?? true,
26+
bypass: sysProxy.bypass ?? [],
27+
mode: sysProxy.mode ?? 'manual',
28+
pacScript: sysProxy.pacScript ?? defaultPacScript
29+
})
2030

21-
const [values, setValues] = useState<ISysProxyConfig>(sysProxy)
2231
const [openPacEditor, setOpenPacEditor] = useState(false)
32+
33+
const handleBypassChange = (value: string, index: number): void => {
34+
const newBypass = [...values.bypass]
35+
if (index === newBypass.length) {
36+
if (value.trim() !== '') {
37+
newBypass.push(value)
38+
}
39+
} else {
40+
if (value.trim() === '') {
41+
newBypass.splice(index, 1)
42+
} else {
43+
newBypass[index] = value
44+
}
45+
}
46+
setValues({ ...values, bypass: newBypass })
47+
}
48+
2349
const onSave = async (): Promise<void> => {
2450
// check valid TODO
2551
await patchAppConfig({ sysProxy: values })
@@ -74,11 +100,52 @@ const Sysproxy: React.FC = () => {
74100
<Tab className="select-none" key="auto" title="PAC" />
75101
</Tabs>
76102
</SettingItem>
77-
<SettingItem title="代理模式">
78-
<Button size="sm" onPress={() => setOpenPacEditor(true)} variant="bordered">
79-
编辑PAC脚本
80-
</Button>
81-
</SettingItem>
103+
104+
{values.mode === 'auto' && (
105+
<SettingItem title="代理模式">
106+
<Button size="sm" onPress={() => setOpenPacEditor(true)} variant="bordered">
107+
编辑PAC脚本
108+
</Button>
109+
</SettingItem>
110+
)}
111+
{values.mode === 'manual' && (
112+
<>
113+
<SettingItem title="使用默认代理绕过" divider>
114+
<Switch
115+
size="sm"
116+
isSelected={values.useDefaultBypass}
117+
onValueChange={(v) => {
118+
setValues({ ...values, useDefaultBypass: v })
119+
}}
120+
/>
121+
</SettingItem>
122+
<div className="flex flex-col items-stretch">
123+
<h3 className="select-none mb-2">代理绕过</h3>
124+
{[...values.bypass, ''].map((domain, index) => (
125+
<div key={index} className="mb-2 flex">
126+
<Input
127+
fullWidth
128+
size="sm"
129+
placeholder="例: *.baidu.com"
130+
value={domain}
131+
onValueChange={(v) => handleBypassChange(v, index)}
132+
/>
133+
{index < values.bypass.length && (
134+
<Button
135+
className="ml-2"
136+
size="sm"
137+
variant="flat"
138+
color="warning"
139+
onClick={() => handleBypassChange('', index)}
140+
>
141+
<MdDeleteForever className="text-lg" />
142+
</Button>
143+
)}
144+
</div>
145+
))}
146+
</div>
147+
</>
148+
)}
82149
</SettingCard>
83150
</BasePage>
84151
)

src/shared/types.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ interface ISysProxyConfig {
147147
enable: boolean
148148
host?: string
149149
mode?: SysProxyMode
150+
useDefaultBypass?: boolean
150151
bypass?: string[]
151152
pacScript?: string
152153
}

0 commit comments

Comments
 (0)