Only show music entries in now screensaver now playing

This commit is contained in:
Niels van Velzen
2025-08-24 15:56:47 +02:00
committed by Niels van Velzen
parent d04d3b9388
commit 1a80b8e264
4 changed files with 24 additions and 7 deletions

View File

@@ -52,9 +52,10 @@ class DreamViewModel(
@OptIn(ExperimentalCoroutinesApi::class)
private val _mediaContent = playbackManager.queue.entry
.map { entry ->
entry?.baseItem?.let { baseItem ->
DreamContent.NowPlaying(entry, baseItem)
}
entry
?.takeIf { it.visibleInScreensaver }
?.baseItem
?.let { baseItem -> DreamContent.NowPlaying(entry, baseItem) }
}
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), null)

View File

@@ -0,0 +1,12 @@
package org.jellyfin.androidtv.integration.dream
import org.jellyfin.playback.core.element.ElementKey
import org.jellyfin.playback.core.element.requiredElement
import org.jellyfin.playback.core.queue.QueueEntry
private val visibleInScreensaverKey = ElementKey<Boolean>("visibleInScreensaver")
/**
* Get or set whether this [QueueEntry] is shown in the screensaver.
*/
var QueueEntry.visibleInScreensaver by requiredElement(visibleInScreensaverKey) { false }

View File

@@ -10,6 +10,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.jellyfin.androidtv.integration.dream.visibleInScreensaver
import org.jellyfin.androidtv.ui.playback.AudioEventListener
import org.jellyfin.androidtv.ui.playback.MediaManager
import org.jellyfin.androidtv.ui.playback.PlaybackController
@@ -141,7 +142,7 @@ class RewriteMediaManager(
override fun addToAudioQueue(items: List<BaseItemDto>) {
if (items.isEmpty()) return
playbackManager.queue.addSupplier(BaseItemQueueSupplier(api, items))
playbackManager.queue.addSupplier(BaseItemQueueSupplier(api, items, true))
playbackManager.state.setPlaybackOrder(if (isShuffleMode) PlaybackOrder.SHUFFLE else PlaybackOrder.DEFAULT)
if (playbackManager.state.playState.value != PlayState.PLAYING) playbackManager.state.play()
@@ -161,7 +162,7 @@ class RewriteMediaManager(
playbackManager.queue.clear()
if (filteredItems.isNotEmpty()) {
playbackManager.queue.addSupplier(BaseItemQueueSupplier(api, filteredItems))
playbackManager.queue.addSupplier(BaseItemQueueSupplier(api, filteredItems, true))
playbackManager.state.play()
}
}
@@ -225,13 +226,16 @@ class RewriteMediaManager(
class BaseItemQueueSupplier(
private val api: ApiClient,
val items: List<BaseItemDto>,
val visibleInScreensaver: Boolean,
) : QueueSupplier {
override val size: Int
get() = items.size
override suspend fun getItem(index: Int): QueueEntry? {
val item = items.getOrNull(index) ?: return null
return createBaseItemQueueEntry(api, item)
return createBaseItemQueueEntry(api, item).also {
it.visibleInScreensaver = visibleInScreensaver
}
}
}
}

View File

@@ -39,7 +39,7 @@ class VideoPlayerFragment : Fragment() {
super.onCreate(savedInstanceState)
// Create a queue from the items added to the legacy video queue
val queueSupplier = RewriteMediaManager.BaseItemQueueSupplier(api, videoQueueManager.getCurrentVideoQueue())
val queueSupplier = RewriteMediaManager.BaseItemQueueSupplier(api, videoQueueManager.getCurrentVideoQueue(), false)
Timber.i("Created a queue with ${queueSupplier.items.size} items")
playbackManager.queue.clear()
playbackManager.queue.addSupplier(queueSupplier)