diff --git a/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt b/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt index 38ad00f..75b583e 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt @@ -37,6 +37,7 @@ import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import net.newpipe.newplayer.playerInternals.PlaylistItem @@ -79,6 +80,8 @@ interface NewPlayer { val playlist: StateFlow> val currentlyPlaying: StateFlow + val currentChapters: StateFlow> + // callbacks val errorFlow: SharedFlow @@ -201,6 +204,9 @@ class NewPlayerImpl( private val mutableCurrentlyPlaying = MutableStateFlow(null) override val currentlyPlaying: StateFlow = mutableCurrentlyPlaying.asStateFlow() + private val mutableCurrentChapter = MutableStateFlow>(emptyList()) + override val currentChapters: StateFlow> = mutableCurrentChapter.asStateFlow() + init { println("gurken init") internalPlayer.addListener(object : Player.Listener { @@ -246,12 +252,22 @@ class NewPlayerImpl( mutableCurrentlyPlaying.update { item } } } - - } - } }) + + playerScope.launch { + currentlyPlaying.collect { playing -> + playing?.let { + try { + val chapters = repository.getChapters(playing.id) + mutableCurrentChapter.update { chapters } + } catch (e: Exception) { + mutableErrorFlow.emit(e) + } + } + } + } } private fun updatePlaylistItems() { @@ -363,4 +379,5 @@ class NewPlayerImpl( mutableErrorFlow.emit(e) } } + } \ No newline at end of file diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt index d99d54a..387455c 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt @@ -30,6 +30,8 @@ import androidx.core.content.ContextCompat.getSystemService import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope +import androidx.media3.common.MediaItem +import androidx.media3.common.MediaMetadata import androidx.media3.common.Player import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Job @@ -154,10 +156,9 @@ class VideoPlayerViewModelImpl @Inject constructor( } - // TODO: This is not correctly applicable for loading indicator override fun onIsLoadingChanged(isLoading: Boolean) { super.onIsLoadingChanged(isLoading) - if(!player.isPlaying) { + if (!player.isPlaying) { mutableUiState.update { it.copy(isLoading = isLoading) } @@ -205,6 +206,13 @@ class VideoPlayerViewModelImpl @Inject constructor( } } } + viewModelScope.launch { + newPlayer.currentChapters.collect { chapters -> + mutableUiState.update { + it.copy(chapters = chapters) + } + } + } } } @@ -477,7 +485,7 @@ class VideoPlayerViewModelImpl @Inject constructor( } override fun dialogVisible(visible: Boolean) { - if(visible) { + if (visible) { uiVisibilityJob?.cancel() } else { resetHideUiDelayedJob() diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt index 9b30876..1f43244 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt @@ -91,7 +91,6 @@ fun StreamSelectUI( .fillMaxSize(), verticalArrangement = Arrangement.spacedBy(5.dp), ) { - items(uiState.chapters.size) { chapterIndex -> val chapter = uiState.chapters[chapterIndex] ChapterItem( diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/streamselect/ChapterItem.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/streamselect/ChapterItem.kt index 29905b0..626d946 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/streamselect/ChapterItem.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/streamselect/ChapterItem.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding