fix file cache
This commit is contained in:
+43
-15
@@ -568,14 +568,7 @@ export async function POST(request: NextRequest) {
|
|||||||
const idsKey = Array.isArray(ids) ? ids.join(',') : ids;
|
const idsKey = Array.isArray(ids) ? ids.join(',') : ids;
|
||||||
const cacheKey = `parse-${platform}-${idsKey}-${qualityKey}`;
|
const cacheKey = `parse-${platform}-${idsKey}-${qualityKey}`;
|
||||||
|
|
||||||
// 1. 先检查内存缓存
|
// 1. 获取 OpenList 配置
|
||||||
const cached = serverCache.proxyRequests.get(cacheKey);
|
|
||||||
if (cached && Date.now() - cached.timestamp < serverCache.CACHE_DURATION) {
|
|
||||||
console.log('[Music Cache] 从内存缓存返回');
|
|
||||||
return NextResponse.json(cached.data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 检查 OpenList 缓存
|
|
||||||
const openListClient = await getOpenListClient();
|
const openListClient = await getOpenListClient();
|
||||||
const config = await getConfig();
|
const config = await getConfig();
|
||||||
const cachePath = config?.MusicConfig?.OpenListCachePath || '/music-cache';
|
const cachePath = config?.MusicConfig?.OpenListCachePath || '/music-cache';
|
||||||
@@ -583,6 +576,32 @@ export async function POST(request: NextRequest) {
|
|||||||
console.log('[Music Cache] OpenList 客户端状态:', openListClient ? '已创建' : '未创建');
|
console.log('[Music Cache] OpenList 客户端状态:', openListClient ? '已创建' : '未创建');
|
||||||
console.log('[Music Cache] 缓存路径:', cachePath);
|
console.log('[Music Cache] 缓存路径:', cachePath);
|
||||||
|
|
||||||
|
// 2. 检查内存缓存
|
||||||
|
const cached = serverCache.proxyRequests.get(cacheKey);
|
||||||
|
if (cached && Date.now() - cached.timestamp < serverCache.CACHE_DURATION) {
|
||||||
|
// 如果启用了 OpenList,需要检查并替换音频 URL
|
||||||
|
if (openListClient) {
|
||||||
|
console.log('[Music Cache] 内存缓存存在,检查并替换 OpenList 音频 URL');
|
||||||
|
const updatedData = await replaceAudioUrlsWithOpenList(
|
||||||
|
cached.data,
|
||||||
|
openListClient,
|
||||||
|
platform,
|
||||||
|
qualityKey,
|
||||||
|
cachePath
|
||||||
|
);
|
||||||
|
|
||||||
|
// 更新内存缓存
|
||||||
|
serverCache.proxyRequests.set(cacheKey, { data: updatedData, timestamp: Date.now() });
|
||||||
|
|
||||||
|
return NextResponse.json(updatedData);
|
||||||
|
} else {
|
||||||
|
// 没有 OpenList 配置,直接返回内存缓存
|
||||||
|
console.log('[Music Cache] 从内存缓存返回');
|
||||||
|
return NextResponse.json(cached.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 检查 OpenList JSON 缓存
|
||||||
if (openListClient) {
|
if (openListClient) {
|
||||||
try {
|
try {
|
||||||
const openListPath = `${cachePath}/${platform}/${idsKey}-${qualityKey}.json`;
|
const openListPath = `${cachePath}/${platform}/${idsKey}-${qualityKey}.json`;
|
||||||
@@ -594,12 +613,21 @@ export async function POST(request: NextRequest) {
|
|||||||
const cacheResponse = await fetch(fileResponse.data.raw_url);
|
const cacheResponse = await fetch(fileResponse.data.raw_url);
|
||||||
if (cacheResponse.ok) {
|
if (cacheResponse.ok) {
|
||||||
const cachedData = await cacheResponse.json();
|
const cachedData = await cacheResponse.json();
|
||||||
console.log('[Music Cache] 从 OpenList 缓存返回');
|
console.log('[Music Cache] 从 OpenList JSON 缓存读取成功,检查并替换音频 URL');
|
||||||
|
|
||||||
|
// 检查并替换音频 URL
|
||||||
|
const updatedData = await replaceAudioUrlsWithOpenList(
|
||||||
|
cachedData,
|
||||||
|
openListClient,
|
||||||
|
platform,
|
||||||
|
qualityKey,
|
||||||
|
cachePath
|
||||||
|
);
|
||||||
|
|
||||||
// 更新内存缓存
|
// 更新内存缓存
|
||||||
serverCache.proxyRequests.set(cacheKey, { data: cachedData, timestamp: Date.now() });
|
serverCache.proxyRequests.set(cacheKey, { data: updatedData, timestamp: Date.now() });
|
||||||
|
|
||||||
return NextResponse.json(cachedData);
|
return NextResponse.json(updatedData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -607,7 +635,7 @@ export async function POST(request: NextRequest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 调用 TuneHub API 解析
|
// 4. 调用 TuneHub API 解析
|
||||||
try {
|
try {
|
||||||
console.log('[Music Cache] 调用 TuneHub API 解析');
|
console.log('[Music Cache] 调用 TuneHub API 解析');
|
||||||
const response = await proxyRequest(`${baseUrl}/v1/parse`, {
|
const response = await proxyRequest(`${baseUrl}/v1/parse`, {
|
||||||
@@ -635,10 +663,10 @@ export async function POST(request: NextRequest) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 缓存成功的解析结果到内存
|
// 5. 缓存成功的解析结果到内存
|
||||||
serverCache.proxyRequests.set(cacheKey, { data, timestamp: Date.now() });
|
serverCache.proxyRequests.set(cacheKey, { data, timestamp: Date.now() });
|
||||||
|
|
||||||
// 5. 检查并替换音频 URL 为 OpenList URL(如果已缓存)
|
// 6. 检查并替换音频 URL 为 OpenList URL(如果已缓存)
|
||||||
// 同时异步下载未缓存的音频
|
// 同时异步下载未缓存的音频
|
||||||
const finalData = await replaceAudioUrlsWithOpenList(
|
const finalData = await replaceAudioUrlsWithOpenList(
|
||||||
data,
|
data,
|
||||||
@@ -648,7 +676,7 @@ export async function POST(request: NextRequest) {
|
|||||||
cachePath
|
cachePath
|
||||||
);
|
);
|
||||||
|
|
||||||
// 6. 缓存解析结果到 OpenList(异步,不阻塞响应)
|
// 7. 缓存解析结果到 OpenList(异步,不阻塞响应)
|
||||||
if (openListClient) {
|
if (openListClient) {
|
||||||
const jsonPath = `${cachePath}/${platform}/${idsKey}-${qualityKey}.json`;
|
const jsonPath = `${cachePath}/${platform}/${idsKey}-${qualityKey}.json`;
|
||||||
openListClient.uploadFile(jsonPath, JSON.stringify(finalData, null, 2))
|
openListClient.uploadFile(jsonPath, JSON.stringify(finalData, null, 2))
|
||||||
|
|||||||
Reference in New Issue
Block a user