mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 23:51:21 +02:00
Fix clicking genre cards on home page (#953)
## Description Fixes clicking on a genre card added to the home page ### Related issues Fixes #952 ### Testing Emulator ## Screenshots N/A ## AI or LLM usage None
This commit is contained in:
parent
e8c9b4e208
commit
a51d9e9c65
4 changed files with 78 additions and 28 deletions
|
|
@ -25,6 +25,7 @@ import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
import org.jellyfin.sdk.model.api.BaseItemKind
|
import org.jellyfin.sdk.model.api.BaseItemKind
|
||||||
import org.jellyfin.sdk.model.extensions.ticks
|
import org.jellyfin.sdk.model.extensions.ticks
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import java.util.UUID
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|
@ -33,6 +34,7 @@ data class BaseItem(
|
||||||
val data: BaseItemDto,
|
val data: BaseItemDto,
|
||||||
val useSeriesForPrimary: Boolean,
|
val useSeriesForPrimary: Boolean,
|
||||||
val imageUrlOverride: String? = null,
|
val imageUrlOverride: String? = null,
|
||||||
|
val destinationOverride: Destination? = null,
|
||||||
) : CardGridItem {
|
) : CardGridItem {
|
||||||
val id get() = data.id
|
val id get() = data.id
|
||||||
|
|
||||||
|
|
@ -166,6 +168,7 @@ data class BaseItem(
|
||||||
}?.toIntOrNull()
|
}?.toIntOrNull()
|
||||||
|
|
||||||
fun destination(index: Int? = null): Destination {
|
fun destination(index: Int? = null): Destination {
|
||||||
|
if (destinationOverride != null) return destinationOverride
|
||||||
val result =
|
val result =
|
||||||
// Redirect episodes & seasons to their series if possible
|
// Redirect episodes & seasons to their series if possible
|
||||||
when (type) {
|
when (type) {
|
||||||
|
|
@ -234,3 +237,28 @@ data class BaseItemUi(
|
||||||
val episodeUnplayedCornerText: String?,
|
val episodeUnplayedCornerText: String?,
|
||||||
val quickDetails: AnnotatedString,
|
val quickDetails: AnnotatedString,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun createGenreDestination(
|
||||||
|
genreId: UUID,
|
||||||
|
genreName: String,
|
||||||
|
parentId: UUID,
|
||||||
|
parentName: String?,
|
||||||
|
includeItemTypes: List<BaseItemKind>?,
|
||||||
|
) = Destination.FilteredCollection(
|
||||||
|
itemId = parentId,
|
||||||
|
filter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
nameOverride =
|
||||||
|
listOfNotNull(
|
||||||
|
genreName,
|
||||||
|
parentName,
|
||||||
|
).joinToString(" "),
|
||||||
|
filter =
|
||||||
|
GetItemsFilter(
|
||||||
|
genres = listOf(genreId),
|
||||||
|
includeItemTypes = includeItemTypes,
|
||||||
|
),
|
||||||
|
useSavedLibraryDisplayInfo = false,
|
||||||
|
),
|
||||||
|
recursive = true,
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.github.damontecres.wholphin.data.model.BaseItem
|
||||||
import com.github.damontecres.wholphin.data.model.HomePageSettings
|
import com.github.damontecres.wholphin.data.model.HomePageSettings
|
||||||
import com.github.damontecres.wholphin.data.model.HomeRowConfig
|
import com.github.damontecres.wholphin.data.model.HomeRowConfig
|
||||||
import com.github.damontecres.wholphin.data.model.SUPPORTED_HOME_PAGE_SETTINGS_VERSION
|
import com.github.damontecres.wholphin.data.model.SUPPORTED_HOME_PAGE_SETTINGS_VERSION
|
||||||
|
import com.github.damontecres.wholphin.data.model.createGenreDestination
|
||||||
import com.github.damontecres.wholphin.preferences.DefaultUserConfiguration
|
import com.github.damontecres.wholphin.preferences.DefaultUserConfiguration
|
||||||
import com.github.damontecres.wholphin.preferences.HomePagePreferences
|
import com.github.damontecres.wholphin.preferences.HomePagePreferences
|
||||||
import com.github.damontecres.wholphin.ui.DefaultItemFields
|
import com.github.damontecres.wholphin.ui.DefaultItemFields
|
||||||
|
|
@ -14,6 +15,7 @@ import com.github.damontecres.wholphin.ui.SlimItemFields
|
||||||
import com.github.damontecres.wholphin.ui.components.getGenreImageMap
|
import com.github.damontecres.wholphin.ui.components.getGenreImageMap
|
||||||
import com.github.damontecres.wholphin.ui.main.settings.Library
|
import com.github.damontecres.wholphin.ui.main.settings.Library
|
||||||
import com.github.damontecres.wholphin.ui.main.settings.favoriteOptions
|
import com.github.damontecres.wholphin.ui.main.settings.favoriteOptions
|
||||||
|
import com.github.damontecres.wholphin.ui.playback.getTypeFor
|
||||||
import com.github.damontecres.wholphin.ui.toBaseItems
|
import com.github.damontecres.wholphin.ui.toBaseItems
|
||||||
import com.github.damontecres.wholphin.ui.toServerString
|
import com.github.damontecres.wholphin.ui.toServerString
|
||||||
import com.github.damontecres.wholphin.util.GetGenresRequestHandler
|
import com.github.damontecres.wholphin.util.GetGenresRequestHandler
|
||||||
|
|
@ -654,18 +656,33 @@ class HomeSettingsService
|
||||||
includeItemTypes = null,
|
includeItemTypes = null,
|
||||||
cardWidthPx = null,
|
cardWidthPx = null,
|
||||||
)
|
)
|
||||||
val genres =
|
val library =
|
||||||
items.map {
|
|
||||||
BaseItem(it, false, genreImages[it.id])
|
|
||||||
}
|
|
||||||
|
|
||||||
val name =
|
|
||||||
libraries
|
libraries
|
||||||
.firstOrNull { it.itemId == row.parentId }
|
.firstOrNull { it.itemId == row.parentId }
|
||||||
?.name
|
|
||||||
val title =
|
val title =
|
||||||
name?.let { context.getString(R.string.genres_in, it) }
|
library?.name?.let { context.getString(R.string.genres_in, it) }
|
||||||
?: context.getString(R.string.genres)
|
?: context.getString(R.string.genres)
|
||||||
|
val genres =
|
||||||
|
items.map {
|
||||||
|
BaseItem(
|
||||||
|
it,
|
||||||
|
false,
|
||||||
|
genreImages[it.id],
|
||||||
|
createGenreDestination(
|
||||||
|
genreId = it.id,
|
||||||
|
genreName = it.name ?: "",
|
||||||
|
parentId = row.parentId,
|
||||||
|
parentName = library?.name,
|
||||||
|
includeItemTypes =
|
||||||
|
library?.collectionType?.let {
|
||||||
|
getTypeFor(it)?.let {
|
||||||
|
listOf(it)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Success(
|
Success(
|
||||||
title,
|
title,
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,7 @@ import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.github.damontecres.wholphin.data.ServerRepository
|
import com.github.damontecres.wholphin.data.ServerRepository
|
||||||
import com.github.damontecres.wholphin.data.model.BaseItem
|
import com.github.damontecres.wholphin.data.model.BaseItem
|
||||||
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
import com.github.damontecres.wholphin.data.model.createGenreDestination
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
|
||||||
import com.github.damontecres.wholphin.services.ImageUrlService
|
import com.github.damontecres.wholphin.services.ImageUrlService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.ui.OneTimeLaunchedEffect
|
import com.github.damontecres.wholphin.ui.OneTimeLaunchedEffect
|
||||||
|
|
@ -30,7 +29,6 @@ import com.github.damontecres.wholphin.ui.SlimItemFields
|
||||||
import com.github.damontecres.wholphin.ui.cards.GenreCard
|
import com.github.damontecres.wholphin.ui.cards.GenreCard
|
||||||
import com.github.damontecres.wholphin.ui.detail.CardGrid
|
import com.github.damontecres.wholphin.ui.detail.CardGrid
|
||||||
import com.github.damontecres.wholphin.ui.detail.CardGridItem
|
import com.github.damontecres.wholphin.ui.detail.CardGridItem
|
||||||
import com.github.damontecres.wholphin.ui.nav.Destination
|
|
||||||
import com.github.damontecres.wholphin.ui.setValueOnMain
|
import com.github.damontecres.wholphin.ui.setValueOnMain
|
||||||
import com.github.damontecres.wholphin.ui.tryRequestFocus
|
import com.github.damontecres.wholphin.ui.tryRequestFocus
|
||||||
import com.github.damontecres.wholphin.util.GetGenresRequestHandler
|
import com.github.damontecres.wholphin.util.GetGenresRequestHandler
|
||||||
|
|
@ -256,23 +254,12 @@ fun GenreCardGrid(
|
||||||
pager = genres,
|
pager = genres,
|
||||||
onClickItem = { _, genre ->
|
onClickItem = { _, genre ->
|
||||||
viewModel.navigationManager.navigateTo(
|
viewModel.navigationManager.navigateTo(
|
||||||
Destination.FilteredCollection(
|
createGenreDestination(
|
||||||
itemId = itemId,
|
genreId = genre.id,
|
||||||
filter =
|
genreName = genre.name,
|
||||||
CollectionFolderFilter(
|
parentId = itemId,
|
||||||
nameOverride =
|
parentName = item?.title,
|
||||||
listOfNotNull(
|
includeItemTypes = includeItemTypes,
|
||||||
genre.name,
|
|
||||||
item?.title,
|
|
||||||
).joinToString(" "),
|
|
||||||
filter =
|
|
||||||
GetItemsFilter(
|
|
||||||
genres = listOf(genre.id),
|
|
||||||
includeItemTypes = includeItemTypes,
|
|
||||||
),
|
|
||||||
useSavedLibraryDisplayInfo = false,
|
|
||||||
),
|
|
||||||
recursive = true,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.github.damontecres.wholphin.ui.playback
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import com.github.damontecres.wholphin.preferences.PrefContentScale
|
import com.github.damontecres.wholphin.preferences.PrefContentScale
|
||||||
import org.jellyfin.sdk.model.api.BaseItemKind
|
import org.jellyfin.sdk.model.api.BaseItemKind
|
||||||
|
import org.jellyfin.sdk.model.api.CollectionType
|
||||||
|
|
||||||
val playbackSpeedOptions = listOf(".25", ".5", ".75", "1.0", "1.25", "1.5", "1.75", "2.0")
|
val playbackSpeedOptions = listOf(".25", ".5", ".75", "1.0", "1.25", "1.5", "1.75", "2.0")
|
||||||
|
|
||||||
|
|
@ -81,3 +82,20 @@ val BaseItemKind.playable: Boolean
|
||||||
BaseItemKind.YEAR,
|
BaseItemKind.YEAR,
|
||||||
-> false
|
-> false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getTypeFor(collectionType: CollectionType): BaseItemKind? =
|
||||||
|
when (collectionType) {
|
||||||
|
CollectionType.UNKNOWN -> null
|
||||||
|
CollectionType.MOVIES -> BaseItemKind.MOVIE
|
||||||
|
CollectionType.TVSHOWS -> BaseItemKind.SERIES
|
||||||
|
CollectionType.MUSIC -> BaseItemKind.AUDIO
|
||||||
|
CollectionType.MUSICVIDEOS -> BaseItemKind.MUSIC_VIDEO
|
||||||
|
CollectionType.TRAILERS -> BaseItemKind.TRAILER
|
||||||
|
CollectionType.HOMEVIDEOS -> BaseItemKind.VIDEO
|
||||||
|
CollectionType.BOXSETS -> BaseItemKind.BOX_SET
|
||||||
|
CollectionType.BOOKS -> BaseItemKind.BOOK
|
||||||
|
CollectionType.PHOTOS -> BaseItemKind.PHOTO_ALBUM
|
||||||
|
CollectionType.LIVETV -> BaseItemKind.LIVE_TV_CHANNEL
|
||||||
|
CollectionType.PLAYLISTS -> BaseItemKind.PLAYLIST
|
||||||
|
CollectionType.FOLDERS -> BaseItemKind.FOLDER
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue