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.flatMapLatest
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlin.time.Duration.Companion.milliseconds 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( val uiState: StateFlow<PlayerUiState> = combine(
recordTitle, recordTitle,
playbackState, playbackState,
currentPosition, playbackTiming,
subtitle, subtitle,
) { recordTitle, playbackState, currentPosition, subtitle -> currentSubtitleIndex,
) { recordTitle, playbackState, playbackTiming, subtitle, currentSubtitleIndex ->
PlayerUiState( PlayerUiState(
recordTitle = recordTitle, recordTitle = recordTitle,
playbackState = playbackState, playbackState = playbackState,
playbackTiming = PlaybackTiming( playbackTiming = playbackTiming,
positionMs = currentPosition.inWholeMilliseconds,
durationMs = audioPlayer.duration.inWholeMilliseconds,
),
subtitleLines = subtitle.lines, subtitleLines = subtitle.lines,
currentSubtitleIndex = getCurrentSubtitleIndex( currentSubtitleIndex = currentSubtitleIndex,
subtitle = subtitle,
progressMs = currentPosition.inWholeMilliseconds,
),
) )
}.stateIn( }.stateIn(
scope = viewModelScope, scope = viewModelScope,