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 4ae112827d9abe5eef3641f95c9abcdd97f84151..2d5d5813b247f2ab9dfe27d4071b23b32e98cbc5 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 bf6dd855fbb4ae93cb31b57800ff9a417d7399f0..cbc97e10d2cc4e1883c24eac73e62bda610c22a3 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 0000000000000000000000000000000000000000..cfd1dcdfb93b5d318947471cdd4ebe73ff031ecb --- /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 489382d10b08d1f08b06b99681006906589b5185..1e4d86225a2c2340a9594aa69da4726f2b2f987b 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 c454ca7240004c80e8f4e5c4b6a6dc3ca7b77d07..c0f63a0f02819ce6828d4e01bcafc5c14950bda3 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 0000000000000000000000000000000000000000..07b8a56f3470482126ad599426b435b4d4a87170 --- /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 0000000000000000000000000000000000000000..a8a946ac14c7ea1dd1687b4a5174b78d773bee57 --- /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; +}