Created
November 18, 2017 23:18
-
-
Save Elvis10ten/bfe6063bd820be7b83260436761c2a4c to your computer and use it in GitHub Desktop.
Helper for ACRCloud
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.support.annotation.NonNull; | |
import android.support.annotation.Nullable; | |
import com.google.gson.JsonArray; | |
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; | |
import java.util.List; | |
public class ACRCloudResponseDeserializer implements JsonDeserializer<Music> { | |
@Override | |
public Music deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) | |
throws JsonParseException { | |
Music music = new Music(); | |
JsonObject responseObject = json.getAsJsonObject(); | |
setMusicStatus(music, responseObject); | |
setMetadata(music, responseObject); | |
return music; | |
} | |
private void setMusicStatus(@NonNull Music music, @NonNull JsonObject responseObject) { | |
if(responseObject.has("status")) { | |
JsonObject statusObject = responseObject.getAsJsonObject("status"); | |
if(statusObject.has("code")) { | |
music.statusCode = statusObject.getAsJsonPrimitive("code").getAsInt(); | |
} | |
} | |
} | |
private void setMetadata(@NonNull Music music, @NonNull JsonObject responseObject) { | |
if(responseObject.has("metadata")) { | |
JsonObject metadataObject = responseObject.getAsJsonObject("metadata"); | |
if (metadataObject.has("music")) { | |
JsonArray musicArray = metadataObject.getAsJsonArray("music"); | |
if(musicArray.size() > 0) { | |
// We only need the first music result | |
setMusicDetails(music, musicArray.get(0).getAsJsonObject()); | |
} | |
} | |
} | |
} | |
private void setMusicDetails(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if(musicObject.has("play_offset_ms")) { | |
music.playOffsetMs = musicObject.getAsJsonPrimitive("play_offset_ms").getAsLong(); | |
} | |
if(musicObject.has("release_date")) { | |
music.releaseDate = musicObject.getAsJsonPrimitive("release_date").getAsString(); | |
} | |
if(musicObject.has("title")) { | |
music.title = musicObject.getAsJsonPrimitive("title").getAsString(); | |
} | |
if(musicObject.has("label")) { | |
music.label = musicObject.getAsJsonPrimitive("label").getAsString(); | |
} | |
if(musicObject.has("duration_ms")) { | |
music.durationMs = musicObject.getAsJsonPrimitive("duration_ms").getAsLong(); | |
} | |
setArtistNames(music, musicObject); | |
setGenreNames(music, musicObject); | |
setAlbums(music, musicObject); | |
setExternalMetadata(music, musicObject); | |
setExternalIds(music, musicObject); | |
} | |
private void setArtistNames(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if(musicObject.has("artists")) { | |
JsonArray artistArray = musicObject.getAsJsonArray("artists"); | |
List<String> artistNames = new ArrayList<>(); | |
for(JsonElement artistElement : artistArray) { | |
JsonObject artistObject = artistElement.getAsJsonObject(); | |
if(artistObject.has("name")) { | |
artistNames.add(artistObject.get("name").getAsString()); | |
} | |
} | |
music.artistNames = artistNames; | |
} | |
} | |
private void setGenreNames(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if(musicObject.has("genres")) { | |
JsonArray genreArray = musicObject.getAsJsonArray("genres"); | |
List<String> genreNames = new ArrayList<>(); | |
for(JsonElement genreElement : genreArray) { | |
JsonObject genreObject = genreElement.getAsJsonObject(); | |
if(genreObject.has("name")) { | |
genreNames.add(genreObject.get("name").getAsString()); | |
} | |
} | |
music.genreNames = genreNames; | |
} | |
} | |
private void setAlbums(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if(musicObject.has("album")) { | |
JsonObject albumObject = musicObject.getAsJsonObject("album"); | |
if(albumObject.has("name")) { | |
music.albumName = albumObject.get("name").getAsString(); | |
} | |
} | |
} | |
private void setExternalMetadata(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if (musicObject.has("external_metadata")) { | |
JsonObject externalMetadataObject = musicObject.getAsJsonObject("external_metadata"); | |
String deezerTrackId = getDeezerTrackId(externalMetadataObject); | |
if(deezerTrackId != null) { | |
music.deezerId = deezerTrackId; | |
} | |
String spotifyTrackId = getSpotifyTrackId(externalMetadataObject); | |
if(spotifyTrackId != null) { | |
music.spotifyId = spotifyTrackId; | |
} | |
String youtubeId = getYoutubeTrackId(externalMetadataObject); | |
if(youtubeId != null) { | |
music.youtubeId = youtubeId; | |
} | |
} | |
} | |
private @Nullable String getDeezerTrackId(@NonNull JsonObject externalMetadataObject) { | |
if(externalMetadataObject.has("deezer")) { | |
JsonObject deezerObject = externalMetadataObject.getAsJsonObject("deezer"); | |
if(deezerObject.has("track")) { | |
JsonObject deezerTrackObject = deezerObject.getAsJsonObject("track"); | |
if(deezerTrackObject.has("id")) { | |
return deezerTrackObject.getAsJsonPrimitive("id").getAsString(); | |
} | |
} | |
} | |
return null; | |
} | |
private @Nullable String getSpotifyTrackId(@NonNull JsonObject externalMetadataObject) { | |
if(externalMetadataObject.has("spotify")) { | |
JsonObject spotifyObject = externalMetadataObject.getAsJsonObject("spotify"); | |
if(spotifyObject.has("track")) { | |
JsonObject spotifyTrackObject = spotifyObject.getAsJsonObject("track"); | |
if(spotifyTrackObject.has("id")) { | |
return spotifyTrackObject.getAsJsonPrimitive("id").getAsString(); | |
} | |
} | |
} | |
return null; | |
} | |
private @Nullable String getYoutubeTrackId(@NonNull JsonObject externalMetadataObject) { | |
if(externalMetadataObject.has("youtube")) { | |
JsonObject youtubeObject = externalMetadataObject.getAsJsonObject("youtube"); | |
if(youtubeObject.has("vid")) { | |
return youtubeObject.getAsJsonPrimitive("vid").getAsString(); | |
} | |
} | |
return null; | |
} | |
private void setExternalIds(@NonNull Music music, @NonNull JsonObject musicObject) { | |
if (musicObject.has("external_ids")) { | |
JsonObject externalIdsObject = musicObject.getAsJsonObject("external_ids"); | |
if(externalIdsObject.has("isrc")) { | |
music.isrc = externalIdsObject.getAsJsonPrimitive("isrc").getAsString(); | |
} | |
if(externalIdsObject.has("upc")) { | |
music.upc = externalIdsObject.getAsJsonPrimitive("upc").getAsString(); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.gson.annotations.JsonAdapter; | |
import java.util.List; | |
@JsonAdapter(ACRCloudResponseDeserializer.class) | |
public class Music { | |
public int statusCode = -1; | |
public long playOffsetMs; | |
public String releaseDate; | |
public String title; | |
public String label; | |
public long durationMs; | |
public List<String> artistNames; | |
public List<String> genreNames; | |
public String albumName; | |
public String isrc; | |
public String upc; | |
public String deezerId; | |
public String spotifyId; | |
public String youtubeId; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment