diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx
index e63c876..07dbe5a 100644
--- a/src/app/admin/page.tsx
+++ b/src/app/admin/page.tsx
@@ -380,7 +380,7 @@ interface LiveDataSource {
channelNumber?: number;
disabled?: boolean;
from: 'config' | 'custom';
- proxyMode?: boolean; // 代理模式开关
+ proxyMode?: 'full' | 'm3u8-only' | 'direct'; // 代理模式
}
// 自定义分类数据类型
@@ -10937,12 +10937,15 @@ const LiveSourceConfig = ({
});
};
- const handleToggleProxyMode = (key: string) => {
- withLoading(`toggleLiveProxyMode_${key}`, async () => {
+ const handleSetProxyMode = (key: string, mode: 'full' | 'm3u8-only' | 'direct') => {
+ withLoading(`setLiveProxyMode_${key}`, async () => {
+ // 保存旧值用于回滚
+ const oldMode = liveSources.find((s) => s.key === key)?.proxyMode;
+
// 乐观更新本地状态
setLiveSources((prev) =>
prev.map((s) =>
- s.key === key ? { ...s, proxyMode: !s.proxyMode } : s
+ s.key === key ? { ...s, proxyMode: mode } : s
)
);
@@ -10951,13 +10954,14 @@ const LiveSourceConfig = ({
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
- action: 'toggle_proxy_mode',
+ action: 'set_proxy_mode',
key,
+ proxyMode: mode,
}),
});
if (!response.ok) {
- throw new Error('切换代理模式失败');
+ throw new Error('设置代理模式失败');
}
// 成功后刷新配置
@@ -10966,17 +10970,17 @@ const LiveSourceConfig = ({
// 失败时回滚本地状态
setLiveSources((prev) =>
prev.map((s) =>
- s.key === key ? { ...s, proxyMode: !s.proxyMode } : s
+ s.key === key ? { ...s, proxyMode: oldMode } : s
)
);
showError(
- error instanceof Error ? error.message : '切换代理模式失败',
+ error instanceof Error ? error.message : '设置代理模式失败',
showAlert
);
throw error;
}
}).catch(() => {
- console.error('操作失败', 'toggle_proxy_mode', key);
+ console.error('操作失败', 'set_proxy_mode', key);
});
};
@@ -11157,28 +11161,22 @@ const LiveSourceConfig = ({
-
+
+
+
+
|
|