From 196cacb452b2decf50bf0e80a2e2079b34ced37f Mon Sep 17 00:00:00 2001
From: Kelvin <kelvin@futo.org>
Date: Wed, 10 Jan 2024 17:53:45 +0100
Subject: [PATCH] Open playlist urls support, indexOutOfBound fix for queue
 when deleting items

---
 .../futo/platformplayer/activities/MainActivity.kt |  8 ++++++++
 .../futo/platformplayer/states/StatePlatform.kt    |  1 +
 .../com/futo/platformplayer/states/StatePlayer.kt  | 14 ++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
index 665b7624..c37f882a 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
@@ -649,6 +649,14 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
             };
             return true;
         }
+        else if(StatePlatform.instance.hasEnabledPlaylistClient(url)) {
+            navigate(_fragMainPlaylist, url);
+            lifecycleScope.launch {
+                delay(100);
+                _fragVideoDetail.minimizeVideoDetail();
+            };
+            return true;
+        }
         return false;
     }
     fun handleContent(file: String, mime: String? = null): Boolean {
diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt
index 5c8f77c5..0fac4f9a 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt
@@ -841,6 +841,7 @@ class StatePlatform {
         return urls;
     }
 
+    fun hasEnabledPlaylistClient(url: String) : Boolean = getEnabledClients().any { it.isPlaylistUrl(url) };
     fun getPlaylistClientOrNull(url: String): IPlatformClient? = getEnabledClients().find { it.isPlaylistUrl(url) }
     fun getPlaylistClient(url: String): IPlatformClient = getEnabledClients().find { it.isPlaylistUrl(url) }
         ?: throw NoPlatformClientException("No client enabled that supports this playlist url (${url})");
diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
index 7d642ac4..0ecb4cb8 100644
--- a/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
+++ b/app/src/main/java/com/futo/platformplayer/states/StatePlayer.kt
@@ -361,6 +361,12 @@ class StatePlayer {
             if (queueShuffle)  {
                 removeFromShuffledQueue(video);
             }
+            if(currentVideo != null) {
+                val newPos = _queue.indexOfFirst { it.url == currentVideo?.url };
+                if(newPos >= 0)
+                    _queuePosition = newPos;
+            }
+
         }
 
         onQueueChanged.emit(shouldSwapCurrentItem);
@@ -407,6 +413,12 @@ class StatePlayer {
             if(_queue.size == 1) {
                 return null;
             }
+            if(_queue.size <= _queuePosition && currentVideo != null) {
+                //Out of sync position
+                val newPos = _queue.indexOfFirst { it.url == currentVideo?.url }
+                if(newPos != -1)
+                    _queuePosition = newPos;
+            }
 
             val shuffledQueue = _queueShuffled;
             val queue = if (queueShuffle && shuffledQueue != null) {
@@ -421,6 +433,8 @@ class StatePlayer {
             }
             //Standard Behavior
             if(_queuePosition - 1 >= 0) {
+                if(queue.size <= _queuePosition)
+                    return null;
                 return queue[_queuePosition - 1];
             }
             //Repeat Behavior (End of queue)
-- 
GitLab