From a8d990db23dbce9b41df82e7c75c4b13ebd5bc81 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sat, 4 Apr 2026 23:03:46 -0700 Subject: [PATCH] fix subsonic transcoding stream url to return raw string instead of fetch --- .../api/subsonic/subsonic-controller.ts | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/renderer/api/subsonic/subsonic-controller.ts b/src/renderer/api/subsonic/subsonic-controller.ts index db43e51f3..2def2323c 100644 --- a/src/renderer/api/subsonic/subsonic-controller.ts +++ b/src/renderer/api/subsonic/subsonic-controller.ts @@ -237,6 +237,27 @@ function appendTranscodeParams(url: string, format?: string, bitrate?: number) { return streamUrl; } +function buildGetTranscodeStreamUrl( + server: null | undefined | { credential?: string; url?: string }, + args: { + mediaId: string; + mediaType: 'podcast' | 'song'; + offset: number; + transcodeParams: string; + }, +): string { + const params = new URLSearchParams({ + c: 'Feishin', + mediaId: args.mediaId, + mediaType: args.mediaType, + offset: String(args.offset), + transcodeParams: args.transcodeParams, + v: '1.13.0', + }); + + return `${server?.url}/rest/getTranscodeStream.view?${params.toString()}&${server?.credential}`; +} + function sortAndPaginate( items: T[], options: { @@ -2013,20 +2034,14 @@ export const SubsonicController: InternalControllerEndpoint = { return appendTranscodeParams(streamUrl, format, bitrate); } - const transcodeStreamUrl = await ssApiClient(apiClientProps).getTranscodeStream({ - query: { - mediaId: id, - mediaType, - offset: 0, - transcodeParams: td.transcodeParams, - }, + const transcodeStreamUrl = buildGetTranscodeStreamUrl(server, { + mediaId: String(id), + mediaType: (mediaType ?? 'song') as 'podcast' | 'song', + offset: 0, + transcodeParams: td.transcodeParams, }); - if (transcodeStreamUrl.status !== 200) { - throw new Error('Failed to get transcode stream'); - } - - return transcodeStreamUrl.body; + return transcodeStreamUrl; } return streamUrl;