mirror of
https://github.com/MatrixSeven/file-transfer-go.git
synced 2026-02-04 03:25:03 +08:00
feat: 更新ICE服务器配置,添加默认服务器标记,优化删除提示信息
This commit is contained in:
@@ -25,6 +25,9 @@ export default function RootLayout({
|
||||
}>) {
|
||||
return (
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<script defer src="https://track.biu.52python.cn/script.js" data-website-id="28f20618-8d31-421d-8ee2-16fcde0e299a"></script>
|
||||
</head>
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
>
|
||||
|
||||
@@ -251,8 +251,6 @@ interface ServerItemProps {
|
||||
}
|
||||
|
||||
function ServerItem({ server, onRemove, canRemove }: ServerItemProps) {
|
||||
const isDefault = server.id.startsWith('google-') || server.id.startsWith('twilio-');
|
||||
|
||||
return (
|
||||
<div className="border rounded-lg p-3 sm:p-4 bg-white">
|
||||
<div className="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3">
|
||||
@@ -261,8 +259,8 @@ function ServerItem({ server, onRemove, canRemove }: ServerItemProps) {
|
||||
<span className="text-xs bg-blue-100 text-blue-600 px-2 py-1 rounded whitespace-nowrap">
|
||||
{server.type?.toUpperCase() || 'STUN'}
|
||||
</span>
|
||||
{isDefault && (
|
||||
<span className="text-xs bg-blue-100 text-blue-600 px-2 py-1 rounded whitespace-nowrap">
|
||||
{server.isDefault && (
|
||||
<span className="text-xs bg-green-100 text-green-600 px-2 py-1 rounded whitespace-nowrap">
|
||||
默认
|
||||
</span>
|
||||
)}
|
||||
@@ -341,7 +339,8 @@ export default function WebRTCSettings() {
|
||||
removeIceServer(serverToDelete);
|
||||
showToast('ICE服务器删除成功', 'success');
|
||||
} catch (error) {
|
||||
showToast('至少需要保留一个ICE服务器', 'error');
|
||||
const errorMessage = error instanceof Error ? error.message : '删除失败';
|
||||
showToast(errorMessage, 'error');
|
||||
} finally {
|
||||
setServerToDelete(null);
|
||||
setShowDeleteDialog(false);
|
||||
@@ -518,6 +517,13 @@ export default function WebRTCSettings() {
|
||||
格式:<code className="bg-gray-100 px-1 py-0.5 rounded text-xs">turn:服务器地址:端口</code>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 className="font-medium text-gray-900 mb-1">默认服务器:</h4>
|
||||
<p className="text-gray-600">
|
||||
系统预置的可靠ICE服务器,建议保留以确保连接稳定性。可以根据需要删除或添加自定义服务器。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -537,7 +543,19 @@ export default function WebRTCSettings() {
|
||||
onClose={cancelDeleteServer}
|
||||
onConfirm={confirmDeleteServer}
|
||||
title="删除ICE服务器"
|
||||
message={`确定要删除这个ICE服务器吗?删除后将无法恢复。${iceServers.length <= 1 ? '\n\n注意:这是最后一个服务器,删除后将无法建立WebRTC连接。' : ''}`}
|
||||
message={(() => {
|
||||
if (!serverToDelete) return "确定要删除这个ICE服务器吗?";
|
||||
|
||||
const serverToDeleteInfo = iceServers.find(s => s.id === serverToDelete);
|
||||
|
||||
if (iceServers.length <= 1) {
|
||||
return "这是最后一个ICE服务器,删除后将无法建立WebRTC连接。确定要删除吗?";
|
||||
} else if (serverToDeleteInfo?.isDefault) {
|
||||
return "这是一个默认ICE服务器,删除后可能需要手动添加其他服务器。确定要删除吗?";
|
||||
} else {
|
||||
return "确定要删除这个ICE服务器吗?删除后将无法恢复。";
|
||||
}
|
||||
})()}
|
||||
confirmText="删除"
|
||||
cancelText="取消"
|
||||
type="danger"
|
||||
|
||||
@@ -7,36 +7,48 @@ export interface IceServerConfig {
|
||||
credential?: string;
|
||||
type: 'stun' | 'turn';
|
||||
enabled: boolean;
|
||||
isDefault?: boolean; // 标记是否为默认服务器
|
||||
}
|
||||
|
||||
const DEFAULT_ICE_SERVERS: IceServerConfig[] = [
|
||||
{
|
||||
id: 'easyvoip-stun',
|
||||
urls: 'stun:stun.easyvoip.com:3478',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
id: 'miwifi-stun',
|
||||
urls: 'stun:stun.miwifi.com:3478',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
id: 'google-stun-1',
|
||||
urls: 'stun:stun.l.google.com:19302',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
id: 'google-stun-2',
|
||||
urls: 'stun:stun1.l.google.com:19302',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
id: 'google-stun-3',
|
||||
urls: 'stun:stun2.l.google.com:19302',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
id: 'twilio-stun',
|
||||
urls: 'stun:global.stun.twilio.com:3478',
|
||||
type: 'stun',
|
||||
enabled: true,
|
||||
},
|
||||
isDefault: true,
|
||||
}
|
||||
];
|
||||
|
||||
const STORAGE_KEY = 'webrtc-ice-servers-config';
|
||||
const STORAGE_KEY = 'webrtc-ice-servers-config-090901';
|
||||
|
||||
export function useIceServersConfig() {
|
||||
const [iceServers, setIceServers] = useState<IceServerConfig[]>([]);
|
||||
@@ -48,7 +60,13 @@ export function useIceServersConfig() {
|
||||
const savedConfig = localStorage.getItem(STORAGE_KEY);
|
||||
if (savedConfig) {
|
||||
const parsed = JSON.parse(savedConfig);
|
||||
setIceServers(parsed);
|
||||
// 确保所有服务器都有isDefault属性
|
||||
const serversWithDefaults = parsed.map((server: any) => ({
|
||||
...server,
|
||||
isDefault: server.isDefault !== undefined ? server.isDefault :
|
||||
DEFAULT_ICE_SERVERS.some(defaultServer => defaultServer.id === server.id)
|
||||
}));
|
||||
setIceServers(serversWithDefaults);
|
||||
} else {
|
||||
setIceServers(DEFAULT_ICE_SERVERS);
|
||||
}
|
||||
@@ -76,6 +94,7 @@ export function useIceServersConfig() {
|
||||
const newServer: IceServerConfig = {
|
||||
...config,
|
||||
id: `custom-${Date.now()}`,
|
||||
isDefault: false, // 用户添加的服务器不标记为默认
|
||||
};
|
||||
const updatedServers = [...iceServers, newServer];
|
||||
saveConfig(updatedServers);
|
||||
@@ -95,6 +114,7 @@ export function useIceServersConfig() {
|
||||
if (iceServers.length <= 1) {
|
||||
throw new Error('至少需要保留一个ICE服务器');
|
||||
}
|
||||
|
||||
const updatedServers = iceServers.filter(server => server.id !== id);
|
||||
saveConfig(updatedServers);
|
||||
}, [iceServers, saveConfig]);
|
||||
|
||||
Reference in New Issue
Block a user