diff --git a/src/app/api/server-config/route.ts b/src/app/api/server-config/route.ts index acb0590..0be1393 100644 --- a/src/app/api/server-config/route.ts +++ b/src/app/api/server-config/route.ts @@ -27,6 +27,7 @@ export async function GET(request: NextRequest) { StorageType: 'localstorage', Version: CURRENT_VERSION, WatchRoom: watchRoomConfig, + EnableOfflineDownload: process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true', }); } @@ -37,6 +38,7 @@ export async function GET(request: NextRequest) { StorageType: storageType, Version: CURRENT_VERSION, WatchRoom: watchRoomConfig, + EnableOfflineDownload: process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true', EnableRegistration: config.SiteConfig.EnableRegistration || false, RegistrationRequireTurnstile: config.SiteConfig.RegistrationRequireTurnstile || false, LoginRequireTurnstile: config.SiteConfig.LoginRequireTurnstile || false, diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 262410b..3098d77 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -101,6 +101,8 @@ export default async function RootLayout({ FLUID_SEARCH: fluidSearch, EnableComments: enableComments, ENABLE_TVBOX_SUBSCRIBE: process.env.ENABLE_TVBOX_SUBSCRIBE === 'true', + ENABLE_OFFLINE_DOWNLOAD: process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true', + VOICE_CHAT_STRATEGY: process.env.NEXT_PUBLIC_VOICE_CHAT_STRATEGY || 'webrtc-fallback', }; return ( diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx index 2b378b5..a360ef3 100644 --- a/src/app/play/page.tsx +++ b/src/app/play/page.tsx @@ -78,7 +78,7 @@ function PlayPageClient() { // 离线下载功能配置 const enableOfflineDownload = typeof window !== 'undefined' - ? process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true' + ? (window as any).RUNTIME_CONFIG?.ENABLE_OFFLINE_DOWNLOAD || false : false; const hasOfflinePermission = authInfo?.role === 'owner' || authInfo?.role === 'admin'; @@ -3471,8 +3471,8 @@ function PlayPageClient() { // 如果在 PWA 模式下,直接使用容器全屏(可以隐藏状态栏) if (isPWA) { const container = artPlayerRef.current.template.$container; - if (container && container.requestFullscreen) { - container.requestFullscreen().catch((err: Error) => { + if (container && container.webkitEnterFullscreen) { + container.webkitEnterFullscreen().catch((err: Error) => { console.error('PWA 全屏失败:', err); // 如果失败,降级使用网页全屏 artPlayerRef.current.fullscreenWeb = true; diff --git a/src/components/UserMenu.tsx b/src/components/UserMenu.tsx index 27d7cf6..babbe84 100644 --- a/src/components/UserMenu.tsx +++ b/src/components/UserMenu.tsx @@ -537,7 +537,7 @@ export const UserMenu: React.FC = () => { const showOfflineDownload = (authInfo?.role === 'owner' || authInfo?.role === 'admin') && typeof window !== 'undefined' && - process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true'; + (window as any).RUNTIME_CONFIG?.ENABLE_OFFLINE_DOWNLOAD === true; // 检查是否显示修改密码按钮 const showChangePassword = diff --git a/src/hooks/useVoiceChat.ts b/src/hooks/useVoiceChat.ts index 78bfab9..b1c5f41 100644 --- a/src/hooks/useVoiceChat.ts +++ b/src/hooks/useVoiceChat.ts @@ -19,7 +19,7 @@ type VoiceStrategy = 'webrtc-fallback' | 'server-only'; // 获取语音聊天策略配置 function getVoiceStrategy(): VoiceStrategy { if (typeof window === 'undefined') return 'webrtc-fallback'; - const strategy = process.env.NEXT_PUBLIC_VOICE_CHAT_STRATEGY || 'webrtc-fallback'; + const strategy = (window as any).RUNTIME_CONFIG?.VOICE_CHAT_STRATEGY || 'webrtc-fallback'; return strategy as VoiceStrategy; }