fix: correct record playing when coming back on a record

This commit is contained in:
2026-07-01 15:45:08 +02:00
parent 63cfdd5d3c
commit ff1844e49f
2 changed files with 17 additions and 17 deletions
@@ -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()
} }
@@ -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
} }
} }