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 =