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.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,
|
||||||
|
|||||||
Reference in New Issue
Block a user