mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-14 06:10:31 +05:30
playlist autoplay nextpage
This commit is contained in:
parent
e534c966bf
commit
d5be2600b0
@ -125,9 +125,12 @@ class PlayerFragment : Fragment() {
|
|||||||
private lateinit var exoPlayer: ExoPlayer
|
private lateinit var exoPlayer: ExoPlayer
|
||||||
private lateinit var segmentData: Segments
|
private lateinit var segmentData: Segments
|
||||||
private var relatedStreamsEnabled = true
|
private var relatedStreamsEnabled = true
|
||||||
|
|
||||||
private var relatedStreams: List<StreamItem>? = arrayListOf()
|
private var relatedStreams: List<StreamItem>? = arrayListOf()
|
||||||
private var nextStreamId: String? = null
|
private var nextStreamId: String? = null
|
||||||
private var playlistStreamIds: MutableList<String> = arrayListOf()
|
private var playlistStreamIds: MutableList<String> = arrayListOf()
|
||||||
|
private var playlistNextPage: String? = null
|
||||||
|
|
||||||
private var isPlayerLocked: Boolean = false
|
private var isPlayerLocked: Boolean = false
|
||||||
|
|
||||||
private lateinit var relDownloadVideo: LinearLayout
|
private lateinit var relDownloadVideo: LinearLayout
|
||||||
@ -482,25 +485,42 @@ class PlayerFragment : Fragment() {
|
|||||||
private fun initAutoPlay() {
|
private fun initAutoPlay() {
|
||||||
// save related streams for autoplay
|
// save related streams for autoplay
|
||||||
if (autoplay) {
|
if (autoplay) {
|
||||||
// save related streams for autoplay
|
// if it's a playlist use the next video
|
||||||
if (playlistId != null) {
|
if (playlistId != null) {
|
||||||
|
lateinit var playlist: Playlist // var for saving the list in
|
||||||
if (playlistStreamIds.isEmpty()) {
|
if (playlistStreamIds.isEmpty()) {
|
||||||
lateinit var playlist: Playlist
|
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
// fetch the playlists videos
|
// fetch the playlists videos
|
||||||
playlist = RetrofitInstance.api.getPlaylist(playlistId!!)
|
playlist = RetrofitInstance.api.getPlaylist(playlistId!!)
|
||||||
playlist.relatedStreams?.forEach { video ->
|
playlist.relatedStreams?.forEach { video ->
|
||||||
playlistStreamIds += video.url?.replace("/watch?v=", "")!!
|
playlistStreamIds += video.url?.replace("/watch?v=", "")!!
|
||||||
}
|
}
|
||||||
// if the playlists contain the video, then save the next video as next stream
|
// restart the function after videos are loaded
|
||||||
if (playlistStreamIds.contains(videoId)) {
|
playlistNextPage = playlist.nextpage
|
||||||
val index = playlistStreamIds.indexOf(videoId)
|
initAutoPlay()
|
||||||
if (index + 1 <= playlistStreamIds.size) {
|
|
||||||
nextStreamId = playlistStreamIds[index + 1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if the playlists contain the video, then save the next video as next stream
|
||||||
|
else if (playlistStreamIds.contains(videoId)) {
|
||||||
|
val index = playlistStreamIds.indexOf(videoId)
|
||||||
|
// check whether there's a next video
|
||||||
|
if (index + 1 <= playlistStreamIds.size) {
|
||||||
|
nextStreamId = playlistStreamIds[index + 1]
|
||||||
|
}
|
||||||
|
// fetch the next page of the playlist if the video isn't contained
|
||||||
|
} else if (playlistNextPage != null) {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
Log.e(TAG, "fetching next autoplay page list")
|
||||||
|
RetrofitInstance.api.getPlaylistNextPage(playlistId!!, playlistNextPage!!)
|
||||||
|
playlist.relatedStreams?.forEach { video ->
|
||||||
|
playlistStreamIds += video.url?.replace("/watch?v=", "")!!
|
||||||
|
}
|
||||||
|
// restart the function after videos are loaded
|
||||||
|
playlistNextPage = playlist.nextpage
|
||||||
|
initAutoPlay()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if it's not a playlist then use the next related video
|
||||||
} else if (relatedStreams != null && relatedStreams!!.isNotEmpty()) {
|
} else if (relatedStreams != null && relatedStreams!!.isNotEmpty()) {
|
||||||
// save next video from related streams for autoplay
|
// save next video from related streams for autoplay
|
||||||
nextStreamId = relatedStreams!![0].url!!.replace("/watch?v=", "")!!
|
nextStreamId = relatedStreams!![0].url!!.replace("/watch?v=", "")!!
|
||||||
@ -514,24 +534,6 @@ class PlayerFragment : Fragment() {
|
|||||||
fetchJsonAndInitPlayer(view!!)
|
fetchJsonAndInitPlayer(view!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fetchNextPage() {
|
|
||||||
fun run() {
|
|
||||||
lifecycleScope.launchWhenCreated {
|
|
||||||
val response = try {
|
|
||||||
RetrofitInstance.api.getPlaylistNextPage(playlistId!!, nextPage!!)
|
|
||||||
} catch (e: IOException) {
|
|
||||||
println(e)
|
|
||||||
Log.e(TAG, "IOException, you might not have internet connection")
|
|
||||||
return@launchWhenCreated
|
|
||||||
} catch (e: HttpException) {
|
|
||||||
Log.e(TAG, "HttpException, unexpected response," + e.response())
|
|
||||||
return@launchWhenCreated
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
run()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setSponsorBlockPrefs() {
|
private fun setSponsorBlockPrefs() {
|
||||||
sponsorBlockPrefs.sponsorBlockEnabled =
|
sponsorBlockPrefs.sponsorBlockEnabled =
|
||||||
PreferenceHelper.getBoolean(requireContext(), "sb_enabled_key", true)
|
PreferenceHelper.getBoolean(requireContext(), "sb_enabled_key", true)
|
||||||
|
Loading…
Reference in New Issue
Block a user