get chapter infor from NewPlayer
This commit is contained in:
parent
9f1c06928a
commit
a2e9675906
|
@ -37,6 +37,7 @@ import kotlinx.coroutines.flow.SharedFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asSharedFlow
|
import kotlinx.coroutines.flow.asSharedFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import net.newpipe.newplayer.playerInternals.PlaylistItem
|
import net.newpipe.newplayer.playerInternals.PlaylistItem
|
||||||
|
@ -79,6 +80,8 @@ interface NewPlayer {
|
||||||
val playlist: StateFlow<List<PlaylistItem>>
|
val playlist: StateFlow<List<PlaylistItem>>
|
||||||
val currentlyPlaying: StateFlow<PlaylistItem?>
|
val currentlyPlaying: StateFlow<PlaylistItem?>
|
||||||
|
|
||||||
|
val currentChapters: StateFlow<List<Chapter>>
|
||||||
|
|
||||||
// callbacks
|
// callbacks
|
||||||
|
|
||||||
val errorFlow: SharedFlow<Exception>
|
val errorFlow: SharedFlow<Exception>
|
||||||
|
@ -201,6 +204,9 @@ class NewPlayerImpl(
|
||||||
private val mutableCurrentlyPlaying = MutableStateFlow<PlaylistItem?>(null)
|
private val mutableCurrentlyPlaying = MutableStateFlow<PlaylistItem?>(null)
|
||||||
override val currentlyPlaying: StateFlow<PlaylistItem?> = mutableCurrentlyPlaying.asStateFlow()
|
override val currentlyPlaying: StateFlow<PlaylistItem?> = mutableCurrentlyPlaying.asStateFlow()
|
||||||
|
|
||||||
|
private val mutableCurrentChapter = MutableStateFlow<List<Chapter>>(emptyList())
|
||||||
|
override val currentChapters: StateFlow<List<Chapter>> = mutableCurrentChapter.asStateFlow()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
println("gurken init")
|
println("gurken init")
|
||||||
internalPlayer.addListener(object : Player.Listener {
|
internalPlayer.addListener(object : Player.Listener {
|
||||||
|
@ -246,12 +252,22 @@ class NewPlayerImpl(
|
||||||
mutableCurrentlyPlaying.update { item }
|
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() {
|
private fun updatePlaylistItems() {
|
||||||
|
@ -363,4 +379,5 @@ class NewPlayerImpl(
|
||||||
mutableErrorFlow.emit(e)
|
mutableErrorFlow.emit(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -30,6 +30,8 @@ import androidx.core.content.ContextCompat.getSystemService
|
||||||
import androidx.lifecycle.AndroidViewModel
|
import androidx.lifecycle.AndroidViewModel
|
||||||
import androidx.lifecycle.SavedStateHandle
|
import androidx.lifecycle.SavedStateHandle
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import androidx.media3.common.MediaItem
|
||||||
|
import androidx.media3.common.MediaMetadata
|
||||||
import androidx.media3.common.Player
|
import androidx.media3.common.Player
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Job
|
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) {
|
override fun onIsLoadingChanged(isLoading: Boolean) {
|
||||||
super.onIsLoadingChanged(isLoading)
|
super.onIsLoadingChanged(isLoading)
|
||||||
if(!player.isPlaying) {
|
if (!player.isPlaying) {
|
||||||
mutableUiState.update {
|
mutableUiState.update {
|
||||||
it.copy(isLoading = isLoading)
|
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) {
|
override fun dialogVisible(visible: Boolean) {
|
||||||
if(visible) {
|
if (visible) {
|
||||||
uiVisibilityJob?.cancel()
|
uiVisibilityJob?.cancel()
|
||||||
} else {
|
} else {
|
||||||
resetHideUiDelayedJob()
|
resetHideUiDelayedJob()
|
||||||
|
|
|
@ -91,7 +91,6 @@ fun StreamSelectUI(
|
||||||
.fillMaxSize(),
|
.fillMaxSize(),
|
||||||
verticalArrangement = Arrangement.spacedBy(5.dp),
|
verticalArrangement = Arrangement.spacedBy(5.dp),
|
||||||
) {
|
) {
|
||||||
|
|
||||||
items(uiState.chapters.size) { chapterIndex ->
|
items(uiState.chapters.size) { chapterIndex ->
|
||||||
val chapter = uiState.chapters[chapterIndex]
|
val chapter = uiState.chapters[chapterIndex]
|
||||||
ChapterItem(
|
ChapterItem(
|
||||||
|
|
|
@ -25,6 +25,7 @@ import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
|
Loading…
Reference in New Issue