From c36f0a055d5c719eb20f6580b620198d4b6a9d8f Mon Sep 17 00:00:00 2001 From: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:20:42 -0700 Subject: [PATCH] [enhancement]: parse replaygain from subsonic endpoints where available --- src/renderer/api/subsonic/subsonic-normalize.ts | 16 ++++++++++++++-- src/renderer/api/subsonic/subsonic-types.ts | 8 ++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/renderer/api/subsonic/subsonic-normalize.ts b/src/renderer/api/subsonic/subsonic-normalize.ts index a775eb3d..e6eb41ed 100644 --- a/src/renderer/api/subsonic/subsonic-normalize.ts +++ b/src/renderer/api/subsonic/subsonic-normalize.ts @@ -75,7 +75,13 @@ const normalizeSong = ( discNumber: item.discNumber || 1, discSubtitle: null, duration: item.duration ? item.duration * 1000 : 0, - gain: null, + gain: + item.replayGain && (item.replayGain.albumGain || item.replayGain.trackGain) + ? { + album: item.replayGain.albumGain, + track: item.replayGain.trackGain, + } + : null, genres: item.genre ? [ { @@ -94,7 +100,13 @@ const normalizeSong = ( lyrics: null, name: item.title, path: item.path, - peak: null, + peak: + item.replayGain && (item.replayGain.albumPeak || item.replayGain.trackPeak) + ? { + album: item.replayGain.albumPeak, + track: item.replayGain.trackPeak, + } + : null, playCount: item?.playCount || 0, releaseDate: null, releaseYear: item.year ? String(item.year) : null, diff --git a/src/renderer/api/subsonic/subsonic-types.ts b/src/renderer/api/subsonic/subsonic-types.ts index 86d6877d..eba145c5 100644 --- a/src/renderer/api/subsonic/subsonic-types.ts +++ b/src/renderer/api/subsonic/subsonic-types.ts @@ -53,6 +53,13 @@ const musicFolderList = z.object({ }), }); +const songGain = z.object({ + albumGain: z.number().optional(), + albumPeak: z.number().optional(), + trackGain: z.number().optional(), + trackPeak: z.number().optional(), +}); + const song = z.object({ album: z.string().optional(), albumId: z.string().optional(), @@ -72,6 +79,7 @@ const song = z.object({ parent: z.string(), path: z.string(), playCount: z.number().optional(), + replayGain: songGain.optional(), size: z.number(), starred: z.boolean().optional(), suffix: z.string(),