Reimplemented a basic track download functionality for playlist

This commit is contained in:
CappielloAntonio 2022-01-01 22:34:42 +01:00
parent dee845ebff
commit bc5669c6ce
2 changed files with 33 additions and 6 deletions

View file

@ -26,6 +26,8 @@ import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.DownloadUtil;
import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.viewmodel.PlaylistPageViewModel; import com.cappielloantonio.play.viewmodel.PlaylistPageViewModel;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -104,7 +106,13 @@ public class PlaylistPageFragment extends Fragment {
if (item.getItemId() == R.id.action_download_playlist) { if (item.getItemId() == R.id.action_download_playlist) {
playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> { playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
if (isVisible() && getActivity() != null) { if (isVisible() && getActivity() != null) {
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName()); DownloadUtil.getDownloadTracker(requireContext()).download(
MappingUtil.markPlaylistMediaItems(
MappingUtil.mapMediaItems(requireContext(), songs, false),
playlistPageViewModel.getPlaylist().getId(),
playlistPageViewModel.getPlaylist().getName()
)
);
} }
}); });
return true; return true;

View file

@ -197,7 +197,7 @@ public class MappingUtil {
return genres; return genres;
} }
public static MediaItem mapMediaItem(Context context, Song song, boolean isForStreaming) { public static MediaItem mapMediaItem(Context context, Song song, boolean stream) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("id", song.getId()); bundle.putString("id", song.getId());
bundle.putString("albumId", song.getAlbumId()); bundle.putString("albumId", song.getAlbumId());
@ -207,7 +207,7 @@ public class MappingUtil {
.setMediaId(song.getId()) .setMediaId(song.getId())
.setMediaMetadata( .setMediaMetadata(
new MediaMetadata.Builder() new MediaMetadata.Builder()
.setMediaUri(isForStreaming ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) .setMediaUri(stream ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song))
.setTitle(MusicUtil.getReadableString(song.getTitle())) .setTitle(MusicUtil.getReadableString(song.getTitle()))
.setTrackNumber(song.getTrackNumber()) .setTrackNumber(song.getTrackNumber())
.setDiscNumber(song.getDiscNumber()) .setDiscNumber(song.getDiscNumber())
@ -217,17 +217,36 @@ public class MappingUtil {
.setExtras(bundle) .setExtras(bundle)
.build() .build()
) )
.setUri(isForStreaming ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) .setUri(stream ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song))
.build(); .build();
} }
public static ArrayList<MediaItem> mapMediaItems(Context context, List<Song> songs, boolean isForStreaming) { public static ArrayList<MediaItem> mapMediaItems(Context context, List<Song> songs, boolean stream) {
ArrayList<MediaItem> mediaItems = new ArrayList(); ArrayList<MediaItem> mediaItems = new ArrayList();
for (Song song : songs) { for (Song song : songs) {
mediaItems.add(mapMediaItem(context, song, isForStreaming)); mediaItems.add(mapMediaItem(context, song, stream));
} }
return mediaItems; return mediaItems;
} }
public static MediaItem markPlaylistMediaItem(MediaItem mediaItem, String playlistId, String playlistName) {
if (mediaItem.mediaMetadata.extras != null) {
mediaItem.mediaMetadata.extras.putString("playlistId", playlistId);
mediaItem.mediaMetadata.extras.putString("playlistName", playlistName);
}
return mediaItem;
}
public static ArrayList<MediaItem> markPlaylistMediaItems(ArrayList<MediaItem> mediaItems, String playlistId, String playlistName) {
ArrayList<MediaItem> toReturn = new ArrayList();
for(MediaItem mediaItem: mediaItems) {
toReturn.add(markPlaylistMediaItem(mediaItem, playlistId, playlistName));
}
return toReturn;
}
} }