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