diff --git a/app/build.gradle b/app/build.gradle index 74759849..8a745a1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,6 +84,8 @@ dependencies { implementation 'com.tickaroo.tikxml:core:0.9.0_11-SNAPSHOT' annotationProcessor 'com.tickaroo.tikxml:processor:0.9.0_11-SNAPSHOT' implementation 'com.tickaroo.tikxml:converter-date-rfc3339:0.9.0_11-SNAPSHOT' + implementation 'com.tickaroo.tikxml:converter-htmlescape:0.9.0_11-SNAPSHOT' + // Database debugger via adb // debugImplementation 'com.amitshekhar.android:debug-db:1.0.6' diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/ArtistHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/ArtistHorizontalAdapter.java index 97dabe30..d5453fbe 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/ArtistHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/ArtistHorizontalAdapter.java @@ -54,7 +54,7 @@ public class ArtistHorizontalAdapter extends RecyclerView.Adapter genres; - @Ignore public List albums; - @Ignore public List songs; - @NonNull - @PrimaryKey - @ColumnInfo(name = "id") public String id; - - @ColumnInfo(name = "name") public String name; - - @ColumnInfo(name = "primary") public String primary; - - @ColumnInfo(name = "primary_blurHash") public String primaryBlurHash; - - @ColumnInfo(name = "backdrop") public String backdrop; - - @ColumnInfo(name = "backdrop_blurHash") public String backdropBlurHash; - - public Artist(@NonNull String id, String name, String primary, String primaryBlurHash, String backdrop, String backdropBlurHash) { - this.id = id; - this.name = name; - this.primary = primary; - this.primaryBlurHash = primaryBlurHash; - this.backdrop = backdrop; - this.backdropBlurHash = backdropBlurHash; - } + public int albumCount; public Artist(ArtistID3 artistID3) { this.id = artistID3.getId(); this.name = artistID3.getName(); this.primary = artistID3.getCoverArtId() != null ? artistID3.getCoverArtId() : artistID3.getId(); this.backdrop = artistID3.getCoverArtId(); + this.albumCount = artistID3.getAlbumCount(); } - @Ignore public Artist(String id, String name) { this.id = id; this.name = name; } - @NonNull public String getId() { return id; } @@ -115,6 +91,14 @@ public class Artist implements Parcelable { this.backdropBlurHash = backdropBlurHash; } + public int getAlbumCount() { + return albumCount; + } + + public void setAlbumCount(int albumCount) { + this.albumCount = albumCount; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java index 61db7b05..42856a72 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java @@ -4,6 +4,8 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -23,7 +25,7 @@ public class AlbumSongListClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -65,6 +67,12 @@ public class AlbumSongListClient { return albumSongListService.getStarred2(subsonic.getParams()); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor()) diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/browsing/BrowsingClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/browsing/BrowsingClient.java index 5ca7ee4d..88fe20d2 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/browsing/BrowsingClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/browsing/BrowsingClient.java @@ -4,6 +4,8 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -23,7 +25,7 @@ public class BrowsingClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -115,6 +117,12 @@ public class BrowsingClient { return browsingService.getTopSongs(subsonic.getParams(), id, count); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor()) diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/mediaretrieval/MediaRetrievalClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/mediaretrieval/MediaRetrievalClient.java index 0d24f97f..809a5148 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/mediaretrieval/MediaRetrievalClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/mediaretrieval/MediaRetrievalClient.java @@ -4,6 +4,8 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -23,7 +25,7 @@ public class MediaRetrievalClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -40,6 +42,12 @@ public class MediaRetrievalClient { return mediaRetrievalService.download(subsonic.getParams(), id); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor()) diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistClient.java index 26f6df15..a685217d 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/playlist/PlaylistClient.java @@ -4,6 +4,8 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -23,7 +25,7 @@ public class PlaylistClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -40,6 +42,12 @@ public class PlaylistClient { return playlistService.getPlaylist(subsonic.getParams(), id); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor()) diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/searching/SearchingClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/searching/SearchingClient.java index 199645da..7f9cb030 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/searching/SearchingClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/searching/SearchingClient.java @@ -4,6 +4,8 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -23,7 +25,7 @@ public class SearchingClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -40,6 +42,12 @@ public class SearchingClient { return searchingService.search3(subsonic.getParams(), query); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor()) diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/system/SystemClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/system/SystemClient.java index dca32f03..63ae1630 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/system/SystemClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/system/SystemClient.java @@ -5,6 +5,7 @@ import android.util.Log; import com.cappielloantonio.play.subsonic.Subsonic; import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.tickaroo.tikxml.TikXml; +import com.tickaroo.tikxml.converter.htmlescape.HtmlEscapeStringConverter; import com.tickaroo.tikxml.retrofit.TikXmlConverterFactory; import okhttp3.OkHttpClient; @@ -24,7 +25,7 @@ public class SystemClient { this.retrofit = new Retrofit.Builder() .baseUrl(subsonic.getUrl()) - .addConverterFactory(TikXmlConverterFactory.create()) + .addConverterFactory(TikXmlConverterFactory.create(getParser())) .client(getOkHttpClient()) .build(); @@ -41,6 +42,12 @@ public class SystemClient { return systemService.getLicense(subsonic.getParams()); } + private TikXml getParser() { + return new TikXml.Builder() + .addTypeConverter(String.class, new HtmlEscapeStringConverter()) // HtmlEscapeStringConverter encode / decode html characters. This class ships as optional dependency + .build(); + } + private OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() .addInterceptor(getHttpLoggingInterceptor())