Skip to content

Commit da2445f

Browse files
committed
fix AudioSegment model, manually parse SpotifyPublicUser (thanks spotify)
Signed-off-by: Adam Ratzman <adam@adamratzman.com>
1 parent dfd7598 commit da2445f

File tree

5 files changed

+44
-11
lines changed

5 files changed

+44
-11
lines changed

src/main/kotlin/com/adamratzman/spotify/main/SpotifyAPI.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.adamratzman.spotify.utils.byteEncode
2424
import com.adamratzman.spotify.utils.getAlbumConverter
2525
import com.adamratzman.spotify.utils.getFeaturedPlaylistsConverter
2626
import com.adamratzman.spotify.utils.getPlaylistConverter
27+
import com.adamratzman.spotify.utils.getPublicUserConverter
2728
import com.adamratzman.spotify.utils.getSavedTrackConverter
2829
import com.adamratzman.spotify.utils.toObject
2930
import com.adamratzman.spotify.utils.toObjectNullable
@@ -438,4 +439,5 @@ private fun getKlaxon(api: SpotifyAPI) = Klaxon()
438439
.converter(getFeaturedPlaylistsConverter(api))
439440
.converter(getPlaylistConverter(api))
440441
.converter(getAlbumConverter(api))
441-
.converter(getSavedTrackConverter(api))
442+
.converter(getSavedTrackConverter(api))
443+
.converter(getPublicUserConverter(api))

src/main/kotlin/com/adamratzman/spotify/utils/KlaxonConverters.kt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,38 @@ import com.beust.klaxon.Converter
55
import com.beust.klaxon.JsonValue
66
import org.json.JSONObject
77

8-
fun getSavedTrackConverter(api:SpotifyAPI)= object : Converter {
8+
fun getPublicUserConverter(api: SpotifyAPI) = object : Converter {
9+
override fun canConvert(cls: Class<*>): Boolean {
10+
return cls == SpotifyPublicUser::class.java
11+
}
12+
13+
override fun fromJson(jv: JsonValue): Any? {
14+
return jv.obj?.let { obj ->
15+
if (obj.string("id")?.isNotBlank() == true) {
16+
SpotifyPublicUser(
17+
obj.string("display_name"),
18+
obj.obj("external_urls")!!.map.mapValues { it.value as String },
19+
obj.obj("followers")?.let { api.klaxon.parseFromJsonObject<Followers>(it) } ?: Followers(null, -1),
20+
obj.string("href")!!,
21+
obj.string("id")!!,
22+
obj.array("images") ?: listOf(),
23+
obj.string("type")!!,
24+
obj.string("uri")!!
25+
)
26+
} else {
27+
// this is the *Spotify* user, and is SOMEHOW broken
28+
SpotifyPublicUser(
29+
externalUrls = hashMapOf(), href = "https://api.spotify.com/v1/users/spotify",
30+
id = "spotify", type = "user", _uri = "spotify:user:spotify"
31+
)
32+
}
33+
}
34+
}
35+
36+
override fun toJson(value: Any): String = JSONObject(value).toString()
37+
}
38+
39+
fun getSavedTrackConverter(api: SpotifyAPI) = object : Converter {
940
override fun canConvert(cls: Class<*>): Boolean {
1041
return cls == SavedTrack::class.java
1142
}
@@ -48,6 +79,7 @@ fun getAlbumConverter(api: SpotifyAPI) = object : Converter {
4879
obj.obj("tracks")!!.toJsonString().toPagingObject(endpoint = api.tracks),
4980
obj.string("type")!!,
5081
obj.string("uri")!!,
82+
AlbumURI(obj.string("uri")!!),
5183
obj.int("total_tracks")!!
5284
)
5385
}

src/main/kotlin/com/adamratzman/spotify/utils/ResultObjects.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ data class SpotifyUserInformation(
7676

7777
data class SpotifyPublicUser(
7878
@Json(name = "display_name") val displayName: String? = null,
79-
@Json(name = "external_urls") val externalUrls: HashMap<String, String>,
79+
@Json(name = "external_urls") val externalUrls: Map<String, String>,
8080
val followers: Followers = Followers(null, -1),
8181
val href: String,
8282
val id: String,
@@ -339,10 +339,10 @@ data class AudioSegment(
339339
val start: Float,
340340
val duration: Float,
341341
val confidence: Float,
342-
@Json(name = "input_process") val loudness_start: Float,
343-
@Json(name = "input_process") val loudness_max_time: Float,
344-
@Json(name = "input_process") val loudness_max: Float,
345-
@Json(name = "input_process") val loudness_end: Float? = null,
342+
@Json(name = "loudness_start") val loudnessStart: Float,
343+
@Json(name = "loudness_max_time") val loudnessMaxTime: Float,
344+
@Json(name = "loudness_max") val loudnessMax: Float,
345+
@Json(name = "loudness_end") val loudnessEnd: Float? = null,
346346
val pitches: List<Float>,
347347
val timbre: List<Float>
348348
)

src/test/kotlin/com/adamratzman/spotify/private/ClientPersonalizationAPITest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ import org.spekframework.spek2.style.specification.describe
1010

1111
class ClientPersonalizationAPITest : Spek({
1212
describe("personalization endpoints") {
13+
if (api !is SpotifyClientAPI) return@describe
1314
it("top artists") {
14-
if (api !is SpotifyClientAPI) return@it
1515
assertTrue(api.personalization.getTopArtists(5, timeRange = ClientPersonalizationAPI.TimeRange.MEDIUM_TERM)
1616
.complete().isNotEmpty())
1717
}
1818

1919
it("top tracks") {
20-
(api as? SpotifyClientAPI) ?: return@it
2120
assertTrue(api.personalization.getTopTracks(5).complete().isNotEmpty())
2221
}
2322
}

src/test/kotlin/com/adamratzman/spotify/public/PublicAlbumsAPITest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class PublicAlbumsAPITest : Spek({
4141
it("valid album") {
4242
assertTrue(a.getAlbumTracks("29ct57rVIi3MIFyKJYUWrZ", 4, 3, Market.US).complete().items.isNotEmpty())
4343

44-
//assertTrue(a.getAlbumTracks("29ct57rVIi3MIFyKJYUWrZ", 4, 3).complete().items.isNotEmpty())
45-
//assertFalse(a.getAlbumTracks("29ct57rVIi3MIFyKJYUWrZ", 4, 3, Market.US).complete().items[0].isRelinked())
44+
assertTrue(a.getAlbumTracks("29ct57rVIi3MIFyKJYUWrZ", 4, 3).complete().items.isNotEmpty())
45+
assertFalse(a.getAlbumTracks("29ct57rVIi3MIFyKJYUWrZ", 4, 3, Market.US).complete().items[0].isRelinked())
4646
}
4747
}
4848
}

0 commit comments

Comments
 (0)