From e1171dbcfead9644208291ccd6c6ebaa1a72eaae Mon Sep 17 00:00:00 2001 From: saopig1 <4x7sw862st@gmail.com> Date: Thu, 2 Jul 2026 00:19:22 +0800 Subject: [PATCH] feat(spotify): expose provider through web music/auth routers Co-Authored-By: Claude Opus 4.8 (1M context) --- src/web/api/auth.ts | 4 +++- src/web/api/music.ts | 8 +++++++- src/web/server.ts | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/web/api/auth.ts b/src/web/api/auth.ts index daed411..d42a410 100644 --- a/src/web/api/auth.ts +++ b/src/web/api/auth.ts @@ -12,7 +12,8 @@ export function createAuthRouter( bilibiliProvider: MusicProvider, logger: Logger, cookieStore?: CookieStore, - kugouProvider?: MusicProvider + kugouProvider?: MusicProvider, + spotifyProvider?: MusicProvider ): Router { const router = Router(); // YouTube is auth-less; we only use this instance so /auth/status can @@ -23,6 +24,7 @@ export function createAuthRouter( if (platform === "bilibili") return bilibiliProvider; if (platform === "youtube") return youtubeProvider; if (platform === "kugou" && kugouProvider) return kugouProvider; + if (platform === "spotify" && spotifyProvider) return spotifyProvider; return platform === "qq" ? qqProvider : neteaseProvider; } diff --git a/src/web/api/music.ts b/src/web/api/music.ts index a80545e..a547dea 100644 --- a/src/web/api/music.ts +++ b/src/web/api/music.ts @@ -14,7 +14,8 @@ export function createMusicRouter( logger: Logger, localProvider?: MusicProvider, config?: BotConfig, - kugouProvider?: MusicProvider + kugouProvider?: MusicProvider, + spotifyProvider?: MusicProvider ): Router { const router = Router(); const youtubeProvider: MusicProvider = new YouTubeProvider(); @@ -28,6 +29,7 @@ export function createMusicRouter( if (platform === "youtube") return youtubeProvider; if (platform === "local" && localProvider) return localProvider; if (platform === "kugou" && kugouProvider) return kugouProvider; + if (platform === "spotify" && spotifyProvider) return spotifyProvider; return platform === "qq" ? qqProvider : neteaseProvider; } @@ -291,6 +293,7 @@ export function createMusicRouter( bilibili: bilibiliProvider.getQuality(), local: localProvider?.getQuality() ?? "original", kugou: kugouProvider?.getQuality() ?? "128", + spotify: spotifyProvider?.getQuality() ?? "320", }); }); @@ -313,6 +316,9 @@ export function createMusicRouter( if ((!platform || platform === "kugou") && kugouProvider) { kugouProvider.setQuality(quality); } + if ((!platform || platform === "spotify") && spotifyProvider) { + spotifyProvider.setQuality(quality); + } logger.info({ quality, platform }, "Audio quality changed"); res.json({ success: true, quality }); }); diff --git a/src/web/server.ts b/src/web/server.ts index 16da691..428db8c 100755 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -40,6 +40,7 @@ export interface WebServerOptions { bilibiliProvider: MusicProvider; localProvider: MusicProvider; kugouProvider: MusicProvider; + spotifyProvider: MusicProvider; database: BotDatabase; config: BotConfig; configPath: string; @@ -125,7 +126,7 @@ export function createWebServer(options: WebServerOptions): WebServer { ); app.use( "/api/music", - createMusicRouter(options.neteaseProvider, options.qqProvider, options.bilibiliProvider, logger, options.localProvider, options.config, options.kugouProvider) + createMusicRouter(options.neteaseProvider, options.qqProvider, options.bilibiliProvider, logger, options.localProvider, options.config, options.kugouProvider, options.spotifyProvider) ); app.use("/api/player", createPlayerRouter( options.botManager, logger, options.database, @@ -133,7 +134,7 @@ export function createWebServer(options: WebServerOptions): WebServer { )); app.use( "/api/auth", - createAuthRouter(options.neteaseProvider, options.qqProvider, options.bilibiliProvider, logger, options.cookieStore, options.kugouProvider) + createAuthRouter(options.neteaseProvider, options.qqProvider, options.bilibiliProvider, logger, options.cookieStore, options.kugouProvider, options.spotifyProvider) ); app.use("/api/favorites", requireNotGuest, createFavoritesRouter(options.database, logger));