From b33478ebe05c35e76e687bf62afa6de94fd050e9 Mon Sep 17 00:00:00 2001
From: Nicolas Pomepuy <nicolas@videolabs.io>
Date: Mon, 22 May 2023 09:13:13 +0200
Subject: [PATCH] Allow playing a playlist as audio

Fixes #2832
---
 .../org/videolan/vlc/gui/audio/BaseAudioBrowser.kt | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt b/application/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
index f527d5bfb4..f04c665b24 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/audio/BaseAudioBrowser.kt
@@ -44,10 +44,7 @@ import com.google.android.material.tabs.TabLayout
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import org.videolan.medialibrary.interfaces.media.Album
-import org.videolan.medialibrary.interfaces.media.Artist
-import org.videolan.medialibrary.interfaces.media.Genre
-import org.videolan.medialibrary.interfaces.media.MediaWrapper
+import org.videolan.medialibrary.interfaces.media.*
 import org.videolan.medialibrary.media.MediaLibraryItem
 import org.videolan.resources.*
 import org.videolan.tools.*
@@ -392,6 +389,7 @@ abstract class BaseAudioBrowser<T : MedialibraryViewModel> : MediaBrowserFragmen
                 if ((item as? Genre)?.isFavorite == true) flags or CTX_FAV_REMOVE else flags or CTX_FAV_ADD
             }
             MediaLibraryItem.TYPE_PLAYLIST -> {
+                CTX_PLAY_AS_AUDIO or
                 (if (item.tracksCount > 2) CTX_PLAYLIST_ALBUM_FLAGS or CTX_PLAY_SHUFFLE else CTX_PLAYLIST_ALBUM_FLAGS) or if(item.isFavorite) CTX_FAV_REMOVE else CTX_FAV_ADD
             }
             else -> CTX_AUDIO_FLAGS
@@ -418,6 +416,14 @@ abstract class BaseAudioBrowser<T : MedialibraryViewModel> : MediaBrowserFragmen
         when (option) {
             CTX_PLAY -> MediaUtils.playTracks(requireActivity(), media, 0)
             CTX_PLAY_SHUFFLE -> MediaUtils.playTracks(requireActivity(), media, SecureRandom().nextInt(min(media.tracksCount, MEDIALIBRARY_PAGE_SIZE)), true)
+            CTX_PLAY_AS_AUDIO -> lifecycleScope.launch(Dispatchers.IO) {
+                (media as? Playlist)?.tracks?.let { trackArray ->
+                    MediaUtils.openList(requireActivity(), trackArray.map {
+                        it.addFlags(MediaWrapper.MEDIA_FORCE_AUDIO)
+                        it
+                    }.toList(), 0)
+                }
+            }
             CTX_INFORMATION -> showInfoDialog(media)
             CTX_DELETE -> removeItem(media)
             CTX_APPEND -> MediaUtils.appendMedia(requireActivity(), media.tracks)
-- 
GitLab