From 82c7a16473ed1f8b0aaefb9e924fd42b5a0019de Mon Sep 17 00:00:00 2001 From: Antoine Jaury Date: Fri, 26 Jun 2026 11:56:30 +0200 Subject: [PATCH] refactor: extract playback timing and subtitle index calculations into separate flows in PlayerViewModel --- .../player/ui/viewmodel/PlayerViewModel.kt | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt index 0ce4acf..1525e45 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/viewmodel/PlayerViewModel.kt @@ -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 = 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,