mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-08-05 19:59:51 +00:00
feat: add genre and featured browsing capabilities to MediaBrowseHelper
This commit is contained in:
parent
d53ac853a5
commit
2aae112cbe
@ -57,6 +57,8 @@ class MediaBrowseHelper(
|
|||||||
companion object {
|
companion object {
|
||||||
const val MEDIA_ID_ROOT = "root"
|
const val MEDIA_ID_ROOT = "root"
|
||||||
const val MEDIA_ID_BROWSE = "browse"
|
const val MEDIA_ID_BROWSE = "browse"
|
||||||
|
const val MEDIA_ID_BROWSE_GENRE = "browse:genre"
|
||||||
|
const val MEDIA_ID_BROWSE_FEATURED = "browse:featured"
|
||||||
const val MEDIA_ID_LIBRARY = "library"
|
const val MEDIA_ID_LIBRARY = "library"
|
||||||
const val MEDIA_ID_SAVED_PLAYLISTS = "library:playlists"
|
const val MEDIA_ID_SAVED_PLAYLISTS = "library:playlists"
|
||||||
const val MEDIA_ID_SAVED_ALBUMS = "library:albums"
|
const val MEDIA_ID_SAVED_ALBUMS = "library:albums"
|
||||||
@ -93,6 +95,11 @@ class MediaBrowseHelper(
|
|||||||
return when {
|
return when {
|
||||||
parentId == MEDIA_ID_ROOT -> buildRootChildren()
|
parentId == MEDIA_ID_ROOT -> buildRootChildren()
|
||||||
parentId == MEDIA_ID_BROWSE -> buildBrowseItems()
|
parentId == MEDIA_ID_BROWSE -> buildBrowseItems()
|
||||||
|
parentId == MEDIA_ID_BROWSE_FEATURED -> buildFeaturedItems()
|
||||||
|
parentId.startsWith("$MEDIA_ID_BROWSE_GENRE:") -> {
|
||||||
|
val genreId = parentId.removePrefix("$MEDIA_ID_BROWSE_GENRE:")
|
||||||
|
buildBrowseGenreItems(genreId)
|
||||||
|
}
|
||||||
parentId == MEDIA_ID_LIBRARY -> buildLibraryRootChildren()
|
parentId == MEDIA_ID_LIBRARY -> buildLibraryRootChildren()
|
||||||
parentId == MEDIA_ID_SAVED_PLAYLISTS -> buildSavedPlaylistsItems()
|
parentId == MEDIA_ID_SAVED_PLAYLISTS -> buildSavedPlaylistsItems()
|
||||||
parentId == MEDIA_ID_SAVED_ALBUMS -> buildSavedAlbumsItems()
|
parentId == MEDIA_ID_SAVED_ALBUMS -> buildSavedAlbumsItems()
|
||||||
@ -214,7 +221,6 @@ class MediaBrowseHelper(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun buildRootChildren(): List<MediaItem> {
|
private fun buildRootChildren(): List<MediaItem> {
|
||||||
val gridExtras = Bundle().apply { putInt(CONTENT_STYLE_BROWSABLE, CONTENT_STYLE_GRID) }
|
|
||||||
return listOf(
|
return listOf(
|
||||||
MediaItem.Builder()
|
MediaItem.Builder()
|
||||||
.setMediaId(MEDIA_ID_BROWSE)
|
.setMediaId(MEDIA_ID_BROWSE)
|
||||||
@ -223,7 +229,6 @@ class MediaBrowseHelper(
|
|||||||
.setTitle("Browse")
|
.setTitle("Browse")
|
||||||
.setIsBrowsable(true)
|
.setIsBrowsable(true)
|
||||||
.setIsPlayable(false)
|
.setIsPlayable(false)
|
||||||
.setExtras(gridExtras)
|
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
.build(),
|
.build(),
|
||||||
@ -251,27 +256,67 @@ class MediaBrowseHelper(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun buildBrowseItems(): List<MediaItem> {
|
private suspend fun buildBrowseItems(): List<MediaItem> {
|
||||||
|
val gridExtras = Bundle().apply { putInt(CONTENT_STYLE_BROWSABLE, CONTENT_STYLE_GRID) }
|
||||||
|
val items = mutableListOf<MediaItem>()
|
||||||
|
|
||||||
|
items.add(
|
||||||
|
MediaItem.Builder()
|
||||||
|
.setMediaId(MEDIA_ID_BROWSE_FEATURED)
|
||||||
|
.setMediaMetadata(
|
||||||
|
MediaMetadata.Builder()
|
||||||
|
.setTitle("Featured")
|
||||||
|
.setIsBrowsable(true)
|
||||||
|
.setIsPlayable(false)
|
||||||
|
.setExtras(gridExtras)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
|
||||||
|
val genres = try {
|
||||||
|
homeScreenRepository.genres() ?: emptyList()
|
||||||
|
} catch (_: Exception) {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
for (genre in genres) {
|
||||||
|
items.add(
|
||||||
|
MediaItem.Builder()
|
||||||
|
.setMediaId("$MEDIA_ID_BROWSE_GENRE:${genre.id}")
|
||||||
|
.setMediaMetadata(
|
||||||
|
MediaMetadata.Builder()
|
||||||
|
.setTitle(genre.name)
|
||||||
|
.setIsBrowsable(true)
|
||||||
|
.setIsPlayable(false)
|
||||||
|
.setExtras(gridExtras)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun buildFeaturedItems(): List<MediaItem> {
|
||||||
val featured = try {
|
val featured = try {
|
||||||
homeScreenRepository.featuredItems() ?: emptyList()
|
homeScreenRepository.featuredItems() ?: emptyList()
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return featured.mapNotNull { item -> browseItemToMediaItem(item) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun buildBrowseGenreItems(genreId: String): List<MediaItem> {
|
||||||
val sections = try {
|
val sections = try {
|
||||||
homeScreenRepository.list()?.items ?: emptyList()
|
homeScreenRepository.list(genreId)?.items ?: emptyList()
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val items = mutableListOf<MediaItem>()
|
val items = mutableListOf<MediaItem>()
|
||||||
|
|
||||||
if (featured.isNotEmpty()) {
|
|
||||||
for (item in featured) {
|
|
||||||
val mediaItem = browseItemToMediaItem(item) ?: continue
|
|
||||||
items.add(mediaItem.withGroupTitle("Featured"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (section in sections) {
|
for (section in sections) {
|
||||||
for (item in section.items) {
|
for (item in section.items) {
|
||||||
val mediaItem = browseItemToMediaItem(
|
val mediaItem = browseItemToMediaItem(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user