fix(network): allow manual proxy overrides when system proxy is detected
This commit is contained in:
1 parent
7cde8942d3
commit
de01219cc8
10 files changed
+145
-31
No files matched your search
+3
-1
@@ -688,7 +688,9 @@ export const jaOverrides = {
|
||||
'config.network.listenHostHint': '例: 127.0.0.1、0.0.0.0、または LAN IP。変更すると実行中のコアが再起動します',
|
||||
'config.network.proxyUrl': 'プロキシ URL',
|
||||
'config.network.proxyPlaceholder': '例:socks5://127.0.0.1:7890',
|
||||
'config.network.proxyHint': '手動入力できます。空欄の場合はシステムプロキシを使います。未検出なら空欄のままです。HTTP と SOCKS に対応しています。',
|
||||
'config.network.proxyHint': '「システムに従う」をオフにすると編集できます。手動設定が空欄の場合は直接接続します。HTTP と SOCKS に対応しています。',
|
||||
'config.network.systemProxy': 'システムに従う',
|
||||
'config.network.systemProxyHint': 'オンの場合は検出したシステムプロキシを、オフの場合は下の手動設定を使用します',
|
||||
'config.network.sessionAffinity': 'セッションアフィニティ',
|
||||
'config.network.sessionAffinityHint': '同じセッションでは以前選択した認証情報を優先します',
|
||||
'config.network.sessionTtl': 'セッションアフィニティ TTL',
|
||||
|
||||
@@ -719,7 +719,9 @@ export const en: Record<MessageKey, string> = {
|
||||
'config.network.listenHostHint': 'For example, 127.0.0.1, 0.0.0.0, or a LAN IP; changing it restarts a running core',
|
||||
'config.network.proxyUrl': 'Proxy URL',
|
||||
'config.network.proxyPlaceholder': 'For example, socks5://127.0.0.1:7890',
|
||||
'config.network.proxyHint': 'You can enter a proxy URL. Leave it empty to use the system proxy, or none if none is detected. Supports HTTP and SOCKS.',
|
||||
'config.network.proxyHint': 'Turn off “Follow system” to customize it. An empty manual value means a direct connection. Supports HTTP and SOCKS.',
|
||||
'config.network.systemProxy': 'Follow system',
|
||||
'config.network.systemProxyHint': 'Use the detected system proxy when enabled; use the manual value below when disabled',
|
||||
'config.network.sessionAffinity': 'Session Affinity',
|
||||
'config.network.sessionAffinityHint': 'Prefer the previously selected credential for the same session',
|
||||
'config.network.sessionTtl': 'Session Affinity TTL',
|
||||
|
||||
@@ -718,7 +718,9 @@ export const zhCN = {
|
||||
'config.network.listenHostHint': '例如 127.0.0.1、0.0.0.0 或局域网 IP;修改后会重启运行中的内核',
|
||||
'config.network.proxyUrl': '代理 URL',
|
||||
'config.network.proxyPlaceholder': '例如 socks5://127.0.0.1:7890',
|
||||
'config.network.proxyHint': '可手动填写;留空则自动读取系统代理,没有就不填。支持 HTTP 与 SOCKS。',
|
||||
'config.network.proxyHint': '关闭“跟随系统”后可自定义;手动留空表示直连。支持 HTTP 与 SOCKS。',
|
||||
'config.network.systemProxy': '跟随系统',
|
||||
'config.network.systemProxyHint': '开启时自动使用系统代理;关闭后使用下方的手动配置',
|
||||
'config.network.sessionAffinity': '会话粘性路由',
|
||||
'config.network.sessionAffinityHint': '同一会话优先复用已选择的凭据',
|
||||
'config.network.sessionTtl': '会话粘性 TTL',
|
||||
|
||||
@@ -50,6 +50,7 @@ type CoreConfigSettings = {
|
||||
allowLan: boolean;
|
||||
routingStrategy: string;
|
||||
proxyUrl: string;
|
||||
proxyOverride: boolean;
|
||||
routingSessionAffinity: boolean;
|
||||
routingSessionAffinityTtl: string;
|
||||
disableCooling: boolean;
|
||||
@@ -83,6 +84,7 @@ type NetworkDraftField =
|
||||
| 'port'
|
||||
| 'host'
|
||||
| 'proxyUrl'
|
||||
| 'proxyOverride'
|
||||
| 'sessionAffinity'
|
||||
| 'sessionTtl'
|
||||
| 'disableCooling'
|
||||
@@ -118,6 +120,7 @@ const cleanNetworkDraft = (): NetworkDraftDirty => ({
|
||||
port: false,
|
||||
host: false,
|
||||
proxyUrl: false,
|
||||
proxyOverride: false,
|
||||
sessionAffinity: false,
|
||||
sessionTtl: false,
|
||||
disableCooling: false,
|
||||
@@ -190,6 +193,7 @@ export function ConfigPanelPage() {
|
||||
const [portDraft, setPortDraft] = useState('8317');
|
||||
const [hostDraft, setHostDraft] = useState('127.0.0.1');
|
||||
const [proxyUrlDraft, setProxyUrlDraft] = useState('');
|
||||
const [proxyOverrideDraft, setProxyOverrideDraft] = useState(false);
|
||||
const [sessionAffinityDraft, setSessionAffinityDraft] = useState(false);
|
||||
const [sessionTtlDraft, setSessionTtlDraft] = useState('');
|
||||
const [disableCoolingDraft, setDisableCoolingDraft] = useState(false);
|
||||
@@ -236,6 +240,7 @@ export function ConfigPanelPage() {
|
||||
if (!dirty.port) setPortDraft(String(result.port));
|
||||
if (!dirty.host) setHostDraft(result.host);
|
||||
if (!dirty.proxyUrl) setProxyUrlDraft(result.proxyUrl);
|
||||
if (!dirty.proxyOverride) setProxyOverrideDraft(result.proxyOverride);
|
||||
if (!dirty.sessionAffinity) setSessionAffinityDraft(result.routingSessionAffinity);
|
||||
if (!dirty.sessionTtl) setSessionTtlDraft(result.routingSessionAffinityTtl);
|
||||
if (!dirty.disableCooling) setDisableCoolingDraft(result.disableCooling);
|
||||
@@ -261,6 +266,7 @@ export function ConfigPanelPage() {
|
||||
setPortDraft(String(result.port));
|
||||
setHostDraft(result.host);
|
||||
setProxyUrlDraft(result.proxyUrl);
|
||||
setProxyOverrideDraft(result.proxyOverride);
|
||||
setSessionAffinityDraft(result.routingSessionAffinity);
|
||||
setSessionTtlDraft(result.routingSessionAffinityTtl);
|
||||
setDisableCoolingDraft(result.disableCooling);
|
||||
@@ -720,13 +726,14 @@ export function ConfigPanelPage() {
|
||||
setBusyAction('network');
|
||||
try {
|
||||
const result = await invoke<CoreConfigSettings>('save_network_endpoint_settings', {
|
||||
settings: networkDraftDirtyRef.current.proxyUrl
|
||||
? { host, port, proxyUrl }
|
||||
settings: networkDraftDirtyRef.current.proxyUrl || networkDraftDirtyRef.current.proxyOverride
|
||||
? { host, port, proxyUrl, proxyOverride: proxyOverrideDraft }
|
||||
: { host, port },
|
||||
});
|
||||
clearDraftDirty('host');
|
||||
clearDraftDirty('port');
|
||||
clearDraftDirty('proxyUrl');
|
||||
clearDraftDirty('proxyOverride');
|
||||
applySettings(result, 'preserve');
|
||||
setLoadError('');
|
||||
|
||||
@@ -872,6 +879,7 @@ export function ConfigPanelPage() {
|
||||
hostDraft.trim() !== settings?.host
|
||||
|| portDraft !== String(settings?.port)
|
||||
|| proxyUrlDraft.trim() !== settings?.proxyUrl
|
||||
|| proxyOverrideDraft !== settings?.proxyOverride
|
||||
);
|
||||
const sessionRoutingDirty = Boolean(settings) && (
|
||||
sessionAffinityDraft !== settings?.routingSessionAffinity
|
||||
@@ -1502,16 +1510,34 @@ export function ConfigPanelPage() {
|
||||
<small>{t('config.network.listenHostHint')}</small>
|
||||
</label>
|
||||
|
||||
<label className="config-network-field">
|
||||
<span className="config-network-label">
|
||||
<Link2 size={15} aria-hidden="true" />
|
||||
{t('config.network.proxyUrl')}
|
||||
</span>
|
||||
<div className="config-network-field config-proxy-field">
|
||||
<div className="config-proxy-heading">
|
||||
<label className="config-network-label" htmlFor="config-network-proxy-url">
|
||||
<Link2 size={15} aria-hidden="true" />
|
||||
{t('config.network.proxyUrl')}
|
||||
</label>
|
||||
<label className="config-proxy-system-toggle" title={t('config.network.systemProxyHint')}>
|
||||
<span>{t('config.network.systemProxy')}</span>
|
||||
<span className="switch-control">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={!proxyOverrideDraft}
|
||||
disabled={controlsDisabled}
|
||||
onChange={(event) => {
|
||||
markDraftDirty('proxyOverride');
|
||||
setProxyOverrideDraft(!event.currentTarget.checked);
|
||||
}}
|
||||
/>
|
||||
<span className="switch-track" />
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<input
|
||||
id="config-network-proxy-url"
|
||||
className="config-network-input"
|
||||
type="text"
|
||||
value={proxyUrlDraft}
|
||||
disabled={controlsDisabled}
|
||||
disabled={controlsDisabled || !proxyOverrideDraft}
|
||||
placeholder={t('config.network.proxyPlaceholder')}
|
||||
onChange={(event) => {
|
||||
markDraftDirty('proxyUrl');
|
||||
@@ -1526,7 +1552,7 @@ export function ConfigPanelPage() {
|
||||
}}
|
||||
/>
|
||||
<small>{t('config.network.proxyHint')}</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in new issue
Block a user