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 665b7624c7f397c31a470f8a8a8956180a5c9f24..c37f882a787e45fde140d6065a73e0fb4d0d1218 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 5c8f77c511575e9b6d75a7cef70ff23fa864e3a4..0fac4f9a9437efb1402efac8a0023c74e2e6d9d2 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 7d642ac4dde0b26ac849d83a8f27b9f142a24a67..0ecb4cb855db85ef999fdecdb1cff2acf90fe8e7 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)