mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 21:12:49 +08:00
fix(api): add getPlaylistDetail provider method for QQ playlist detail
The /playlist/:id/detail route was hardcoded to call the NetEase API path /playlist/detail on whatever provider was selected. For QQ this hit a non-existent path, so clicking into any QQ playlist showed "歌单不存在或加载失败". Replace the platform-specific hack in the route handler with a proper getPlaylistDetail method on MusicProvider. Implement it for NetEase (porting the existing /playlist/detail logic) and QQ (calling /getSongListDetail and reading from response.cdlist[0]). Pre-existing bug exposed by the QQ source tab. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
e8d2f1ad98
commit
900191eca5
4 files changed
+50
-25
No files matched your search
+9
-25
@@ -168,32 +168,16 @@ export function createMusicRouter(
|
||||
router.get("/playlist/:id/detail", async (req, res) => {
|
||||
try {
|
||||
const provider = getProvider(req.query.platform as string);
|
||||
// Use the playlist songs endpoint to get basic info,
|
||||
// but we also need detail info (name, cover, description).
|
||||
// For netease, we access the underlying API directly.
|
||||
const nProvider = provider as any;
|
||||
if (nProvider.api) {
|
||||
const cookieParams = nProvider.cookie
|
||||
? { cookie: nProvider.cookie }
|
||||
: {};
|
||||
const detailRes = await nProvider.api.get("/playlist/detail", {
|
||||
params: { id: req.params.id, ...cookieParams },
|
||||
});
|
||||
const p = detailRes.data?.playlist;
|
||||
if (p) {
|
||||
res.json({
|
||||
playlist: {
|
||||
id: String(p.id),
|
||||
name: p.name,
|
||||
description: p.description ?? "",
|
||||
coverUrl: p.coverImgUrl ?? "",
|
||||
songCount: p.trackCount ?? 0,
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!provider.getPlaylistDetail) {
|
||||
res.status(501).json({ error: "Not supported by this provider" });
|
||||
return;
|
||||
}
|
||||
res.status(404).json({ error: "Playlist not found" });
|
||||
const detail = await provider.getPlaylistDetail(req.params.id);
|
||||
if (!detail) {
|
||||
res.status(404).json({ error: "Playlist not found" });
|
||||
return;
|
||||
}
|
||||
res.json({ playlist: detail });
|
||||
} catch (err) {
|
||||
logger.error({ err }, "Get playlist detail failed");
|
||||
res.status(500).json({ error: (err as Error).message });
|
||||
|
||||
Reference in new issue
Block a user