diff --git a/app/src/main/kotlin/com/subtracks/data/source/subsonic/SubsonicXml.kt b/app/src/main/kotlin/com/subtracks/data/source/subsonic/SubsonicXml.kt index ede024ca..eaa31944 100644 --- a/app/src/main/kotlin/com/subtracks/data/source/subsonic/SubsonicXml.kt +++ b/app/src/main/kotlin/com/subtracks/data/source/subsonic/SubsonicXml.kt @@ -210,10 +210,10 @@ internal class SongDraft( } fun addReplayGain(attrs: Attributes) { - trackGain = attrs.floatAttr("trackGain") - albumGain = attrs.floatAttr("albumGain") - trackPeak = attrs.floatAttr("trackPeak") - albumPeak = attrs.floatAttr("albumPeak") + attrs.floatAttr("trackGain")?.let { trackGain = it } + attrs.floatAttr("albumGain")?.let { albumGain = it } + attrs.floatAttr("trackPeak")?.let { trackPeak = it } + attrs.floatAttr("albumPeak")?.let { albumPeak = it } } fun toSong(): Song = diff --git a/app/src/test/kotlin/com/subtracks/data/source/subsonic/SubsonicXmlTest.kt b/app/src/test/kotlin/com/subtracks/data/source/subsonic/SubsonicXmlTest.kt index db26724b..a33750e2 100644 --- a/app/src/test/kotlin/com/subtracks/data/source/subsonic/SubsonicXmlTest.kt +++ b/app/src/test/kotlin/com/subtracks/data/source/subsonic/SubsonicXmlTest.kt @@ -231,6 +231,47 @@ class SubsonicXmlTest { assertEquals(null, songs[1].albumPeak) } + @Test + fun mapsReplayGainPeaksWithoutGains() { + val songs = + songs( + """ + + + + + + + + """.trimIndent(), + ) + + assertEquals(null, songs.single().trackGain) + assertEquals(null, songs.single().albumGain) + assertEquals(0.98f, songs.single().trackPeak) + assertEquals(0.99f, songs.single().albumPeak) + } + + @Test + fun keepsTheFieldsOfEveryReplayGainElement() { + val songs = + songs( + """ + + + + + + + + + """.trimIndent(), + ) + + assertEquals(-3.2f, songs.single().trackGain) + assertEquals(0.98f, songs.single().trackPeak) + } + @Test fun ignoresNonFiniteReplayGainValues() { val songs =