优化小雅进入播放记录集数

This commit is contained in:
mtvpls
2026-01-12 00:21:06 +08:00
parent 94a2caa984
commit f5a61cf9d5
3 changed files with 50 additions and 8 deletions

View File

@@ -175,6 +175,11 @@ export async function GET(request: NextRequest) {
// 获取集数列表
const episodes = await getXiaoyaEpisodes(client, decodedPath);
// 找到用户点击的文件在集数列表中的索引
const clickedFileIndex = episodes.findIndex(ep => ep.path === decodedPath);
console.log('[xiaoya] 用户点击的文件:', decodedPath);
console.log('[xiaoya] 文件在集数列表中的索引:', clickedFileIndex);
const result = {
source: 'xiaoya',
source_name: '小雅',
@@ -188,6 +193,8 @@ export async function GET(request: NextRequest) {
episodes_titles: episodes.map(ep => ep.title),
subtitles: [],
proxyMode: false,
// 返回用户点击的文件索引(如果找到的话)
initialEpisodeIndex: clickedFileIndex >= 0 ? clickedFileIndex : undefined,
};
return NextResponse.json(result);

View File

@@ -2677,18 +2677,52 @@ function PlayPageClient() {
const key = generateStorageKey(detailData.source, detailData.id);
const record = allRecords[key];
// 确定初始集数索引
let initialIndex = 0;
let shouldResumeTime = false;
if (record) {
const targetIndex = record.index - 1;
const targetTime = record.play_time;
// 有播放记录
const recordIndex = record.index - 1;
const recordTime = record.play_time;
// 更新当前选集索引
if (targetIndex < detailData.episodes.length && targetIndex >= 0) {
setCurrentEpisodeIndex(targetIndex);
currentEpisodeIndexRef.current = targetIndex;
// 如果有initialEpisodeIndex用户从文件点击进入
if (detailData.initialEpisodeIndex !== undefined) {
// 如果播放记录的集数和点击的文件集数一致,则使用播放记录的时间
if (recordIndex === detailData.initialEpisodeIndex) {
initialIndex = recordIndex;
shouldResumeTime = true;
resumeTimeRef.current = recordTime;
console.log('[Play] 播放记录集数与点击文件一致,恢复播放进度:', recordTime);
} else {
// 否则使用点击的文件集数,从头开始播放
initialIndex = detailData.initialEpisodeIndex;
console.log('[Play] 使用点击的文件集数:', initialIndex);
}
} else {
// 没有initialEpisodeIndex使用播放记录
initialIndex = recordIndex;
shouldResumeTime = true;
resumeTimeRef.current = recordTime;
console.log('[Play] 使用播放记录集数:', initialIndex);
}
} else {
// 没有播放记录
if (detailData.initialEpisodeIndex !== undefined) {
// 使用点击的文件集数
initialIndex = detailData.initialEpisodeIndex;
console.log('[Play] 没有播放记录,使用点击的文件集数:', initialIndex);
} else {
// 默认从第0集开始
initialIndex = 0;
console.log('[Play] 没有播放记录从第0集开始');
}
}
// 保存待恢复的播放进度,待播放器就绪后跳转
resumeTimeRef.current = targetTime;
// 更新当前选集索引
if (initialIndex < detailData.episodes.length && initialIndex >= 0) {
setCurrentEpisodeIndex(initialIndex);
currentEpisodeIndexRef.current = initialIndex;
}
} catch (err) {
console.error('读取播放记录失败:', err);

View File

@@ -139,6 +139,7 @@ export interface SearchResult {
subtitles?: Array<Array<{ label: string; url: string }>>; // 字幕列表(按集数索引)
tmdb_id?: number; // TMDB ID
rating?: number; // 评分
initialEpisodeIndex?: number; // 初始集数索引(用于小雅源从文件点击进入时指定集数)
}
// 豆瓣数据结构