Add segment start and end variable.

This commit is contained in:
Isira Seneviratne 2023-07-04 06:47:50 +05:30
parent 7a34445ca9
commit 231fe0d503
4 changed files with 20 additions and 19 deletions

View File

@ -13,4 +13,6 @@ data class Segment(
val userID: String? = null, val userID: String? = null,
val videoDuration: Double? = null, val videoDuration: Double? = null,
val votes: Int? = null val votes: Int? = null
) ) {
val segmentStartAndEnd = segment[0] to segment[1]
}

View File

@ -484,8 +484,8 @@ object PlayerHelper {
sponsorBlockConfig: MutableMap<String, SbSkipOptions> sponsorBlockConfig: MutableMap<String, SbSkipOptions>
): Long? { ): Long? {
for (segment in segments.filter { it.category != SPONSOR_HIGHLIGHT_CATEGORY }) { for (segment in segments.filter { it.category != SPONSOR_HIGHLIGHT_CATEGORY }) {
val segmentStart = (segment.segment[0] * 1000f).toLong() val (start, end) = segment.segmentStartAndEnd
val segmentEnd = (segment.segment[1] * 1000f).toLong() val (segmentStart, segmentEnd) = (start * 1000f).toLong() to (end * 1000f).toLong()
// avoid seeking to the same segment multiple times, e.g. when the SB segment is at the end of the video // avoid seeking to the same segment multiple times, e.g. when the SB segment is at the end of the video
if ((duration - currentPosition).absoluteValue < 500) continue if ((duration - currentPosition).absoluteValue < 500) continue
@ -507,15 +507,12 @@ object PlayerHelper {
return null return null
} }
fun ExoPlayer.isInSegment( fun ExoPlayer.isInSegment(segments: List<Segment>): Boolean {
segments: List<Segment> return segments.any {
): Boolean { val (start, end) = it.segmentStartAndEnd
for (segment in segments) { val (segmentStart, segmentEnd) = (start * 1000f).toLong() to (end * 1000f).toLong()
val segmentStart = (segment.segment[0] * 1000f).toLong() currentPosition in segmentStart..segmentEnd
val segmentEnd = (segment.segment[1] * 1000f).toLong()
if (currentPosition in segmentStart..segmentEnd) return true
} }
return false
} }
/** /**

View File

@ -1104,14 +1104,14 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
private fun updateDisplayedDuration() { private fun updateDisplayedDuration() {
if (exoPlayer.duration < 0 || streams.livestream || _binding == null) return if (exoPlayer.duration < 0 || streams.livestream || _binding == null) return
playerBinding.duration.text = DateUtils.formatElapsedTime( playerBinding.duration.text =
exoPlayer.duration.div(1000) DateUtils.formatElapsedTime(exoPlayer.duration / 1000)
)
if (segments.isEmpty()) return if (segments.isEmpty()) return
val durationWithSb = DateUtils.formatElapsedTime( val durationWithSb = DateUtils.formatElapsedTime(
exoPlayer.duration.div(1000) - segments.sumOf { (exoPlayer.duration / 1000) - segments.sumOf {
it.segment[1] - it.segment[0] val (start, end) = it.segmentStartAndEnd
end - start
}.toInt() }.toInt()
) )
playerBinding.duration.text = playerBinding.duration.text.toString() + " ($durationWithSb)" playerBinding.duration.text = playerBinding.duration.text.toString() + " ($durationWithSb)"
@ -1190,7 +1190,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
val highlightChapter = ChapterSegment( val highlightChapter = ChapterSegment(
title = getString(R.string.chapters_videoHighlight), title = getString(R.string.chapters_videoHighlight),
image = "", image = "",
start = highlight.segment[0].toLong(), start = highlight.segmentStartAndEnd.first.toLong(),
drawable = drawable drawable = drawable
) )
chapters.add(highlightChapter) chapters.add(highlightChapter)

View File

@ -48,11 +48,13 @@ class MarkableTimeBar(
val themeColor = ThemeHelper.getThemeColor(context, R.attr.colorOnSecondary) val themeColor = ThemeHelper.getThemeColor(context, R.attr.colorOnSecondary)
segments.forEach { segments.forEach {
val (start, end) = it.segmentStartAndEnd
canvas.drawRect( canvas.drawRect(
Rect( Rect(
it.segment.first().toLength() + horizontalOffset, start.toLength() + horizontalOffset,
marginY, marginY,
it.segment.last().toLength() + horizontalOffset, end.toLength() + horizontalOffset,
canvas.height - marginY canvas.height - marginY
), ),
Paint().apply { Paint().apply {