mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
fix: casting full album/playlist working as intended, passing metadata for album artwork in small square #16
This commit is contained in:
parent
4740028a44
commit
cf7feacdc0
2 changed files with 140 additions and 72 deletions
|
|
@ -199,8 +199,19 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
.build()
|
||||
}
|
||||
|
||||
private fun getQueueFromPlayer(player: Player): List<MediaItem> {
|
||||
// Helper function to get all media items from a player's queue.
|
||||
val queue = mutableListOf<MediaItem>()
|
||||
for (i in 0 until player.mediaItemCount) {
|
||||
queue.add(player.getMediaItemAt(i))
|
||||
}
|
||||
return queue
|
||||
}
|
||||
|
||||
private fun setPlayer(oldPlayer: Player?, newPlayer: Player) {
|
||||
// Safely switches the player instance and handles state transfer.
|
||||
if (oldPlayer === newPlayer) return
|
||||
|
||||
oldPlayer?.stop()
|
||||
mediaLibrarySession.player = newPlayer
|
||||
}
|
||||
|
|
@ -211,7 +222,6 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
player.release()
|
||||
mediaLibrarySession.release()
|
||||
automotiveRepository.deleteMetadata()
|
||||
clearListener()
|
||||
}
|
||||
|
||||
private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false)
|
||||
|
|
@ -220,10 +230,34 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this))
|
||||
|
||||
override fun onCastSessionAvailable() {
|
||||
// Get the current queue, item index, and position from the local player.
|
||||
val currentQueue = getQueueFromPlayer(player)
|
||||
val currentIndex = player.currentMediaItemIndex
|
||||
val currentPosition = player.currentPosition
|
||||
val isPlaying = player.playWhenReady
|
||||
|
||||
// Switch the player to the CastPlayer.
|
||||
setPlayer(player, castPlayer)
|
||||
|
||||
// Transfer the entire queue to the CastPlayer and start playback.
|
||||
castPlayer.setMediaItems(currentQueue, currentIndex, currentPosition)
|
||||
castPlayer.playWhenReady = isPlaying
|
||||
castPlayer.prepare()
|
||||
}
|
||||
|
||||
override fun onCastSessionUnavailable() {
|
||||
// Get the current queue, item index, and position from the CastPlayer.
|
||||
val currentQueue = getQueueFromPlayer(castPlayer)
|
||||
val currentIndex = castPlayer.currentMediaItemIndex
|
||||
val currentPosition = castPlayer.currentPosition
|
||||
val isPlaying = castPlayer.playWhenReady
|
||||
|
||||
// Switch the player back to the local ExoPlayer.
|
||||
setPlayer(castPlayer, player)
|
||||
|
||||
// Transfer the entire queue to the local ExoPlayer and start playback.
|
||||
player.setMediaItems(currentQueue, currentIndex, currentPosition)
|
||||
player.playWhenReady = isPlaying
|
||||
player.prepare()
|
||||
}
|
||||
}
|
||||
|
|
@ -199,8 +199,19 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
.build()
|
||||
}
|
||||
|
||||
private fun getQueueFromPlayer(player: Player): List<MediaItem> {
|
||||
// Helper function to get all media items from a player's queue.
|
||||
val queue = mutableListOf<MediaItem>()
|
||||
for (i in 0 until player.mediaItemCount) {
|
||||
queue.add(player.getMediaItemAt(i))
|
||||
}
|
||||
return queue
|
||||
}
|
||||
|
||||
private fun setPlayer(oldPlayer: Player?, newPlayer: Player) {
|
||||
// Safely switches the player instance and handles state transfer.
|
||||
if (oldPlayer === newPlayer) return
|
||||
|
||||
oldPlayer?.stop()
|
||||
mediaLibrarySession.player = newPlayer
|
||||
}
|
||||
|
|
@ -211,7 +222,6 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
player.release()
|
||||
mediaLibrarySession.release()
|
||||
automotiveRepository.deleteMetadata()
|
||||
clearListener()
|
||||
}
|
||||
|
||||
private fun getRenderersFactory() = DownloadUtil.buildRenderersFactory(this, false)
|
||||
|
|
@ -220,10 +230,34 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
|||
DefaultMediaSourceFactory(this).setDataSourceFactory(DownloadUtil.getDataSourceFactory(this))
|
||||
|
||||
override fun onCastSessionAvailable() {
|
||||
// Get the current queue, item index, and position from the local player.
|
||||
val currentQueue = getQueueFromPlayer(player)
|
||||
val currentIndex = player.currentMediaItemIndex
|
||||
val currentPosition = player.currentPosition
|
||||
val isPlaying = player.playWhenReady
|
||||
|
||||
// Switch the player to the CastPlayer.
|
||||
setPlayer(player, castPlayer)
|
||||
|
||||
// Transfer the entire queue to the CastPlayer and start playback.
|
||||
castPlayer.setMediaItems(currentQueue, currentIndex, currentPosition)
|
||||
castPlayer.playWhenReady = isPlaying
|
||||
castPlayer.prepare()
|
||||
}
|
||||
|
||||
override fun onCastSessionUnavailable() {
|
||||
// Get the current queue, item index, and position from the CastPlayer.
|
||||
val currentQueue = getQueueFromPlayer(castPlayer)
|
||||
val currentIndex = castPlayer.currentMediaItemIndex
|
||||
val currentPosition = castPlayer.currentPosition
|
||||
val isPlaying = castPlayer.playWhenReady
|
||||
|
||||
// Switch the player back to the local ExoPlayer.
|
||||
setPlayer(castPlayer, player)
|
||||
|
||||
// Transfer the entire queue to the local ExoPlayer and start playback.
|
||||
player.setMediaItems(currentQueue, currentIndex, currentPosition)
|
||||
player.playWhenReady = isPlaying
|
||||
player.prepare()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue