- 播放上下文:作品链接带上来源(搜索、标签、作者、hashtag),上一条/下一条 在该列表内移动;当前作品不在列表中时退回全部作品的发布时间顺序 - 顶部提示标签显示当前列表与位置,点击打开侧栏列表,✕ 退出 - 侧栏改为「评论 | TA的作品 | 搜索结果/#hashtag」标签页,作品封面网格可就地切换 - 作者模式:打开「TA的作品」进入,关闭侧栏不退出,点提示 ✕ 后回到原来的列表 - 从搜索结果进入或点 hashtag 时自动打开对应列表 - 描述中的 hashtag 可点击,按完整 hashtag 精确匹配(#丰川祥子 不含 #丰川祥子cos) - 新增 /api/playlist;搜索 SQL 抽到 lib/search-query.ts 与播放页共用,保证顺序一致 - 移动端:底部抽屉、点作品后收起,媒体区支持上下滑切换 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
858 B
TypeScript
22 lines
858 B
TypeScript
import { NextResponse } from "next/server";
|
|
import { json } from "@/lib/json";
|
|
import { parsePlaybackContext } from "@/lib/playback-context";
|
|
import { contextItems } from "@/lib/playback-context.server";
|
|
|
|
// 按播放上下文的顺序列出作品,供播放页侧栏的网格使用。
|
|
// 参数与 /aweme/<id> 上的上下文参数相同:?ctx=search&q=…、?ctx=hashtag&hashtag=…、?ctx=author&author=… 等。
|
|
export async function GET(req: Request) {
|
|
const ctx = parsePlaybackContext(new URL(req.url).searchParams);
|
|
if (!ctx) {
|
|
return NextResponse.json({ error: "Invalid context" }, { status: 400 });
|
|
}
|
|
try {
|
|
return json(await contextItems(ctx));
|
|
} catch (err) {
|
|
console.error("Playlist error:", err);
|
|
return NextResponse.json({ error: "Playlist failed" }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
export const dynamic = "force-dynamic";
|