mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +05:30
Merge pull request #6771 from Bnyro/master
refactor: improve SponsorBlock segments handling logic
This commit is contained in:
commit
7d477bf54a
@ -321,7 +321,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
val maybeStreams: Streams? = mediaMetadata.extras?.parcelable(IntentData.streams)
|
||||
maybeStreams?.let {
|
||||
streams = it
|
||||
viewModel.segments = emptyList()
|
||||
viewModel.segments.postValue(emptyList())
|
||||
playVideo()
|
||||
}
|
||||
}
|
||||
@ -330,15 +330,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
super.onPlaylistMetadataChanged(mediaMetadata)
|
||||
|
||||
val segments: List<Segment>? = mediaMetadata.extras?.parcelableList(IntentData.segments)
|
||||
viewModel.segments = segments.orEmpty()
|
||||
|
||||
binding.descriptionLayout.setSegments(viewModel.segments)
|
||||
playerBinding.exoProgress.setSegments(viewModel.segments)
|
||||
playerBinding.sbToggle.isVisible = true
|
||||
viewModel.segments.firstOrNull { it.category == PlayerHelper.SPONSOR_HIGHLIGHT_CATEGORY }
|
||||
?.let {
|
||||
lifecycleScope.launch(Dispatchers.IO) { initializeHighlight(it) }
|
||||
}
|
||||
viewModel.segments.postValue(segments.orEmpty())
|
||||
}
|
||||
|
||||
/**
|
||||
@ -422,6 +414,16 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
binding.player.setCurrentChapterName()
|
||||
}
|
||||
|
||||
viewModel.segments.observe(viewLifecycleOwner) { segments ->
|
||||
binding.descriptionLayout.setSegments(segments)
|
||||
playerBinding.exoProgress.setSegments(segments)
|
||||
playerBinding.sbToggle.isVisible = segments.isNotEmpty()
|
||||
segments.firstOrNull { it.category == PlayerHelper.SPONSOR_HIGHLIGHT_CATEGORY }
|
||||
?.let {
|
||||
lifecycleScope.launch(Dispatchers.IO) { initializeHighlight(it) }
|
||||
}
|
||||
}
|
||||
|
||||
val localDownloadVersion = runBlocking(Dispatchers.IO) {
|
||||
DatabaseHolder.Database.downloadDao().findById(videoId)
|
||||
}
|
||||
@ -915,11 +917,11 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
if (!playerController.isPlaying || !PlayerHelper.sponsorBlockEnabled) return
|
||||
|
||||
handler.postDelayed(this::checkForSegments, 100)
|
||||
if (!PlayerHelper.sponsorBlockEnabled || viewModel.segments.isEmpty()) return
|
||||
if (!PlayerHelper.sponsorBlockEnabled || !viewModel.segments.value.isNullOrEmpty()) return
|
||||
|
||||
playerController.checkForSegments(
|
||||
requireContext(),
|
||||
viewModel.segments,
|
||||
viewModel.segments.value.orEmpty(),
|
||||
viewModel.sponsorBlockConfig,
|
||||
// skipping is done by player service
|
||||
skipAutomaticallyIfEnabled = false
|
||||
@ -935,7 +937,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
|
||||
return
|
||||
}
|
||||
|
||||
if (!playerController.isInSegment(viewModel.segments)) binding.sbSkipBtn.isGone = true
|
||||
if (!playerController.isInSegment(viewModel.segments.value.orEmpty())) binding.sbSkipBtn.isGone = true
|
||||
}
|
||||
|
||||
private fun playVideo() {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.github.libretube.ui.models
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import com.github.libretube.api.obj.Segment
|
||||
@ -9,7 +10,7 @@ import com.github.libretube.helpers.PlayerHelper
|
||||
@UnstableApi
|
||||
class PlayerViewModel : ViewModel() {
|
||||
|
||||
var segments = listOf<Segment>()
|
||||
var segments = MutableLiveData<List<Segment>>()
|
||||
var currentSubtitle = Subtitle(code = PlayerHelper.defaultSubtitleCode)
|
||||
var sponsorBlockConfig = PlayerHelper.getSponsorBlockCategories()
|
||||
|
||||
|
@ -233,7 +233,7 @@ class OnlinePlayerView(
|
||||
val duration = player?.duration?.div(1000) ?: return
|
||||
if (duration < 0) return
|
||||
|
||||
val durationWithoutSegments = duration - playerViewModel?.segments.orEmpty().sumOf {
|
||||
val durationWithoutSegments = duration - playerViewModel?.segments?.value.orEmpty().sumOf {
|
||||
val (start, end) = it.segmentStartAndEnd
|
||||
end.toDouble() - start.toDouble()
|
||||
}.toLong()
|
||||
|
Loading…
x
Reference in New Issue
Block a user