diff --git a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java index 85ceed53..a40b3c97 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java @@ -100,6 +100,33 @@ public class SongRepository { return randomSongsSample; } + public MutableLiveData> getRandomSampleWithGenre(int number, Integer fromYear, Integer toYear, String genre) { + MutableLiveData> randomSongsSample = new MutableLiveData<>(); + + App.getSubsonicClientInstance(false) + .getAlbumSongListClient() + .getRandomSongs(number, fromYear, toYear, genre) + .enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + List songs = new ArrayList<>(); + + if (response.isSuccessful() && response.body() != null && response.body().getSubsonicResponse().getRandomSongs() != null && response.body().getSubsonicResponse().getRandomSongs().getSongs() != null) { + songs.addAll(response.body().getSubsonicResponse().getRandomSongs().getSongs()); + } + + randomSongsSample.setValue(songs); + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + } + }); + + return randomSongsSample; + } + public void scrobble(String id, boolean submission) { App.getSubsonicClientInstance(false) .getMediaAnnotationClient() diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java index d0874a5d..0a799d4e 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListClient.java @@ -34,6 +34,11 @@ public class AlbumSongListClient { return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear); } + public Call getRandomSongs(int size, Integer fromYear, Integer toYear, String genre) { + Log.d(TAG, "getRandomSongs()"); + return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear, genre); + } + public Call getSongsByGenre(String genre, int count, int offset) { Log.d(TAG, "getSongsByGenre()"); return albumSongListService.getSongsByGenre(subsonic.getParams(), genre, count, offset); diff --git a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java index 1ca7267a..e0d8995a 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java +++ b/app/src/main/java/com/cappielloantonio/tempo/subsonic/api/albumsonglist/AlbumSongListService.java @@ -19,6 +19,9 @@ public interface AlbumSongListService { @GET("getRandomSongs") Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear); + @GET("getRandomSongs") + Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear, @Query("genre") String genre); + @GET("getSongsByGenre") Call getSongsByGenre(@QueryMap Map params, @Query("genre") String genre, @Query("count") int count, @Query("offset") int offset); diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java index fe46edae..e0cad181 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java @@ -189,7 +189,7 @@ public class SongListPageFragment extends Fragment implements ClickCallback { bind.songListShuffleImageView.setOnClickListener(v -> { Collections.shuffle(songs); - MediaManager.startQueue(mediaBrowserListenableFuture, songs.subList(0, Math.min(25, songs.size())), 0); + MediaManager.startQueue(mediaBrowserListenableFuture, songs.subList(0, Math.min(500, songs.size())), 0); activity.setBottomSheetInPeek(true); }); } diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java index d2396f61..acd95b1c 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/SongListPageViewModel.java @@ -37,7 +37,7 @@ public class SongListPageViewModel extends AndroidViewModel { public int year = 0; public int maxNumberByYear = 500; - public int maxNumberByGenre = 100; + public int maxNumberByGenre = 500; public SongListPageViewModel(@NonNull Application application) { super(application); @@ -51,7 +51,7 @@ public class SongListPageViewModel extends AndroidViewModel { switch (title) { case Constants.MEDIA_BY_GENRE: - songList = songRepository.getSongsByGenre(genre.getGenre(), 0); + songList = songRepository.getRandomSampleWithGenre(maxNumberByGenre, 0, 3000, genre.getGenre()); break; case Constants.MEDIA_BY_ARTIST: songList = artistRepository.getTopSongs(artist.getName(), 50);