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 2c828955ccad658b7c8390aac2ca886320002b67..7725f4ccca6a0308beb6a6626ca8cde92aa56204 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 @@ -1,6 +1,5 @@ package com.magnatune.eyecreate.companionformagnatune.api; -import com.magnatune.eyecreate.companionformagnatune.model.AlbumResponse; import com.magnatune.eyecreate.companionformagnatune.model.xml.Album; import com.magnatune.eyecreate.companionformagnatune.model.xml.Track; import com.squareup.okhttp.ResponseBody; @@ -10,37 +9,20 @@ import com.thoughtworks.xstream.io.xml.KXml2Driver; import java.io.IOException; import java.io.ObjectInputStream; -import java.io.OptionalDataException; -import java.util.ArrayList; -import java.util.List; import java.util.zip.GZIPInputStream; import retrofit.Converter; -public class MagnatuneAlbumsConverter implements Converter { +public class MagnatuneAlbumsConverter implements Converter { @Override - public AlbumResponse convert(ResponseBody value) throws IOException { + public ObjectInputStream convert(ResponseBody value) throws IOException { GZIPInputStream compressedStream = new GZIPInputStream(value.byteStream()); XStream parser = new XStream(new KXml2Driver()); parser.processAnnotations(Album.class); parser.processAnnotations(Track.class); - parser.processAnnotations(AlbumResponse.class); parser.registerConverter(new DateConverter("yyyy-MM-dd",new String[]{})); parser.ignoreUnknownElements(); ObjectInputStream objectStream = parser.createObjectInputStream(compressedStream); - boolean processingDone = false; - List albums = new ArrayList<>(); - while(!processingDone) { - try { - albums.add((Album) objectStream.readObject()); - } catch(OptionalDataException e) { - processingDone = true; - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - AlbumResponse response = new AlbumResponse(); - response.albums = albums; - return response; + return objectStream; } } diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverterFactory.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverterFactory.java index eeb51bed5bf27a76e5b8c6d8f05d677fc7dcc1f2..1bed89f163427cb2690530564cd7cc7734683c92 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverterFactory.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/api/MagnatuneAlbumsConverterFactory.java @@ -1,8 +1,8 @@ package com.magnatune.eyecreate.companionformagnatune.api; -import com.magnatune.eyecreate.companionformagnatune.model.AlbumResponse; import com.squareup.okhttp.ResponseBody; +import java.io.ObjectInputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -11,7 +11,7 @@ import retrofit.Converter; public class MagnatuneAlbumsConverterFactory extends Converter.Factory { @Override public Converter fromResponseBody(Type type, Annotation[] annotations) { - if(AlbumResponse.class.equals(type)) { + if(ObjectInputStream.class.equals(type)) { return new MagnatuneAlbumsConverter(); } else { 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 1e4d86225a2c2340a9594aa69da4726f2b2f987b..d66a109c5e1e523d872b4816362506c923080ad2 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 @@ -1,13 +1,13 @@ package com.magnatune.eyecreate.companionformagnatune.api; -import com.magnatune.eyecreate.companionformagnatune.model.AlbumResponse; +import java.io.ObjectInputStream; import retrofit.Call; import retrofit.http.GET; public interface data_api { @GET("/info/album_info_xml.gz") - Call getAlbumList(); + 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 deleted file mode 100644 index abeb1053a2c1fdf43db9fdec205bec564b83d5bd..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/AlbumResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.magnatune.eyecreate.companionformagnatune.model; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamImplicit; - -import java.util.List; - -@XStreamAlias("AllAlbums") -public class AlbumResponse { - - @XStreamImplicit(itemFieldName = "Album") - public List albums; - -} diff --git a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java index 84b8dc7f1facd5623c1076b8ba351cabdadf02f1..ecf3cd55943b49fd01926021588ff54469a8974a 100644 --- a/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java +++ b/app/src/main/java/com/magnatune/eyecreate/companionformagnatune/model/MagnatuneDBManager.java @@ -6,8 +6,11 @@ import android.content.SharedPreferences; import android.support.v4.content.LocalBroadcastManager; import com.magnatune.eyecreate.companionformagnatune.MagnatuneCompainionApplication; +import com.thoughtworks.xstream.converters.ConversionException; +import java.io.EOFException; import java.io.IOException; +import java.io.ObjectInputStream; import java.util.Arrays; import java.util.List; @@ -26,8 +29,8 @@ public class MagnatuneDBManager { //Check if DB should update SharedPreferences prefs = MagnatuneCompainionApplication.getApplication().getSharedPreferences(DB_CHECK_PREFS, Context.MODE_PRIVATE); boolean shouldUpdate = false; + String hash = ""; if(prefs.contains(SP_KEY_DB_HASH)) { - String hash = ""; try { hash = MagnatuneCompainionApplication.getDataApi().getUpdateChecksum().execute().body(); } catch (IOException e) { @@ -35,12 +38,11 @@ public class MagnatuneDBManager { } if(!hash.equals(prefs.getString(SP_KEY_DB_HASH,""))) { shouldUpdate = true; - prefs.edit().putString(SP_KEY_DB_HASH,hash).apply(); } } else { try { shouldUpdate = true; - prefs.edit().putString(SP_KEY_DB_HASH,MagnatuneCompainionApplication.getDataApi().getUpdateChecksum().execute().body()).apply(); + hash = MagnatuneCompainionApplication.getDataApi().getUpdateChecksum().execute().body(); } catch (IOException e) { e.printStackTrace(); } @@ -49,14 +51,25 @@ public class MagnatuneDBManager { if(shouldUpdate) { //Update DB try { - Response response = MagnatuneCompainionApplication.getDataApi().getAlbumList().execute(); + Response response = MagnatuneCompainionApplication.getDataApi().getAlbumList().execute(); Realm db = getAlbumDB(); - db.beginTransaction(); - for(com.magnatune.eyecreate.companionformagnatune.model.xml.Album album:response.body().albums) { - db.copyToRealmOrUpdate(xmlAlbumToDBAlbum(album)); + boolean processingDone = false; + while(!processingDone) { + db.beginTransaction(); + try { + db.copyToRealmOrUpdate(xmlAlbumToDBAlbum((com.magnatune.eyecreate.companionformagnatune.model.xml.Album) response.body().readObject())); + } catch(EOFException e) { + processingDone = true; + } catch(ConversionException e) { + e.getMessage(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + db.commitTransaction(); } - db.commitTransaction(); + response.body().close(); db.close(); + prefs.edit().putString(SP_KEY_DB_HASH,hash).apply(); } catch (IOException e) { e.printStackTrace(); } diff --git a/app/src/main/res/layout/listitem_album_card.xml b/app/src/main/res/layout/listitem_album_card.xml index e84153bb48cf388deb57e31cb5026063bdd31c5d..ecd371183d27751ecc7181be15527022897489f8 100644 --- a/app/src/main/res/layout/listitem_album_card.xml +++ b/app/src/main/res/layout/listitem_album_card.xml @@ -1,21 +1,33 @@ - - + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + app:cardCornerRadius="4dp" app:cardElevation="4dp" app:cardUseCompatPadding="true"> - - + android:orientation="vertical" + android:layout_margin="5dp" + android:layout_height="match_parent"> + + + + + - \ No newline at end of file + \ No newline at end of file