refactor: extract playback timing and subtitle index calculations into separate flows in PlayerViewModel

This commit is contained in:
2026-06-26 11:56:30 +02:00
parent 2e1a2e6ece
commit 82c7a16473
@@ -24,6 +24,7 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import kotlin.time.Duration.Companion.milliseconds
@@ -59,24 +60,36 @@ class PlayerViewModel(
}
}
private val currentSubtitleIndex = combine(
subtitle,
currentPosition,
) { subtitle, currentPosition ->
getCurrentSubtitleIndex(
subtitle = subtitle,
progressMs = currentPosition.inWholeMilliseconds,
)
}
private val playbackTiming = currentPosition.map { currentPosition ->
PlaybackTiming(
positionMs = currentPosition.inWholeMilliseconds,
durationMs = audioPlayer.duration.inWholeMilliseconds,
)
}
val uiState: StateFlow<PlayerUiState> = combine(
recordTitle,
playbackState,
currentPosition,
playbackTiming,
subtitle,
) { recordTitle, playbackState, currentPosition, subtitle ->
currentSubtitleIndex,
) { recordTitle, playbackState, playbackTiming, subtitle, currentSubtitleIndex ->
PlayerUiState(
recordTitle = recordTitle,
playbackState = playbackState,
playbackTiming = PlaybackTiming(
positionMs = currentPosition.inWholeMilliseconds,
durationMs = audioPlayer.duration.inWholeMilliseconds,
),
playbackTiming = playbackTiming,
subtitleLines = subtitle.lines,
currentSubtitleIndex = getCurrentSubtitleIndex(
subtitle = subtitle,
progressMs = currentPosition.inWholeMilliseconds,
),
currentSubtitleIndex = currentSubtitleIndex,
)
}.stateIn(
scope = viewModelScope,