Show genres tab for TV & Movies (#16)

Adds a tab to the TV Show & Movie screens which displays the genres in
that library as a grid.

You can select the genre to see the items in that library for the genre.

This PR also adds backend changes for further filtering to implement
#13.
This commit is contained in:
damontecres 2025-10-16 16:49:40 -04:00 committed by GitHub
parent 6a896cf600
commit 0e195c18d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 330 additions and 57 deletions

View file

@ -15,12 +15,14 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.jellyfin.sdk.api.client.ApiClient
import org.jellyfin.sdk.api.client.Response
import org.jellyfin.sdk.api.client.extensions.genresApi
import org.jellyfin.sdk.api.client.extensions.itemsApi
import org.jellyfin.sdk.api.client.extensions.playlistsApi
import org.jellyfin.sdk.api.client.extensions.suggestionsApi
import org.jellyfin.sdk.api.client.extensions.tvShowsApi
import org.jellyfin.sdk.model.api.BaseItemDtoQueryResult
import org.jellyfin.sdk.model.api.request.GetEpisodesRequest
import org.jellyfin.sdk.model.api.request.GetGenresRequest
import org.jellyfin.sdk.model.api.request.GetItemsRequest
import org.jellyfin.sdk.model.api.request.GetNextUpRequest
import org.jellyfin.sdk.model.api.request.GetPlaylistItemsRequest
@ -292,3 +294,22 @@ val GetPlaylistItemsRequestHandler =
request: GetPlaylistItemsRequest,
): Response<BaseItemDtoQueryResult> = api.playlistsApi.getPlaylistItems(request)
}
val GetGenresRequestHandler =
object : RequestHandler<GetGenresRequest> {
override fun prepare(
request: GetGenresRequest,
startIndex: Int,
limit: Int,
enableTotalRecordCount: Boolean,
): GetGenresRequest =
request.copy(
startIndex = startIndex,
limit = limit,
)
override suspend fun execute(
api: ApiClient,
request: GetGenresRequest,
): Response<BaseItemDtoQueryResult> = api.genresApi.getGenres(request)
}