diff --git a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt index 77b1aa6..a2bb652 100644 --- a/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt +++ b/shared/src/commonMain/kotlin/fr/ajaury/gwenedeg/player/ui/PlayerScreen.kt @@ -41,6 +41,8 @@ fun PlayerScreen( val uiState by viewModel.uiState.collectAsStateWithLifecycle() DisposableEffect(Unit) { + viewModel.loadRecord() + onDispose { viewModel.stop() } 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 48234da..2f97060 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 @@ -28,8 +28,6 @@ class PlayerViewModel( ) : ViewModel() { private val record = MutableStateFlow(null) - private var recordLoaded = false - val uiState: StateFlow = combine( record, playbackRepository.playbackState, @@ -45,34 +43,34 @@ class PlayerViewModel( subtitleLines = subtitle.lines, currentSubtitleIndex = currentSubtitleIndex, ) - }.onStart { loadRecord() } - .stateIn( - scope = viewModelScope, - started = SharingStarted.WhileSubscribed(5.seconds), - initialValue = PlayerUiState(), - ) + }.stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5.seconds), + initialValue = PlayerUiState(), + ) init { audioSessionManager.activate() } - private fun loadRecord() { - logger.debug("Loading record $recordId") - if (recordLoaded) { - logger.debug("Record $recordId already loaded") - return - } - recordLoaded = true - + fun loadRecord() { 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) if (loadedRecord == null) { logger.error(message = "Record not found: $recordId") return@launch } - record.value = loadedRecord playbackRepository.load(record = loadedRecord) + record.value = loadedRecord } }