refactor: extract playback timing and subtitle index calculations into separate flows in PlayerViewModel
This commit is contained in:
+23
-10
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user