refactor: prefer using Duration than milliseconds

This commit is contained in:
2026-07-03 11:17:15 +02:00
parent 16bb6b4c6b
commit beb1973978
8 changed files with 43 additions and 33 deletions
@@ -56,8 +56,8 @@ internal class PlaybackRepositoryImpl(
private val playbackTiming = currentPosition.map { currentPosition ->
PlaybackTiming(
positionMs = currentPosition.inWholeMilliseconds,
durationMs = duration.inWholeMilliseconds,
position = currentPosition,
duration = duration,
)
}
@@ -1,9 +1,9 @@
package fr.ajaury.gwenedeg.player.model
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
data class PlaybackTiming(
val positionMs: Long = 0L,
val durationMs: Long = 0L,
) {
val progress: Float
get() = if (durationMs > 0) (positionMs.toFloat() / durationMs).coerceIn(0f, 1f) else 0f
}
val position: Duration = 0.milliseconds,
val duration: Duration = 0.milliseconds,
)
@@ -1,6 +1,9 @@
package fr.ajaury.gwenedeg.subtitle.data
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
/**
* Parses [LRC](https://en.wikipedia.org/wiki/LRC_(file_format)) subtitle content.
@@ -26,15 +29,15 @@ internal class LrcParser {
.findAll(tags.value)
.mapNotNull { match ->
TimeCodedText(
startTime = match.toMs().milliseconds,
startTime = match.asDuration(),
text = text,
).takeIf { text.isNotBlank() }
}.toList()
}
private fun MatchResult.toMs(): Long {
private fun MatchResult.asDuration(): Duration {
val (minutes, seconds, fraction) = destructured
val fractionMs = if (fraction.length == 2) fraction.toLong() * 10 else fraction.toLong()
return minutes.toLong() * 60_000 + seconds.toLong() * 1_000 + fractionMs
return minutes.toInt().minutes + seconds.toInt().seconds + fractionMs.toInt().milliseconds
}
}