diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt index 23071d30..c3460aed 100644 --- a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetMusicFoldersTest.kt @@ -17,7 +17,9 @@ class SubsonicApiGetMusicFoldersTest : SubsonicAPIClientTest() { assertResponseSuccessful(response) with(response.body()) { assertBaseResponseOk() - musicFolders `should equal` listOf(MusicFolder(0, "Music"), MusicFolder(2, "Test")) + musicFolders `should equal` listOf( + MusicFolder("0", "Music"), + MusicFolder("2", "Test")) } } diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt index 66c68f48..71741ae6 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/models/MusicFolder.kt @@ -1,3 +1,3 @@ package org.moire.ultrasonic.api.subsonic.models -data class MusicFolder(val id: Long = -1, val name: String = "") +data class MusicFolder(val id: String = "", val name: String = "") diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt index bbbda243..8e78c0d7 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/MusicFoldersResponse.kt @@ -1,33 +1,18 @@ package org.moire.ultrasonic.api.subsonic.response -import com.fasterxml.jackson.core.JsonParser -import com.fasterxml.jackson.core.JsonToken -import com.fasterxml.jackson.databind.DeserializationContext -import com.fasterxml.jackson.databind.JsonDeserializer -import com.fasterxml.jackson.databind.JsonMappingException -import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import com.fasterxml.jackson.annotation.JsonProperty import org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions import org.moire.ultrasonic.api.subsonic.SubsonicError import org.moire.ultrasonic.api.subsonic.models.MusicFolder class MusicFoldersResponse(status: Status, version: SubsonicAPIVersions, - error: SubsonicError?, - @JsonDeserialize(using = MusicFoldersDeserializer::class) - val musicFolders: List = emptyList()) : + error: SubsonicError?) : SubsonicResponse(status, version, error) { - companion object { - class MusicFoldersDeserializer() : JsonDeserializer>() { - override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): List { - p.nextToken() - if (p.currentName == "musicFolder" && p.nextToken() == JsonToken.START_ARRAY) { - val mfJavaType = ctxt!!.typeFactory - .constructCollectionType(List::class.java, MusicFolder::class.java) - return ctxt.readValue(p, mfJavaType) - } + @JsonProperty("musicFolders") private val wrapper = MusicFoldersWrapper() - throw JsonMappingException(p, "Failed to parse music folders list") - } - } - } + val musicFolders get() = wrapper.musicFolders } + +internal class MusicFoldersWrapper( + @JsonProperty("musicFolder") val musicFolders: List = emptyList()) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt index fb967263..431f139c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt @@ -6,7 +6,7 @@ package org.moire.ultrasonic.data import org.moire.ultrasonic.domain.MusicFolder import org.moire.ultrasonic.api.subsonic.models.MusicFolder as APIMusicFolder -fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id.toString(), this.name) +fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id, this.name) fun List.toDomainEntityList(): List = this.map { it.toDomainEntity() } diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt index ef70a69d..34b1008c 100644 --- a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt @@ -12,27 +12,27 @@ import org.moire.ultrasonic.api.subsonic.models.MusicFolder class APIMusicFolderConverterTest { @Test fun `Should convert MusicFolder entity`() { - val entity = MusicFolder(id = 10, name = "some-name") + val entity = MusicFolder(id = "10", name = "some-name") val convertedEntity = entity.toDomainEntity() convertedEntity.name `should equal to` entity.name - convertedEntity.id `should equal to` entity.id.toString() + convertedEntity.id `should equal to` entity.id } @Test fun `Should convert list of MusicFolder entities`() { val entityList = listOf( - MusicFolder(id = 3, name = "some-name-3"), - MusicFolder(id = 4, name = "some-name-4")) + MusicFolder(id = "3", name = "some-name-3"), + MusicFolder(id = "4", name = "some-name-4")) val convertedList = entityList.toDomainEntityList() with(convertedList) { size `should equal to` entityList.size - this[0].id `should equal to` entityList[0].id.toString() + this[0].id `should equal to` entityList[0].id this[0].name `should equal to` entityList[0].name - this[1].id `should equal to` entityList[1].id.toString() + this[1].id `should equal to` entityList[1].id this[1].name `should equal to` entityList[1].name } }