Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.google.gson.JsonDeserializationContext
- import com.google.gson.JsonDeserializer
- import com.google.gson.JsonElement
- import com.google.gson.JsonObject
- import com.google.gson.JsonParseException
- import java.lang.reflect.Type
- import java.util.ArrayList
- class ACRCloudResponseDeserializer : JsonDeserializer<Song> {
- @Throws(JsonParseException::class)
- override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Song {
- val music = Song()
- val responseObject = json.asJsonObject
- setSongStatus(music, responseObject)
- setMetadata(music, responseObject)
- return music
- }
- private fun setSongStatus(music: Song, responseObject: JsonObject) {
- if (responseObject.has("status")) {
- val statusObject = responseObject.getAsJsonObject("status")
- if (statusObject.has("code")) {
- music.statusCode = statusObject.getAsJsonPrimitive("code").asInt
- }
- }
- }
- private fun setMetadata(music: Song, responseObject: JsonObject) {
- if (responseObject.has("metadata")) {
- val metadataObject = responseObject.getAsJsonObject("metadata")
- if (metadataObject.has("music")) {
- val musicArray = metadataObject.getAsJsonArray("music")
- if (musicArray.size() > 0) {
- // We only need the first music result
- setSongDetails(music, musicArray.get(0).asJsonObject)
- }
- }
- }
- }
- private fun setSongDetails(music: Song, musicObject: JsonObject) {
- if (musicObject.has("play_offset_ms")) {
- music.playOffsetMs = musicObject.getAsJsonPrimitive("play_offset_ms").asLong
- }
- if (musicObject.has("release_date")) {
- music.releaseDate = musicObject.getAsJsonPrimitive("release_date").asString
- }
- if (musicObject.has("title")) {
- music.title = musicObject.getAsJsonPrimitive("title").asString
- }
- if (musicObject.has("label")) {
- music.label = musicObject.getAsJsonPrimitive("label").asString
- }
- if (musicObject.has("duration_ms")) {
- music.durationMs = musicObject.getAsJsonPrimitive("duration_ms").asLong
- }
- setArtistNames(music, musicObject)
- setGenreNames(music, musicObject)
- setAlbums(music, musicObject)
- setExternalMetadata(music, musicObject)
- setExternalIds(music, musicObject)
- }
- private fun setArtistNames(music: Song, musicObject: JsonObject) {
- if (musicObject.has("artists")) {
- val artistArray = musicObject.getAsJsonArray("artists")
- val artistNames = ArrayList<String>()
- for (artistElement in artistArray) {
- val artistObject = artistElement.asJsonObject
- if (artistObject.has("name")) {
- artistNames.add(artistObject.get("name").asString)
- }
- }
- music.artistNames = artistNames
- }
- }
- private fun setGenreNames(music: Song, musicObject: JsonObject) {
- if (musicObject.has("genres")) {
- val genreArray = musicObject.getAsJsonArray("genres")
- val genreNames = ArrayList<String>()
- for (genreElement in genreArray) {
- val genreObject = genreElement.asJsonObject
- if (genreObject.has("name")) {
- genreNames.add(genreObject.get("name").asString)
- }
- }
- music.genreNames = genreNames
- }
- }
- private fun setAlbums(music: Song, musicObject: JsonObject) {
- if (musicObject.has("album")) {
- val albumObject = musicObject.getAsJsonObject("album")
- if (albumObject.has("name")) {
- music.albumName = albumObject.get("name").asString
- }
- }
- }
- private fun setExternalMetadata(music: Song, musicObject: JsonObject) {
- if (musicObject.has("external_metadata")) {
- val externalMetadataObject = musicObject.getAsJsonObject("external_metadata")
- val deezerTrackId = getDeezerTrackId(externalMetadataObject)
- if (deezerTrackId != null) {
- music.deezerId = deezerTrackId
- }
- val spotifyTrackId = getSpotifyTrackId(externalMetadataObject)
- if (spotifyTrackId != null) {
- music.spotifyId = spotifyTrackId
- }
- val youtubeId = getYoutubeTrackId(externalMetadataObject)
- if (youtubeId != null) {
- music.youtubeId = youtubeId
- }
- }
- }
- private fun getDeezerTrackId(externalMetadataObject: JsonObject): String? {
- if (externalMetadataObject.has("deezer")) {
- val deezerObject = externalMetadataObject.getAsJsonObject("deezer")
- if (deezerObject.has("track")) {
- val deezerTrackObject = deezerObject.getAsJsonObject("track")
- if (deezerTrackObject.has("id")) {
- return deezerTrackObject.getAsJsonPrimitive("id").asString
- }
- }
- }
- return null
- }
- private fun getSpotifyTrackId(externalMetadataObject: JsonObject): String? {
- if (externalMetadataObject.has("spotify")) {
- val spotifyObject = externalMetadataObject.getAsJsonObject("spotify")
- if (spotifyObject.has("track")) {
- val spotifyTrackObject = spotifyObject.getAsJsonObject("track")
- if (spotifyTrackObject.has("id")) {
- return spotifyTrackObject.getAsJsonPrimitive("id").asString
- }
- }
- }
- return null
- }
- private fun getYoutubeTrackId(externalMetadataObject: JsonObject): String? {
- if (externalMetadataObject.has("youtube")) {
- val youtubeObject = externalMetadataObject.getAsJsonObject("youtube")
- if (youtubeObject.has("vid")) {
- return youtubeObject.getAsJsonPrimitive("vid").asString
- }
- }
- return null
- }
- private fun setExternalIds(music: Song, musicObject: JsonObject) {
- if (musicObject.has("external_ids")) {
- val externalIdsObject = musicObject.getAsJsonObject("external_ids")
- if (externalIdsObject.has("isrc")) {
- music.isrc = externalIdsObject.getAsJsonPrimitive("isrc").asString
- }
- if (externalIdsObject.has("upc")) {
- music.upc = externalIdsObject.getAsJsonPrimitive("upc").asString
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment