From ac584974c672cb512f2ffcdffb8ddf249ae85962 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Tue, 31 Aug 2021 09:11:42 +0200 Subject: [PATCH] Modified sql queries used to retrieving downloaded artists and albums --- .../play/database/dao/DownloadDao.java | 6 ++++++ .../play/repository/DownloadRepository.java | 8 +++++--- .../viewmodel/ArtistListPageViewModel.java | 2 -- .../play/viewmodel/DownloadViewModel.java | 19 ++++--------------- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/database/dao/DownloadDao.java b/app/src/main/java/com/cappielloantonio/play/database/dao/DownloadDao.java index 4f2d08a0..a7b7757d 100644 --- a/app/src/main/java/com/cappielloantonio/play/database/dao/DownloadDao.java +++ b/app/src/main/java/com/cappielloantonio/play/database/dao/DownloadDao.java @@ -15,6 +15,12 @@ public interface DownloadDao { @Query("SELECT * FROM download WHERE server=:server") LiveData> getAll(String server); + @Query("SELECT * FROM download WHERE server=:server GROUP BY artistName LIMIT :size") + LiveData> getSampleArtist(int size, String server); + + @Query("SELECT * FROM download WHERE server=:server GROUP BY albumName LIMIT :size") + LiveData> getSampleAlbum(int size, String server); + @Query("SELECT * FROM download WHERE server=:server LIMIT :size") LiveData> getSample(int size, String server); diff --git a/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java index 77d1e14f..dd6fe0a6 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java @@ -10,7 +10,6 @@ import com.cappielloantonio.play.database.dao.DownloadDao; import com.cappielloantonio.play.model.Download; import com.cappielloantonio.play.util.PreferenceUtil; -import java.util.ArrayList; import java.util.List; public class DownloadRepository { @@ -27,8 +26,11 @@ public class DownloadRepository { return downloadDao.getAll(PreferenceUtil.getInstance(App.getInstance()).getServerId()); } - public LiveData> getLiveDownloadSample(int size) { - return downloadDao.getSample(size, PreferenceUtil.getInstance(App.getInstance()).getServerId()); + public LiveData> getLiveDownloadSample(int size, boolean isArtist, boolean isAlbum, boolean isTrack) { + if (isArtist) return downloadDao.getSampleArtist(size, PreferenceUtil.getInstance(App.getInstance()).getServerId()); + else if (isAlbum) return downloadDao.getSampleAlbum(size, PreferenceUtil.getInstance(App.getInstance()).getServerId()); + else if (isTrack) return downloadDao.getSample(size, PreferenceUtil.getInstance(App.getInstance()).getServerId()); + else return downloadDao.getSample(size, PreferenceUtil.getInstance(App.getInstance()).getServerId()); } public LiveData> getLiveDownloadFromArtist(String artistId) { diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java index dfa49116..a208a7fb 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java @@ -8,10 +8,8 @@ import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -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.ArtistRepository; import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.util.MappingUtil; 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 654a4c08..53900f86 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java @@ -10,16 +10,11 @@ import androidx.lifecycle.MutableLiveData; 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.DownloadRepository; 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"; @@ -37,25 +32,19 @@ public class DownloadViewModel extends AndroidViewModel { } public LiveData> getDownloadedArtists(LifecycleOwner owner, int size) { - 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)); + downloadRepository.getLiveDownloadSample(size, true, false, false).observe(owner, downloads -> { + downloadedArtistSample.postValue(MappingUtil.mapDownloadToArtist(downloads)); }); return downloadedArtistSample; } public LiveData> getDownloadedAlbums(LifecycleOwner owner, int size) { - downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedAlbumSample.postValue(MappingUtil.mapDownloadToAlbum(downloads))); + downloadRepository.getLiveDownloadSample(size, false, true, false).observe(owner, downloads -> downloadedAlbumSample.postValue(MappingUtil.mapDownloadToAlbum(downloads))); return downloadedAlbumSample; } public LiveData> getDownloadedTracks(LifecycleOwner owner, int size) { - downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedTrackSample.postValue(MappingUtil.mapDownloadToSong(downloads))); + downloadRepository.getLiveDownloadSample(size, false, false, true).observe(owner, downloads -> downloadedTrackSample.postValue(MappingUtil.mapDownloadToSong(downloads))); return downloadedTrackSample; } }