From 7ad2e1da1d00641ab0aa1762254849ebb3b36399 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Mon, 2 Aug 2021 09:15:04 +0200 Subject: [PATCH] Map SimilarArtist models and show them in artist's page --- .../cappielloantonio/play/model/Artist.java | 11 +++- .../play/subsonic/models/ArtistInfo2.java | 8 +-- .../subsonic/models/SimilarArtistID3.java | 51 +++++++++++++++++++ .../play/ui/fragment/ArtistPageFragment.java | 3 +- .../play/util/MappingUtil.java | 11 ++++ 5 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/play/subsonic/models/SimilarArtistID3.java diff --git a/app/src/main/java/com/cappielloantonio/play/model/Artist.java b/app/src/main/java/com/cappielloantonio/play/model/Artist.java index 8c9e2495..b84a0e17 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Artist.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Artist.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import com.cappielloantonio.play.subsonic.models.ArtistID3; import com.cappielloantonio.play.subsonic.models.ArtistInfo2; import com.cappielloantonio.play.subsonic.models.ArtistWithAlbumsID3; +import com.cappielloantonio.play.subsonic.models.SimilarArtistID3; import com.cappielloantonio.play.util.MappingUtil; import java.util.ArrayList; @@ -53,8 +54,16 @@ public class Artist implements Parcelable { this.albums = MappingUtil.mapAlbum(artistWithAlbumsID3.getAlbums()); } + public Artist(SimilarArtistID3 similarArtistID3) { + this.id = similarArtistID3.getId(); + this.name = similarArtistID3.getName(); + this.primary = similarArtistID3.getCoverArtId(); + this.backdrop = similarArtistID3.getCoverArtId(); + this.albumCount = similarArtistID3.getAlbumCount(); + } + public Artist(ArtistInfo2 artistInfo2) { - this.similarArtists = MappingUtil.mapArtist(artistInfo2.getSimilarArtists()); + this.similarArtists = MappingUtil.mapSimilarArtist(artistInfo2.getSimilarArtists()); this.bio = artistInfo2.getBiography(); } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/ArtistInfo2.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/ArtistInfo2.java index f9e73557..b7f88ef8 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/models/ArtistInfo2.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/ArtistInfo2.java @@ -9,17 +9,17 @@ import java.util.List; @Xml public class ArtistInfo2 extends ArtistInfoBase { - @Element(name = "similarArtist", typesByElement = @ElementNameMatcher(type = ArtistID3.class)) - protected List similarArtists; + @Element(name = "similarArtist") + protected List similarArtists; - public List getSimilarArtists() { + public List getSimilarArtists() { if (similarArtists == null) { similarArtists = new ArrayList<>(); } return this.similarArtists; } - public void setSimilarArtists(List similarArtists) { + public void setSimilarArtists(List similarArtists) { this.similarArtists = similarArtists; } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/SimilarArtistID3.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SimilarArtistID3.java new file mode 100644 index 00000000..2939ceb4 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SimilarArtistID3.java @@ -0,0 +1,51 @@ +package com.cappielloantonio.play.subsonic.models; + +import com.tickaroo.tikxml.annotation.Attribute; +import com.tickaroo.tikxml.annotation.Xml; +import com.tickaroo.tikxml.converters.date.rfc3339.DateRfc3339TypeConverter; + +import java.util.Date; + +@Xml(name = "similarArtist") +public class SimilarArtistID3 { + @Attribute + protected String id; + @Attribute + protected String name; + @Attribute(name = "coverArt") + protected String coverArtId; + @Attribute + protected int albumCount; + + public String getId() { + return id; + } + + public void setId(String value) { + this.id = value; + } + + public String getName() { + return name; + } + + public void setName(String value) { + this.name = value; + } + + public String getCoverArtId() { + return coverArtId; + } + + public void setCoverArtId(String value) { + this.coverArtId = value; + } + + public int getAlbumCount() { + return albumCount; + } + + public void setAlbumCount(int value) { + this.albumCount = value; + } +} diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java index 13b27df0..ce6560e9 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java @@ -185,8 +185,7 @@ public class ArtistPageFragment extends Fragment { artistSimilarAdapter = new ArtistSimilarAdapter(requireContext()); bind.similarArtistsRecyclerView.setAdapter(artistSimilarAdapter); artistPageViewModel.getArtistInfo(artistPageViewModel.getArtist().getId()).observe(requireActivity(), artist -> { - if (bind != null) - bind.similarArtistSector.setVisibility(!artist.getSimilarArtists().isEmpty() ? View.VISIBLE : View.GONE); + if (bind != null) bind.similarArtistSector.setVisibility(!artist.getSimilarArtists().isEmpty() ? View.VISIBLE : View.GONE); artistSimilarAdapter.setItems(artist.getSimilarArtists()); }); } diff --git a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java index 77c21022..1ec4ad46 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -13,6 +13,7 @@ import com.cappielloantonio.play.subsonic.models.ArtistInfo2; import com.cappielloantonio.play.subsonic.models.ArtistWithAlbumsID3; import com.cappielloantonio.play.subsonic.models.Child; import com.cappielloantonio.play.subsonic.models.Genre; +import com.cappielloantonio.play.subsonic.models.SimilarArtistID3; import java.util.ArrayList; import java.util.List; @@ -64,6 +65,16 @@ public class MappingUtil { return new Artist(artistWithAlbumsID3); } + public static ArrayList mapSimilarArtist(List similarArtistID3s) { + ArrayList artists = new ArrayList(); + + for (SimilarArtistID3 similarArtistID3 : similarArtistID3s) { + artists.add(new Artist(similarArtistID3)); + } + + return artists; + } + public static ArrayList mapQueue(List queueList) { ArrayList songs = new ArrayList();