From 8ce0a82506d143a83400b93f51767294961a9d0b Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 15:02:54 +0000 Subject: [PATCH 1/4] getRandomSongs2(): use new subsonic getRandomSongs param 'genre' instead of getSongsByGenre --- .../subsonic/api/albumsonglist/AlbumSongListClient.java | 6 ++++++ .../subsonic/api/albumsonglist/AlbumSongListService.java | 3 +++ 2 files changed, 9 insertions(+) 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..6d512369 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,12 @@ public class AlbumSongListClient { return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear); } + // mr subsonic says we're allowed genres now + public Call getRandomSongs2(int size, Integer fromYear, Integer toYear, String genre) { + Log.d(TAG, "getRandomSongs2()"); + return albumSongListService.getRandomSongs2(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..4c4654e7 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 getRandomSongs2(@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); From 35784216bc180ee9271e44634243df6c1fe08aa1 Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 15:05:05 +0000 Subject: [PATCH 2/4] use getRandomSampleWithGenre() rather than getSongsByGenre() --- .../tempo/repository/SongRepository.java | 27 +++++++++++++++++++ .../viewmodel/SongListPageViewModel.java | 4 +-- 2 files changed, 29 insertions(+), 2 deletions(-) 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..35f28791 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() + .getRandomSongs2(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/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); From efaae35976881170b3f324c9c477fa866f9fa057 Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 15:05:49 +0000 Subject: [PATCH 3/4] uncap mediamanager queue previously at 25 at 500 --- .../tempo/ui/fragment/SongListPageFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); }); } From 1bc93cce0e43ca3c8883e192bfdb77dbe7c0678f Mon Sep 17 00:00:00 2001 From: observer Date: Sun, 9 Nov 2025 22:01:33 +0000 Subject: [PATCH 4/4] use overloads instead of new methods --- .../cappielloantonio/tempo/repository/SongRepository.java | 2 +- .../subsonic/api/albumsonglist/AlbumSongListClient.java | 7 +++---- .../subsonic/api/albumsonglist/AlbumSongListService.java | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) 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 35f28791..a40b3c97 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/SongRepository.java @@ -105,7 +105,7 @@ public class SongRepository { App.getSubsonicClientInstance(false) .getAlbumSongListClient() - .getRandomSongs2(number, fromYear, toYear, genre) + .getRandomSongs(number, fromYear, toYear, genre) .enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { 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 6d512369..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,10 +34,9 @@ public class AlbumSongListClient { return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear); } - // mr subsonic says we're allowed genres now - public Call getRandomSongs2(int size, Integer fromYear, Integer toYear, String genre) { - Log.d(TAG, "getRandomSongs2()"); - return albumSongListService.getRandomSongs2(subsonic.getParams(), size, fromYear, toYear, genre); + 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) { 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 4c4654e7..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 @@ -20,7 +20,7 @@ public interface AlbumSongListService { Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear); @GET("getRandomSongs") - Call getRandomSongs2(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear, @Query("genre") String genre); + 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);