增加动漫数据源配置

This commit is contained in:
mtvpls
2026-05-28 16:00:07 +08:00
parent dc31a788fc
commit cc98b21d66
16 changed files with 4448 additions and 2153 deletions
+53 -18
View File
@@ -59,7 +59,8 @@ export default async function RootLayout({
process.env.ANNOUNCEMENT ||
'本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。';
let doubanProxyType = process.env.NEXT_PUBLIC_DOUBAN_PROXY_TYPE || 'cmliussss-cdn-tencent';
let doubanProxyType =
process.env.NEXT_PUBLIC_DOUBAN_PROXY_TYPE || 'cmliussss-cdn-tencent';
let doubanProxy = process.env.NEXT_PUBLIC_DOUBAN_PROXY || '';
let doubanImageProxyType =
process.env.NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE || 'cmliussss-cdn-tencent';
@@ -71,6 +72,16 @@ export default async function RootLayout({
let danmakuAutoLoadDefault = true;
let recommendationDataSource = 'Mixed';
let tmdbApiKey = '';
let bangumiDataSource =
(process.env.NEXT_PUBLIC_BANGUMI_DATA_SOURCE as any) || 'direct';
let bangumiApiBaseUrl =
process.env.NEXT_PUBLIC_BANGUMI_API_BASE_URL ||
process.env.BANGUMI_API_BASE_URL ||
'https://api.bgm.tv';
let bangumiImageBaseUrl =
process.env.NEXT_PUBLIC_BANGUMI_IMAGE_BASE_URL ||
process.env.BANGUMI_IMAGE_BASE_URL ||
'';
let openListEnabled = false;
let embyEnabled = false;
let xiaoyaEnabled = false;
@@ -101,7 +112,13 @@ export default async function RootLayout({
let customAdFilterVersion = 0;
let musicFeatureEnabled = false;
let suwayomiEnabled = false;
let booksEnabled = process.env.OPDS_ENABLED === 'true' && !!(process.env.OPDS_URL || process.env.NEXT_PUBLIC_OPDS_URL || process.env.OPDS_SOURCES_JSON);
let booksEnabled =
process.env.OPDS_ENABLED === 'true' &&
!!(
process.env.OPDS_URL ||
process.env.NEXT_PUBLIC_OPDS_URL ||
process.env.OPDS_SOURCES_JSON
);
let musicProxyEnabled = true;
let advancedRecommendationEnabled = false;
let userFeatureAccess =
@@ -137,8 +154,13 @@ export default async function RootLayout({
fluidSearch = config.SiteConfig.FluidSearch;
enableComments = config.SiteConfig.EnableComments;
danmakuAutoLoadDefault = config.SiteConfig.DanmakuAutoLoadDefault !== false;
recommendationDataSource = config.SiteConfig.RecommendationDataSource || 'Mixed';
recommendationDataSource =
config.SiteConfig.RecommendationDataSource || 'Mixed';
tmdbApiKey = config.SiteConfig.TMDBApiKey || '';
bangumiDataSource = config.SiteConfig.BangumiDataSource || 'direct';
bangumiApiBaseUrl =
config.SiteConfig.BangumiApiBaseUrl || 'https://api.bgm.tv';
bangumiImageBaseUrl = config.SiteConfig.BangumiImageBaseUrl || '';
loginBackgroundImage = config.ThemeConfig?.loginBackgroundImage || '';
registerBackgroundImage = config.ThemeConfig?.registerBackgroundImage || '';
homeBackgroundImage = config.ThemeConfig?.homeBackgroundImage || '';
@@ -146,9 +168,11 @@ export default async function RootLayout({
progressThumbPresetId = config.ThemeConfig?.progressThumbPresetId || '';
progressThumbCustomUrl = config.ThemeConfig?.progressThumbCustomUrl || '';
enableRegistration = config.SiteConfig.EnableRegistration || false;
requireRegistrationInviteCode = config.SiteConfig.RequireRegistrationInviteCode || false;
requireRegistrationInviteCode =
config.SiteConfig.RequireRegistrationInviteCode || false;
loginRequireTurnstile = config.SiteConfig.LoginRequireTurnstile || false;
registrationRequireTurnstile = config.SiteConfig.RegistrationRequireTurnstile || false;
registrationRequireTurnstile =
config.SiteConfig.RegistrationRequireTurnstile || false;
turnstileSiteKey = config.SiteConfig.TurnstileSiteKey || '';
enableOIDCLogin = config.SiteConfig.EnableOIDCLogin || false;
enableOIDCRegistration = config.SiteConfig.EnableOIDCRegistration || false;
@@ -173,8 +197,7 @@ export default async function RootLayout({
musicProxyEnabled = config.MusicConfig?.ProxyEnabled ?? true;
// 漫画功能配置
suwayomiEnabled = !!(
config.SuwayomiConfig?.Enabled &&
config.SuwayomiConfig?.ServerURL
config.SuwayomiConfig?.Enabled && config.SuwayomiConfig?.ServerURL
);
// 电子书功能配置
const opdsConfig = config.OPDSConfig;
@@ -198,19 +221,23 @@ export default async function RootLayout({
embyEnabled = !!(
config.EmbyConfig?.Sources &&
config.EmbyConfig.Sources.length > 0 &&
config.EmbyConfig.Sources.some(s => s.enabled && s.ServerURL)
config.EmbyConfig.Sources.some((s) => s.enabled && s.ServerURL)
);
// 检查是否启用了小雅功能
xiaoyaEnabled = !!(
config.XiaoyaConfig?.Enabled &&
config.XiaoyaConfig?.ServerURL
config.XiaoyaConfig?.Enabled && config.XiaoyaConfig?.ServerURL
);
}
// 将运行时配置注入到全局 window 对象,供客户端在运行时读取
const runtimeStorageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage';
const isCloudflare = process.env.CF_PAGES === '1' || process.env.BUILD_TARGET === 'cloudflare';
const displayStorageType = runtimeStorageType === 'd1' && !isCloudflare ? 'sqlite' : runtimeStorageType;
const runtimeStorageType =
process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage';
const isCloudflare =
process.env.CF_PAGES === '1' || process.env.BUILD_TARGET === 'cloudflare';
const displayStorageType =
runtimeStorageType === 'd1' && !isCloudflare
? 'sqlite'
: runtimeStorageType;
const runtimeConfig = {
STORAGE_TYPE: runtimeStorageType,
@@ -225,9 +252,14 @@ export default async function RootLayout({
EnableComments: enableComments,
DANMAKU_AUTO_LOAD_DEFAULT: danmakuAutoLoadDefault,
RecommendationDataSource: recommendationDataSource,
BANGUMI_DATA_SOURCE: bangumiDataSource,
BANGUMI_API_BASE_URL: bangumiApiBaseUrl,
BANGUMI_IMAGE_BASE_URL: bangumiImageBaseUrl,
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',
ENABLE_OFFLINE_DOWNLOAD:
process.env.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD === 'true',
VOICE_CHAT_STRATEGY:
process.env.NEXT_PUBLIC_VOICE_CHAT_STRATEGY || 'webrtc-fallback',
OPENLIST_ENABLED: openListEnabled && userFeatureAccess.private_library,
EMBY_ENABLED: embyEnabled && userFeatureAccess.emby,
XIAOYA_ENABLED: xiaoyaEnabled && userFeatureAccess.xiaoya,
@@ -273,8 +305,7 @@ export default async function RootLayout({
userFeatureAccess.magnet_save_private_library,
NETDISK_TRANSFER_ENABLED: userFeatureAccess.netdisk_transfer,
NETDISK_TEMP_PLAY_ENABLED: userFeatureAccess.netdisk_temp_play,
FESTIVE_EFFECT_ENABLED:
process.env.FESTIVE_EFFECT_ENABLED === 'true',
FESTIVE_EFFECT_ENABLED: process.env.FESTIVE_EFFECT_ENABLED === 'true',
};
return (
@@ -307,7 +338,11 @@ export default async function RootLayout({
<TopProgressBar />
<RouteScrollReset />
<TokenRefreshManager />
<SiteProvider siteName={siteName} announcement={announcement} tmdbApiKey={tmdbApiKey}>
<SiteProvider
siteName={siteName}
announcement={announcement}
tmdbApiKey={tmdbApiKey}
>
<WatchRoomProvider>
<DownloadProvider>
<StartupCacheCleanup />