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 videoDuration: Double? = null,
val votes: Int? = null
)
) {
val segmentStartAndEnd = segment[0] to segment[1]
}

View File

@ -484,8 +484,8 @@ object PlayerHelper {
sponsorBlockConfig: MutableMap<String, SbSkipOptions>
): Long? {
for (segment in segments.filter { it.category != SPONSOR_HIGHLIGHT_CATEGORY }) {
val segmentStart = (segment.segment[0] * 1000f).toLong()
val segmentEnd = (segment.segment[1] * 1000f).toLong()
val (start, end) = segment.segmentStartAndEnd
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
if ((duration - currentPosition).absoluteValue < 500) continue
@ -507,15 +507,12 @@ object PlayerHelper {
return null
}
fun ExoPlayer.isInSegment(
segments: List<Segment>
): Boolean {
for (segment in segments) {
val segmentStart = (segment.segment[0] * 1000f).toLong()
val segmentEnd = (segment.segment[1] * 1000f).toLong()
if (currentPosition in segmentStart..segmentEnd) return true
fun ExoPlayer.isInSegment(segments: List<Segment>): Boolean {
return segments.any {
val (start, end) = it.segmentStartAndEnd
val (segmentStart, segmentEnd) = (start * 1000f).toLong() to (end * 1000f).toLong()
currentPosition in segmentStart..segmentEnd
}
return false
}
/**

View File

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

View File

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