fix: correct record playing when coming back on a record
This commit is contained in:
@@ -41,6 +41,8 @@ fun PlayerScreen(
|
|||||||
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
|
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
DisposableEffect(Unit) {
|
DisposableEffect(Unit) {
|
||||||
|
viewModel.loadRecord()
|
||||||
|
|
||||||
onDispose {
|
onDispose {
|
||||||
viewModel.stop()
|
viewModel.stop()
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-13
@@ -28,8 +28,6 @@ class PlayerViewModel(
|
|||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
private val record = MutableStateFlow<Record?>(null)
|
private val record = MutableStateFlow<Record?>(null)
|
||||||
|
|
||||||
private var recordLoaded = false
|
|
||||||
|
|
||||||
val uiState: StateFlow<PlayerUiState> = combine(
|
val uiState: StateFlow<PlayerUiState> = combine(
|
||||||
record,
|
record,
|
||||||
playbackRepository.playbackState,
|
playbackRepository.playbackState,
|
||||||
@@ -45,8 +43,7 @@ class PlayerViewModel(
|
|||||||
subtitleLines = subtitle.lines,
|
subtitleLines = subtitle.lines,
|
||||||
currentSubtitleIndex = currentSubtitleIndex,
|
currentSubtitleIndex = currentSubtitleIndex,
|
||||||
)
|
)
|
||||||
}.onStart { loadRecord() }
|
}.stateIn(
|
||||||
.stateIn(
|
|
||||||
scope = viewModelScope,
|
scope = viewModelScope,
|
||||||
started = SharingStarted.WhileSubscribed(5.seconds),
|
started = SharingStarted.WhileSubscribed(5.seconds),
|
||||||
initialValue = PlayerUiState(),
|
initialValue = PlayerUiState(),
|
||||||
@@ -56,23 +53,24 @@ class PlayerViewModel(
|
|||||||
audioSessionManager.activate()
|
audioSessionManager.activate()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadRecord() {
|
fun loadRecord() {
|
||||||
logger.debug("Loading record $recordId")
|
|
||||||
if (recordLoaded) {
|
|
||||||
logger.debug("Record $recordId already loaded")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
recordLoaded = true
|
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
|
logger.debug("Loading record $recordId")
|
||||||
|
val alreadyLoadedRecord = record.value
|
||||||
|
if (alreadyLoadedRecord != null) {
|
||||||
|
logger.debug("Record $recordId already loaded")
|
||||||
|
playbackRepository.load(record = alreadyLoadedRecord)
|
||||||
|
return@launch
|
||||||
|
}
|
||||||
|
|
||||||
val loadedRecord = recordRepository.getRecord(id = recordId)
|
val loadedRecord = recordRepository.getRecord(id = recordId)
|
||||||
if (loadedRecord == null) {
|
if (loadedRecord == null) {
|
||||||
logger.error(message = "Record not found: $recordId")
|
logger.error(message = "Record not found: $recordId")
|
||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
|
|
||||||
record.value = loadedRecord
|
|
||||||
playbackRepository.load(record = loadedRecord)
|
playbackRepository.load(record = loadedRecord)
|
||||||
|
record.value = loadedRecord
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user