feat: 更新ICE服务器配置,添加默认服务器标记,优化删除提示信息

This commit is contained in:
MatrixSeven
2025-09-10 15:05:28 +08:00
parent 07409abb3b
commit 343e7f1192
3 changed files with 56 additions and 15 deletions

View File

@@ -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`}
>

View File

@@ -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"

View File

@@ -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]);