From ec62f5980876eddfb17330bf0e6e33237c8a88af Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Wed, 18 Nov 2015 23:04:39 -0500 Subject: [PATCH] Write converters for xml/gzip data and update data. Fill out initial classes for deserialization. --- .../MagnatuneCompainionApplication.java | 12 ++++- .../api/MagnatuneAlbumsConverter.java | 15 +++++- .../api/ToStringConverterFactory.java | 38 ++++++++++++++ .../companionformagnatune/api/data_api.java | 5 +- .../model/AlbumResponse.java | 11 ++++- .../model/xml/Album.java | 48 ++++++++++++++++++ .../model/xml/Track.java | 49 +++++++++++++++++++ 7 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/ToStringConverterFactory.java create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java create mode 100644 app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Track.java diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/MagnatuneCompainionApplication.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/MagnatuneCompainionApplication.java index 4ae1128..2d5d581 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/MagnatuneCompainionApplication.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/MagnatuneCompainionApplication.java @@ -2,8 +2,12 @@ package com.magnatune.eyecreate.companionformagnatune; import android.app.Application; +import com.magnatune.eyecreate.companionformagnatune.api.MagnatuneAlbumsConverterFactory; +import com.magnatune.eyecreate.companionformagnatune.api.ToStringConverterFactory; import com.magnatune.eyecreate.companionformagnatune.api.data_api; +import retrofit.Retrofit; + public class MagnatuneCompainionApplication extends Application { private static MagnatuneCompainionApplication instance; @@ -19,7 +23,11 @@ public class MagnatuneCompainionApplication extends Application { } public static data_api getDataApi() { - //TODO:implement - return null; + Retrofit api = new Retrofit.Builder() + .addConverterFactory(new MagnatuneAlbumsConverterFactory()) + .addConverterFactory(new ToStringConverterFactory()) + .baseUrl("http://he3.magnatune.com") + .build(); + return api.create(data_api.class); } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverter.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverter.java index bf6dd85..cbc97e1 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverter.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverter.java @@ -3,14 +3,25 @@ package com.magnatune.eyecreate.companionformagnatune.api; import com.magnatune.eyecreate.companionformagnatune.model.AlbumResponse; import com.squareup.okhttp.ResponseBody; +import org.simpleframework.xml.Serializer; +import org.simpleframework.xml.core.Persister; + import java.io.IOException; +import java.util.zip.GZIPInputStream; import retrofit.Converter; public class MagnatuneAlbumsConverter implements Converter { @Override public AlbumResponse convert(ResponseBody value) throws IOException { - //TODO:convert from zip to xml to object - return null; + GZIPInputStream compressedStream = new GZIPInputStream(value.byteStream()); + Serializer serializer = new Persister(); + AlbumResponse conversion = null; + try { + conversion = serializer.read(AlbumResponse.class,compressedStream); + } catch (Exception e) { + e.printStackTrace(); + } + return conversion; } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/ToStringConverterFactory.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/ToStringConverterFactory.java new file mode 100644 index 0000000..cfd1dcd --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/ToStringConverterFactory.java @@ -0,0 +1,38 @@ +package com.magnatune.eyecreate.companionformagnatune.api; + +import com.squareup.okhttp.MediaType; +import com.squareup.okhttp.RequestBody; +import com.squareup.okhttp.ResponseBody; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; + +import retrofit.Converter; + +public class ToStringConverterFactory extends Converter.Factory { + private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain"); + + @Override + public Converter fromResponseBody(Type type, Annotation[] annotations) { + if (String.class.equals(type)) { + return new Converter() { + @Override public String convert(ResponseBody value) throws IOException { + return value.string(); + } + }; + } + return null; + } + + @Override public Converter toRequestBody(Type type, Annotation[] annotations) { + if (String.class.equals(type)) { + return new Converter() { + @Override public RequestBody convert(String value) throws IOException { + return RequestBody.create(MEDIA_TYPE, value); + } + }; + } + return null; + } +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/data_api.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/data_api.java index 489382d..1e4d862 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/data_api.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/data_api.java @@ -6,6 +6,9 @@ import retrofit.Call; import retrofit.http.GET; public interface data_api { - @GET("/info/album_info.xml") + @GET("/info/album_info_xml.gz") Call getAlbumList(); + + @GET("/info/changed.txt") + Call getUpdateChecksum(); } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java index c454ca7..c0f63a0 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java @@ -1,5 +1,14 @@ package com.magnatune.eyecreate.companionformagnatune.model; +import org.simpleframework.xml.ElementList; +import org.simpleframework.xml.Root; + +import java.util.List; + +@Root(name="AllAlbums") public class AlbumResponse { - //TODO:fill + + @ElementList(inline=true) + public List albums; + } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java new file mode 100644 index 0000000..07b8a56 --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Album.java @@ -0,0 +1,48 @@ +package com.magnatune.eyecreate.companionformagnatune.model.xml; + +import org.simpleframework.xml.Element; +import org.simpleframework.xml.ElementList; +import org.simpleframework.xml.Root; + +import java.util.Date; +import java.util.List; + +@Root +public class Album { + + @Element + public String artist; + + @Element + public String artistdesc; + + @Element + public String cover_small; + + @Element + public String artistphoto; + + @Element + public String albumname; + + @Element + public int year; + + @Element + public String album_notes; + + @Element + public String mp3genre; + + @Element + public String home; + + @Element + public String magnatunegenres; + + @Element + public Date launchdate; + + @ElementList(inline=true) + public List tracks; +} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Track.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Track.java new file mode 100644 index 0000000..a8a946a --- /dev/null +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/xml/Track.java @@ -0,0 +1,49 @@ +package com.magnatune.eyecreate.companionformagnatune.model.xml; + +import org.simpleframework.xml.Element; +import org.simpleframework.xml.Root; + +@Root +public class Track { + @Element + public String artist; + + @Element + public String artistbio; + + @Element + public String albumname; + + @Element + public String trackname; + + @Element + public int tracknum; + + @Element + public int year; + + @Element + public String mp3genre; + + @Element + public String magnatunegenres; + + @Element + public String license; + + @Element + public long seconds; + + @Element + public String url; + + @Element + public String mp3lofi; + + @Element + public String oggurl; + + @Element + public String isrc; +} -- GitLab