Guest User

Untitled

a guest
Nov 23rd, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1. import com.google.gson.JsonDeserializationContext
  2. import com.google.gson.JsonDeserializer
  3. import com.google.gson.JsonElement
  4. import com.google.gson.JsonObject
  5. import com.google.gson.JsonParseException
  6.  
  7. import java.lang.reflect.Type
  8. import java.util.ArrayList
  9.  
  10. class ACRCloudResponseDeserializer : JsonDeserializer<Song> {
  11.  
  12.  
  13. @Throws(JsonParseException::class)
  14. override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Song {
  15. val music = Song()
  16. val responseObject = json.asJsonObject
  17.  
  18. setSongStatus(music, responseObject)
  19. setMetadata(music, responseObject)
  20.  
  21. return music
  22. }
  23.  
  24. private fun setSongStatus(music: Song, responseObject: JsonObject) {
  25. if (responseObject.has("status")) {
  26. val statusObject = responseObject.getAsJsonObject("status")
  27.  
  28. if (statusObject.has("code")) {
  29. music.statusCode = statusObject.getAsJsonPrimitive("code").asInt
  30. }
  31. }
  32. }
  33.  
  34. private fun setMetadata(music: Song, responseObject: JsonObject) {
  35. if (responseObject.has("metadata")) {
  36. val metadataObject = responseObject.getAsJsonObject("metadata")
  37.  
  38. if (metadataObject.has("music")) {
  39. val musicArray = metadataObject.getAsJsonArray("music")
  40.  
  41. if (musicArray.size() > 0) {
  42. // We only need the first music result
  43. setSongDetails(music, musicArray.get(0).asJsonObject)
  44. }
  45. }
  46.  
  47. }
  48. }
  49.  
  50. private fun setSongDetails(music: Song, musicObject: JsonObject) {
  51. if (musicObject.has("play_offset_ms")) {
  52. music.playOffsetMs = musicObject.getAsJsonPrimitive("play_offset_ms").asLong
  53. }
  54.  
  55. if (musicObject.has("release_date")) {
  56. music.releaseDate = musicObject.getAsJsonPrimitive("release_date").asString
  57. }
  58.  
  59. if (musicObject.has("title")) {
  60. music.title = musicObject.getAsJsonPrimitive("title").asString
  61. }
  62.  
  63. if (musicObject.has("label")) {
  64. music.label = musicObject.getAsJsonPrimitive("label").asString
  65. }
  66.  
  67. if (musicObject.has("duration_ms")) {
  68. music.durationMs = musicObject.getAsJsonPrimitive("duration_ms").asLong
  69. }
  70.  
  71. setArtistNames(music, musicObject)
  72. setGenreNames(music, musicObject)
  73. setAlbums(music, musicObject)
  74. setExternalMetadata(music, musicObject)
  75. setExternalIds(music, musicObject)
  76. }
  77.  
  78. private fun setArtistNames(music: Song, musicObject: JsonObject) {
  79. if (musicObject.has("artists")) {
  80. val artistArray = musicObject.getAsJsonArray("artists")
  81. val artistNames = ArrayList<String>()
  82.  
  83. for (artistElement in artistArray) {
  84. val artistObject = artistElement.asJsonObject
  85.  
  86. if (artistObject.has("name")) {
  87. artistNames.add(artistObject.get("name").asString)
  88. }
  89. }
  90.  
  91. music.artistNames = artistNames
  92. }
  93. }
  94.  
  95. private fun setGenreNames(music: Song, musicObject: JsonObject) {
  96. if (musicObject.has("genres")) {
  97. val genreArray = musicObject.getAsJsonArray("genres")
  98. val genreNames = ArrayList<String>()
  99.  
  100. for (genreElement in genreArray) {
  101. val genreObject = genreElement.asJsonObject
  102.  
  103. if (genreObject.has("name")) {
  104. genreNames.add(genreObject.get("name").asString)
  105. }
  106. }
  107.  
  108. music.genreNames = genreNames
  109. }
  110. }
  111.  
  112. private fun setAlbums(music: Song, musicObject: JsonObject) {
  113. if (musicObject.has("album")) {
  114. val albumObject = musicObject.getAsJsonObject("album")
  115.  
  116. if (albumObject.has("name")) {
  117. music.albumName = albumObject.get("name").asString
  118. }
  119. }
  120. }
  121.  
  122. private fun setExternalMetadata(music: Song, musicObject: JsonObject) {
  123. if (musicObject.has("external_metadata")) {
  124. val externalMetadataObject = musicObject.getAsJsonObject("external_metadata")
  125.  
  126. val deezerTrackId = getDeezerTrackId(externalMetadataObject)
  127. if (deezerTrackId != null) {
  128. music.deezerId = deezerTrackId
  129. }
  130.  
  131. val spotifyTrackId = getSpotifyTrackId(externalMetadataObject)
  132. if (spotifyTrackId != null) {
  133. music.spotifyId = spotifyTrackId
  134. }
  135.  
  136. val youtubeId = getYoutubeTrackId(externalMetadataObject)
  137. if (youtubeId != null) {
  138. music.youtubeId = youtubeId
  139. }
  140. }
  141. }
  142.  
  143. private fun getDeezerTrackId(externalMetadataObject: JsonObject): String? {
  144. if (externalMetadataObject.has("deezer")) {
  145. val deezerObject = externalMetadataObject.getAsJsonObject("deezer")
  146.  
  147. if (deezerObject.has("track")) {
  148. val deezerTrackObject = deezerObject.getAsJsonObject("track")
  149.  
  150. if (deezerTrackObject.has("id")) {
  151. return deezerTrackObject.getAsJsonPrimitive("id").asString
  152. }
  153. }
  154. }
  155.  
  156. return null
  157. }
  158.  
  159. private fun getSpotifyTrackId(externalMetadataObject: JsonObject): String? {
  160. if (externalMetadataObject.has("spotify")) {
  161. val spotifyObject = externalMetadataObject.getAsJsonObject("spotify")
  162.  
  163. if (spotifyObject.has("track")) {
  164. val spotifyTrackObject = spotifyObject.getAsJsonObject("track")
  165.  
  166. if (spotifyTrackObject.has("id")) {
  167. return spotifyTrackObject.getAsJsonPrimitive("id").asString
  168. }
  169. }
  170. }
  171.  
  172. return null
  173. }
  174.  
  175. private fun getYoutubeTrackId(externalMetadataObject: JsonObject): String? {
  176. if (externalMetadataObject.has("youtube")) {
  177. val youtubeObject = externalMetadataObject.getAsJsonObject("youtube")
  178.  
  179. if (youtubeObject.has("vid")) {
  180. return youtubeObject.getAsJsonPrimitive("vid").asString
  181. }
  182. }
  183.  
  184. return null
  185. }
  186.  
  187. private fun setExternalIds(music: Song, musicObject: JsonObject) {
  188. if (musicObject.has("external_ids")) {
  189. val externalIdsObject = musicObject.getAsJsonObject("external_ids")
  190.  
  191. if (externalIdsObject.has("isrc")) {
  192. music.isrc = externalIdsObject.getAsJsonPrimitive("isrc").asString
  193. }
  194.  
  195. if (externalIdsObject.has("upc")) {
  196. music.upc = externalIdsObject.getAsJsonPrimitive("upc").asString
  197. }
  198. }
  199. }
  200.  
  201. }
Add Comment
Please, Sign In to add comment