diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/ExtrasItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/ExtrasItem.kt index 8e17ec0d..490103b8 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/ExtrasItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/ExtrasItem.kt @@ -27,6 +27,7 @@ sealed interface ExtrasItem { val subtitle: String? val isPlayed: Boolean val playedPercentage: Double + val aspectRatio: Float? /** * Represents multiple extras of the same type @@ -39,6 +40,7 @@ sealed interface ExtrasItem { override val title: String, override val subtitle: String, override val isPlayed: Boolean, + override val aspectRatio: Float?, ) : ExtrasItem { override val destination: Destination = Destination.ItemGrid( @@ -82,6 +84,8 @@ sealed interface ExtrasItem { get() = item.played override val playedPercentage get() = item.data.userData?.playedPercentage ?: 0.0 + override val aspectRatio: Float? + get() = item.aspectRatio } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/ExtrasService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/ExtrasService.kt index 381032e1..80a4e5ab 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/ExtrasService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/ExtrasService.kt @@ -74,6 +74,7 @@ class ExtrasService items.size, items.size, ) + val itemForImage = items.random() ExtrasItem.Group( parentId = itemId, type = type, @@ -83,9 +84,10 @@ class ExtrasService isPlayed = items.all { it.played }, imageUrl = imageUrlService.getItemImageUrl( - items.random(), + itemForImage, ImageType.PRIMARY, ), + aspectRatio = itemForImage.aspectRatio, ) } else { null diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt index 38888485..bab5fd93 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt @@ -15,7 +15,7 @@ import com.github.damontecres.wholphin.data.model.AudioItem import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.preferences.get import com.github.damontecres.wholphin.services.hilt.DefaultCoroutineScope -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.DetailItemFields import com.github.damontecres.wholphin.ui.gt import com.github.damontecres.wholphin.ui.main.settings.MoveDirection import com.github.damontecres.wholphin.ui.onMain @@ -180,7 +180,7 @@ class MusicService userId = serverRepository.currentUser?.id, itemId = itemId, limit = 200, - fields = DefaultItemFields, + fields = DetailItemFields, ).content.items .map { BaseItem(it, false) } setQueue(items, false) diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/PlaylistCreator.kt b/app/src/main/java/com/github/damontecres/wholphin/services/PlaylistCreator.kt index 22ecb1ca..b1a48753 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/PlaylistCreator.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/PlaylistCreator.kt @@ -8,7 +8,7 @@ import com.github.damontecres.wholphin.data.model.GetItemsFilter import com.github.damontecres.wholphin.data.model.Playlist import com.github.damontecres.wholphin.data.model.PlaylistInfo import com.github.damontecres.wholphin.data.model.PlaylistItem -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.DetailItemFields import com.github.damontecres.wholphin.ui.components.baseItemKinds import com.github.damontecres.wholphin.ui.data.SortAndDirection import com.github.damontecres.wholphin.ui.gt @@ -65,7 +65,7 @@ class PlaylistCreator GetEpisodesRequest( seriesId = seriesId, seasonId = seasonId, - fields = DefaultItemFields, + fields = DetailItemFields, startItemId = episodeId, sortBy = if (shuffled) ItemSortBy.RANDOM else null, limit = Playlist.MAX_SIZE, @@ -94,7 +94,7 @@ class PlaylistCreator GetItemsRequest( userId = serverRepository.currentUser?.id, parentId = playlistId, - fields = DefaultItemFields, + fields = DetailItemFields, startIndex = startIndex, limit = Playlist.MAX_SIZE, sortBy = listOf(sortAndDirection.sort), @@ -135,7 +135,7 @@ class PlaylistCreator excludeItemIds = listOf(item.id), sortBy = sortAndDirection?.let { listOf(sortAndDirection.sort) }, sortOrder = sortAndDirection?.let { listOf(sortAndDirection.direction) }, - fields = DefaultItemFields, + fields = DetailItemFields, startIndex = startIndex, limit = Playlist.MAX_SIZE, excludeLocationTypes = listOf(LocationType.VIRTUAL), @@ -208,7 +208,7 @@ class PlaylistCreator seasonId = item.id, limit = Playlist.MAX_SIZE, sortBy = ItemSortBy.RANDOM, - fields = DefaultItemFields, + fields = DetailItemFields, ).content.items .convertAndAddParts() .let { @@ -236,7 +236,7 @@ class PlaylistCreator seriesId = item.id, limit = Playlist.MAX_SIZE, sortBy = ItemSortBy.RANDOM, - fields = DefaultItemFields, + fields = DetailItemFields, ).content.items .convertAndAddParts() .let { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt index b91e2b45..a37eb2f5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt @@ -45,11 +45,10 @@ object AppColors { const val DEFAULT_PAGE_SIZE = 100 /** - * The default [ItemFields] to fetch for most queries + * The [ItemFields] to fetch for detailed paged and playback */ -val DefaultItemFields = +val DetailItemFields = listOf( - ItemFields.CHILD_COUNT, ItemFields.OVERVIEW, ItemFields.TRICKPLAY, ItemFields.SORT_NAME, @@ -57,6 +56,7 @@ val DefaultItemFields = ItemFields.MEDIA_SOURCES, ItemFields.MEDIA_SOURCE_COUNT, ItemFields.CAN_DELETE, + ItemFields.PRIMARY_IMAGE_ASPECT_RATIO, ) /** @@ -64,13 +64,17 @@ val DefaultItemFields = */ val SlimItemFields = listOf( - ItemFields.CHILD_COUNT, ItemFields.OVERVIEW, ItemFields.SORT_NAME, ItemFields.MEDIA_SOURCE_COUNT, ItemFields.CAN_DELETE, ) +/** + * ItemFields for displaying items in rows such as in a [com.github.damontecres.wholphin.ui.cards.ItemRow] with [com.github.damontecres.wholphin.ui.cards.SeasonCard] + */ +val ItemRowFields = SlimItemFields + ItemFields.PRIMARY_IMAGE_ASPECT_RATIO + val HomeItemFields = listOf( ItemFields.OVERVIEW, @@ -78,13 +82,13 @@ val HomeItemFields = ) val PhotoItemFields = - DefaultItemFields + + DetailItemFields + listOf( ItemFields.WIDTH, ItemFields.HEIGHT, ) -val ProgramItemFields = DefaultItemFields + listOf(ItemFields.CHANNEL_INFO) +val ProgramItemFields = DetailItemFields + listOf(ItemFields.CHANNEL_INFO) object Cards { const val HEIGHT_2X3_DP = 172 diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/ExtrasRow.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/ExtrasRow.kt index 2bf2bac6..238adaf8 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/ExtrasRow.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/ExtrasRow.kt @@ -38,7 +38,7 @@ fun ExtrasRow( unplayedItemCount = -1, playedPercentage = item?.playedPercentage ?: 0.0, numberOfVersions = -1, - aspectRatio = AspectRatios.FOUR_THREE, // TODO + aspectRatio = item?.aspectRatio ?: AspectRatios.WIDE, ) }, modifier = modifier, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderView.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderView.kt index 1a7992d5..f2b17325 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderView.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderView.kt @@ -71,7 +71,6 @@ import com.github.damontecres.wholphin.util.GetArtistsHandler import com.github.damontecres.wholphin.util.GetItemsRequestHandler import com.github.damontecres.wholphin.util.GetPersonsHandler import com.github.damontecres.wholphin.util.LoadingState -import com.github.damontecres.wholphin.util.RequestHandler import com.github.damontecres.wholphin.util.WholphinDispatchers import com.github.damontecres.wholphin.util.successValue import dagger.assisted.Assisted @@ -476,13 +475,16 @@ class CollectionFolderViewModel when (filter.override) { GetItemsFilterOverride.ARTIST -> { GetArtistsHandler.countMatching( - createGetArtistsRequest(filter).copy( - enableImageTypes = null, - fields = null, - nameLessThan = letter.toString(), - limit = 0, - enableTotalRecordCount = true, - ), + api = api, + request = + createGetArtistsRequest(filter).copy( + enableImageTypes = null, + fields = null, + nameLessThan = letter.toString(), + limit = 0, + enableTotalRecordCount = true, + enableUserData = false, + ), ) } @@ -494,30 +496,25 @@ class CollectionFolderViewModel GetItemsFilterOverride.NONE -> { GetItemsRequestHandler.countMatching( - createGetItemsRequest( - sortAndDirection = state.value.sortAndDirection, - recursive = recursive, - filter = filter, - ).copy( - enableImageTypes = null, - fields = null, - nameLessThan = letter.toString(), - limit = 0, - enableTotalRecordCount = true, - ), + api = api, + request = + createGetItemsRequest( + sortAndDirection = state.value.sortAndDirection, + recursive = recursive, + filter = filter, + ).copy( + enableImageTypes = null, + fields = null, + nameLessThan = letter.toString(), + limit = 0, + enableTotalRecordCount = true, + enableUserData = false, + ), ) } } } - /** - * [request] must ask for the count, ie `limit = 0` and `enableTotalRecordCount = true` - */ - private suspend fun RequestHandler.countMatching(request: T): Int { - val result by execute(api, request) - return result.totalRecordCount - } - override fun setWatched( position: Int, itemId: UUID, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/GenreCardGrid.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/GenreCardGrid.kt index 17133f4d..ecc643fa 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/GenreCardGrid.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/GenreCardGrid.kt @@ -149,16 +149,17 @@ class GenreViewModel suspend fun positionOfLetter(letter: Char): Int = withContext(WholphinDispatchers.IO) { - val request = - GetGenresRequest( - parentId = itemId, - nameLessThan = letter.toString(), - limit = 0, - enableTotalRecordCount = true, - includeItemTypes = includeItemTypes, - ) - val result by GetGenresRequestHandler.execute(api, request) - return@withContext result.totalRecordCount + GetGenresRequestHandler.countMatching( + api = api, + request = + GetGenresRequest( + parentId = itemId, + nameLessThan = letter.toString(), + limit = 0, + enableTotalRecordCount = true, + includeItemTypes = includeItemTypes, + ), + ) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/StudioCardGrid.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/StudioCardGrid.kt index 78f2cbd3..9ff0e2c0 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/StudioCardGrid.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/StudioCardGrid.kt @@ -120,17 +120,18 @@ class StudioViewModel suspend fun positionOfLetter(letter: Char): Int = withContext(WholphinDispatchers.IO) { - val request = - GetStudiosRequest( - userId = serverRepository.currentUser?.id, - parentId = itemId, - nameLessThan = letter.toString(), - limit = 0, - enableTotalRecordCount = true, - includeItemTypes = includeItemTypes, - ) - val result by GetStudiosRequestHandler.execute(api, request) - return@withContext result.totalRecordCount + GetStudiosRequestHandler.countMatching( + api = api, + request = + GetStudiosRequest( + userId = serverRepository.currentUser?.id, + parentId = itemId, + nameLessThan = letter.toString(), + limit = 0, + enableTotalRecordCount = true, + includeItemTypes = includeItemTypes, + ), + ) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt index 715104f5..6b1c090d 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt @@ -70,7 +70,7 @@ import com.github.damontecres.wholphin.services.MediaReportService import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.MusicServiceState import com.github.damontecres.wholphin.services.NavigationManager -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.SlimItemFields import com.github.damontecres.wholphin.ui.cards.ItemCardImage import com.github.damontecres.wholphin.ui.components.BasicDialog import com.github.damontecres.wholphin.ui.components.ContextMenu @@ -225,7 +225,7 @@ class PlaylistViewModel GetItemsRequest( parentId = itemId, userId = user.id, - fields = DefaultItemFields, + fields = SlimItemFields, sortBy = listOf(sortAndDirection.sort), sortOrder = listOf(sortAndDirection.direction), ), diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt index 49a7d742..168a392c 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt @@ -26,7 +26,7 @@ import com.github.damontecres.wholphin.services.ThemeSongPlayer import com.github.damontecres.wholphin.services.TrailerService import com.github.damontecres.wholphin.services.UserPreferencesService import com.github.damontecres.wholphin.services.deleteItem -import com.github.damontecres.wholphin.ui.SlimItemFields +import com.github.damontecres.wholphin.ui.ItemRowFields import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.launchIO import com.github.damontecres.wholphin.ui.letNotEmpty @@ -168,7 +168,7 @@ class MovieViewModel GetSimilarItemsRequest( userId = serverRepository.currentUser?.id, itemId = itemId, - fields = SlimItemFields, + fields = ItemRowFields, limit = 25, ), ).content.items diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/AlbumDetailsPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/AlbumDetailsPage.kt index c43b0fe6..a45f45f8 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/AlbumDetailsPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/AlbumDetailsPage.kt @@ -58,7 +58,7 @@ import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.UserPreferencesService import com.github.damontecres.wholphin.ui.AspectRatios -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.ItemRowFields import com.github.damontecres.wholphin.ui.SlimItemFields import com.github.damontecres.wholphin.ui.cards.BannerCardWithTitle import com.github.damontecres.wholphin.ui.cards.ExtrasRow @@ -211,7 +211,7 @@ class AlbumViewModel userId = serverRepository.currentUser?.id, albumIds = listOf(itemId), parentId = null, - fields = DefaultItemFields, + fields = ItemRowFields, recursive = true, includeItemTypes = listOf(BaseItemKind.MUSIC_VIDEO), ) @@ -563,7 +563,7 @@ fun AlbumDetailsPage( item = item, onClick = onClick, onLongClick = onLongClick, - aspectRatio = AspectRatios.WIDE, + aspectRatio = item?.aspectRatio ?: AspectRatios.WIDE, played = item?.played ?: false, playPercent = item?.data?.userData?.playedPercentage ?: 0.0, favorite = item?.favorite ?: false, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/ArtistDetailsPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/ArtistDetailsPage.kt index 2a010148..4fc21483 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/ArtistDetailsPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/ArtistDetailsPage.kt @@ -54,7 +54,7 @@ import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.UserPreferencesService import com.github.damontecres.wholphin.ui.AspectRatios -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.ItemRowFields import com.github.damontecres.wholphin.ui.SlimItemFields import com.github.damontecres.wholphin.ui.cards.BannerCardWithTitle import com.github.damontecres.wholphin.ui.cards.ItemRow @@ -157,7 +157,7 @@ class ArtistViewModel GetItemsRequest( albumArtistIds = listOf(itemId), recursive = true, - fields = DefaultItemFields, + fields = SlimItemFields, includeItemTypes = listOf(BaseItemKind.MUSIC_ALBUM), sortBy = listOf( @@ -174,7 +174,7 @@ class ArtistViewModel GetItemsRequest( contributingArtistIds = listOf(itemId), recursive = true, - fields = DefaultItemFields, + fields = SlimItemFields, includeItemTypes = listOf(BaseItemKind.MUSIC_ALBUM), sortBy = listOf( @@ -208,7 +208,7 @@ class ArtistViewModel val request = GetItemsRequest( artistIds = listOf(itemId), - fields = DefaultItemFields, + fields = SlimItemFields, recursive = true, includeItemTypes = listOf(BaseItemKind.AUDIO), minCommunityRating = 1.0, @@ -266,7 +266,7 @@ class ArtistViewModel userId = serverRepository.currentUser?.id, artistIds = listOf(itemId), parentId = null, - fields = DefaultItemFields, + fields = ItemRowFields, recursive = true, includeItemTypes = listOf(BaseItemKind.MUSIC_VIDEO), ) @@ -671,7 +671,7 @@ fun ArtistDetailsPage( item = item, onClick = onClick, onLongClick = onLongClick, - aspectRatio = AspectRatios.WIDE, + aspectRatio = item?.aspectRatio ?: AspectRatios.WIDE, played = item?.played ?: false, playPercent = item?.data?.userData?.playedPercentage ?: 0.0, favorite = item?.favorite ?: false, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/Utils.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/Utils.kt index 8e170706..26346e7c 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/Utils.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/Utils.kt @@ -2,7 +2,7 @@ package com.github.damontecres.wholphin.ui.detail.music import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.github.damontecres.wholphin.ui.DefaultItemFields +import com.github.damontecres.wholphin.ui.DetailItemFields import com.github.damontecres.wholphin.util.ApiRequestPager import com.github.damontecres.wholphin.util.GetItemsRequestHandler import org.jellyfin.sdk.api.client.ApiClient @@ -19,7 +19,7 @@ suspend fun ViewModel.getPagerForAlbum( GetItemsRequest( parentId = albumId, includeItemTypes = listOf(BaseItemKind.AUDIO), - fields = DefaultItemFields, + fields = DetailItemFields, sortBy = listOf( ItemSortBy.PARENT_INDEX_NUMBER, @@ -39,7 +39,7 @@ suspend fun ViewModel.getPagerForArtist( artistIds = listOf(artistId), recursive = true, includeItemTypes = listOf(BaseItemKind.AUDIO), - fields = DefaultItemFields, + fields = DetailItemFields, // TODO better sort sortBy = listOf( @@ -60,7 +60,7 @@ suspend fun ViewModel.getPagerForPlaylist( parentId = playlistId, recursive = true, includeItemTypes = listOf(BaseItemKind.AUDIO), - fields = DefaultItemFields, + fields = DetailItemFields, sortBy = listOf( ItemSortBy.DEFAULT, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index eda99f49..8d0bb1c5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -27,7 +27,7 @@ import com.github.damontecres.wholphin.services.ThemeSongPlayer import com.github.damontecres.wholphin.services.TrailerService import com.github.damontecres.wholphin.services.UserPreferencesService import com.github.damontecres.wholphin.services.deleteItem -import com.github.damontecres.wholphin.ui.SlimItemFields +import com.github.damontecres.wholphin.ui.ItemRowFields import com.github.damontecres.wholphin.ui.equalsNotNull import com.github.damontecres.wholphin.ui.gt import com.github.damontecres.wholphin.ui.launchDefault @@ -232,7 +232,7 @@ class SeriesViewModel GetSimilarItemsRequest( userId = serverRepository.currentUser?.id, itemId = seriesId, - fields = SlimItemFields, + fields = ItemRowFields, limit = 25, ), ).content.items diff --git a/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt b/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt index a87d79ec..750ba711 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt @@ -131,6 +131,19 @@ sealed interface RequestHandler { api: ApiClient, request: T, ): Response + + /** + * Count the total number of possible results for the request. + * + * [request] should be efficient and use `limit = 0` and `enableTotalRecordCount = true` + */ + suspend fun countMatching( + api: ApiClient, + request: T, + ): Int { + val result by execute(api, request) + return result.totalRecordCount + } } @Serializable