diff --git a/app/src/main/java/com/cappielloantonio/play/model/Download.java b/app/src/main/java/com/cappielloantonio/play/model/Download.java index 28f424ab..f719fa67 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Download.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Download.java @@ -6,6 +6,7 @@ import androidx.room.Entity; import androidx.room.PrimaryKey; import com.cappielloantonio.play.App; +import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.PreferenceUtil; @Entity(tableName = "download") @@ -57,7 +58,7 @@ public class Download { this.albumId = song.getAlbumId(); this.albumName = song.getAlbumName(); this.artistId = song.getArtistId(); - this.artistName = song.getArtistName(); + this.artistName = MusicUtil.normalizedArtistName(song.getArtistName()); this.primary = song.getPrimary(); this.duration = song.getDuration(); this.server = PreferenceUtil.getInstance(App.getInstance()).getServerId(); diff --git a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java index a8fb3596..c7ccabbd 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java @@ -74,6 +74,16 @@ public class MusicUtil { return ""; } + public static String normalizedArtistName(String string) { + if (string != null) { + if(string.toLowerCase().contains(" feat.")) return Pattern.compile(" feat.", Pattern.CASE_INSENSITIVE).split(string)[0].trim(); + else if(string.toLowerCase().contains(" featuring")) return Pattern.compile(" featuring", Pattern.CASE_INSENSITIVE).split(string)[0].trim(); + else return string; + } + + return ""; + } + public static List getReadableStrings(List strings) { List readableStrings = new ArrayList<>(); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java index 83406483..654a4c08 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java @@ -12,13 +12,14 @@ import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Download; import com.cappielloantonio.play.model.Song; -import com.cappielloantonio.play.repository.AlbumRepository; -import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.DownloadRepository; -import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.util.MappingUtil; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; public class DownloadViewModel extends AndroidViewModel { private static final String TAG = "HomeViewModel"; @@ -36,7 +37,15 @@ public class DownloadViewModel extends AndroidViewModel { } public LiveData> getDownloadedArtists(LifecycleOwner owner, int size) { - downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedArtistSample.postValue(MappingUtil.mapDownloadToArtist(downloads))); + downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> { + List unique = downloads + .stream() + .collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Download::getArtistName))), ArrayList::new) + ); + + downloadedArtistSample.postValue(MappingUtil.mapDownloadToArtist(unique)); + }); return downloadedArtistSample; }