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 b05441d9..ede024ca 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 @@ -245,7 +245,7 @@ internal fun Attributes.attr(name: String): String = getValue(name) ?: "" internal fun Attributes.longAttr(name: String): Long? = attr(name).takeIf { it.isNotEmpty() }?.toLongOrNull() -internal fun Attributes.floatAttr(name: String): Float? = attr(name).takeIf { it.isNotEmpty() }?.toFloatOrNull() +internal fun Attributes.floatAttr(name: String): Float? = attr(name).takeIf { it.isNotEmpty() }?.toFloatOrNull()?.takeIf { it.isFinite() } internal fun Attributes.dateAttr(name: String): Long? = attr(name).takeIf { it.isNotEmpty() }?.let(IsoDate::parse) 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 116e4cec..db26724b 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,33 @@ class SubsonicXmlTest { assertEquals(null, songs[1].albumPeak) } + @Test + fun ignoresNonFiniteReplayGainValues() { + val songs = + songs( + """ + + + + + + + + + + + """.trimIndent(), + ) + + assertEquals(null, songs[0].trackGain) + assertEquals(null, songs[0].albumGain) + assertEquals(null, songs[0].trackPeak) + assertEquals(null, songs[0].albumPeak) + assertEquals(-3.2f, songs[1].trackGain) + assertEquals(null, songs[1].albumGain) + assertEquals(0.98f, songs[1].trackPeak) + } + @Test fun ignoresSongGenresThatAreNotDirectChildren() { val songs =