From 105f2c76c0028e26625a88fe55e4873da0b967c4 Mon Sep 17 00:00:00 2001 From: aliveoutside <53598473+aliveoutside@users.noreply.github.com> Date: Mon, 19 Sep 2022 14:56:56 +0300 Subject: [PATCH] [music] support playlists with more than 1000 tracks --- .../converter/playlist/PlaylistConverter.java | 25 +++++++++++-------- .../MusicNotificationBuilder.java | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/music/converter/playlist/PlaylistConverter.java b/app/src/main/java/ru/vtosters/lite/music/converter/playlist/PlaylistConverter.java index 56e295e16..dbf01e905 100644 --- a/app/src/main/java/ru/vtosters/lite/music/converter/playlist/PlaylistConverter.java +++ b/app/src/main/java/ru/vtosters/lite/music/converter/playlist/PlaylistConverter.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import java8.util.concurrent.CompletableFuture; import okhttp3.Headers; @@ -28,20 +29,24 @@ import ru.vtosters.lite.utils.AndroidUtils; */ public class PlaylistConverter { public static List getPlaylist(Playlist oldPlaylist) { - var accessKey = oldPlaylist.Q; + var tracks = requestPlaylist(0, oldPlaylist.b, oldPlaylist.Q, oldPlaylist.a); + return tracks.stream().filter(track -> !track.D.isEmpty()).collect(Collectors.toList()); + } - String requestUrl = "https://" + getApi() + "/method/execute.getPlaylist" + + private static List requestPlaylist(int offset, int ownerId, String accessKey, int id) { + var audioCount = 1000; + var requestUrl = "https://" + getApi() + "/method/execute.getPlaylist" + "?v=5.119" + "&https=1" + - "&audio_count=1000" + + "&audio_count=" + audioCount + "&need_playlist=1" + "&device_id=" + DeviceIdProvider.d(AndroidUtils.getGlobalContext()) + - "&owner_id=" + oldPlaylist.b + + "&owner_id=" + ownerId + "&access_key=" + accessKey + "&func_v=5" + - "&id=" + oldPlaylist.a + + "&id=" + id + "&lang=" + getLocale() + - "&audio_offset=0" + + "&audio_offset=" + offset + "&need_owner=1" + "&access_token=" + AccountManagerUtils.getUserToken(); @@ -65,11 +70,11 @@ public class PlaylistConverter { var tracks = new ArrayList(); for (int i = 0; i < playlist.length(); i++) { var track = new MusicTrack(playlist.getJSONObject(i)); + tracks.add(track); + } - // add track only if it has a valid url - if (!track.D.isEmpty()) { - tracks.add(track); - } + if (tracks.size() == audioCount) { + tracks.addAll(requestPlaylist(offset + audioCount, ownerId, accessKey, id)); } return tracks; diff --git a/app/src/main/java/ru/vtosters/lite/music/notification/MusicNotificationBuilder.java b/app/src/main/java/ru/vtosters/lite/music/notification/MusicNotificationBuilder.java index 820758810..597db458e 100644 --- a/app/src/main/java/ru/vtosters/lite/music/notification/MusicNotificationBuilder.java +++ b/app/src/main/java/ru/vtosters/lite/music/notification/MusicNotificationBuilder.java @@ -32,7 +32,7 @@ public class MusicNotificationBuilder { public static NotificationCompat.Builder buildPlaylistDownloadNotification(String playlistName, int id) { var notificationBuilder = new NotificationCompat.Builder(AndroidUtils.getGlobalContext(), NotificationChannels.MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle(getString("cached_playlist_loading") + " «" + playlistName + "»") + .setContentTitle(getString("playlist_downloading") + " «" + playlistName + "»") .setContentText(playlistName) .setPriority(NotificationCompat.PRIORITY_LOW) .setCategory(NotificationCompat.CATEGORY_PROGRESS)