mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 23:51:21 +02:00
Fix jumping to a letter for many grids (#687)
## Description On any grid that wasn't showing movies, tv shows, or videos, the jump to letter functionality did not work correctly. This PR fixes jumping for other media types, eg collections or episodes. Additionally, the jump now also takes filters into account, so if filtering Movies, it will jump to the right place now within the available movies. ### Related issues Fixes #683
This commit is contained in:
parent
80670c3e0f
commit
5cb3662995
1 changed files with 73 additions and 61 deletions
|
|
@ -304,10 +304,51 @@ class CollectionFolderViewModel
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
filter: GetItemsFilter,
|
filter: GetItemsFilter,
|
||||||
useSeriesForPrimary: Boolean,
|
useSeriesForPrimary: Boolean,
|
||||||
): ApiRequestPager<out Any> {
|
): ApiRequestPager<out Any> =
|
||||||
val item = item.value
|
when (filter.override) {
|
||||||
return when (filter.override) {
|
|
||||||
GetItemsFilterOverride.NONE -> {
|
GetItemsFilterOverride.NONE -> {
|
||||||
|
val request =
|
||||||
|
createGetItemsRequest(
|
||||||
|
sortAndDirection = sortAndDirection,
|
||||||
|
recursive = recursive,
|
||||||
|
filter = filter,
|
||||||
|
)
|
||||||
|
val newPager =
|
||||||
|
ApiRequestPager(
|
||||||
|
api,
|
||||||
|
request,
|
||||||
|
GetItemsRequestHandler,
|
||||||
|
viewModelScope,
|
||||||
|
useSeriesForPrimary = useSeriesForPrimary,
|
||||||
|
)
|
||||||
|
newPager
|
||||||
|
}
|
||||||
|
|
||||||
|
GetItemsFilterOverride.PERSON -> {
|
||||||
|
val request =
|
||||||
|
filter.applyTo(
|
||||||
|
GetPersonsRequest(
|
||||||
|
enableImageTypes = listOf(ImageType.PRIMARY, ImageType.THUMB),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
val newPager =
|
||||||
|
ApiRequestPager(
|
||||||
|
api,
|
||||||
|
request,
|
||||||
|
GetPersonsHandler,
|
||||||
|
viewModelScope,
|
||||||
|
useSeriesForPrimary = useSeriesForPrimary,
|
||||||
|
)
|
||||||
|
newPager
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createGetItemsRequest(
|
||||||
|
sortAndDirection: SortAndDirection,
|
||||||
|
recursive: Boolean,
|
||||||
|
filter: GetItemsFilter,
|
||||||
|
): GetItemsRequest {
|
||||||
|
val item = item.value
|
||||||
val includeItemTypes =
|
val includeItemTypes =
|
||||||
item
|
item
|
||||||
?.data
|
?.data
|
||||||
|
|
@ -349,35 +390,7 @@ class CollectionFolderViewModel
|
||||||
fields = SlimItemFields,
|
fields = SlimItemFields,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
val newPager =
|
return request
|
||||||
ApiRequestPager(
|
|
||||||
api,
|
|
||||||
request,
|
|
||||||
GetItemsRequestHandler,
|
|
||||||
viewModelScope,
|
|
||||||
useSeriesForPrimary = useSeriesForPrimary,
|
|
||||||
)
|
|
||||||
newPager
|
|
||||||
}
|
|
||||||
|
|
||||||
GetItemsFilterOverride.PERSON -> {
|
|
||||||
val request =
|
|
||||||
filter.applyTo(
|
|
||||||
GetPersonsRequest(
|
|
||||||
enableImageTypes = listOf(ImageType.PRIMARY, ImageType.THUMB),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
val newPager =
|
|
||||||
ApiRequestPager(
|
|
||||||
api,
|
|
||||||
request,
|
|
||||||
GetPersonsHandler,
|
|
||||||
viewModelScope,
|
|
||||||
useSeriesForPrimary = useSeriesForPrimary,
|
|
||||||
)
|
|
||||||
newPager
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getFilterOptionValues(filterOption: ItemFilterBy<*>): List<FilterValueOption> =
|
suspend fun getFilterOptionValues(filterOption: ItemFilterBy<*>): List<FilterValueOption> =
|
||||||
|
|
@ -457,27 +470,26 @@ class CollectionFolderViewModel
|
||||||
|
|
||||||
suspend fun positionOfLetter(letter: Char): Int? =
|
suspend fun positionOfLetter(letter: Char): Int? =
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
item.value?.let { item ->
|
val sort = sortAndDirection.value
|
||||||
val includeItemTypes =
|
val filter = filter.value
|
||||||
when (item.data.collectionType) {
|
if (sort == null || filter == null) {
|
||||||
CollectionType.MOVIES -> listOf(BaseItemKind.MOVIE)
|
return@withContext null
|
||||||
CollectionType.TVSHOWS -> listOf(BaseItemKind.SERIES)
|
|
||||||
CollectionType.HOMEVIDEOS -> listOf(BaseItemKind.VIDEO)
|
|
||||||
else -> listOf()
|
|
||||||
}
|
}
|
||||||
val request =
|
val request =
|
||||||
GetItemsRequest(
|
createGetItemsRequest(
|
||||||
parentId = item.id,
|
sortAndDirection = sort,
|
||||||
includeItemTypes = includeItemTypes,
|
recursive = recursive,
|
||||||
|
filter = filter,
|
||||||
|
).copy(
|
||||||
|
enableImageTypes = null,
|
||||||
|
fields = null,
|
||||||
nameLessThan = letter.toString(),
|
nameLessThan = letter.toString(),
|
||||||
limit = 0,
|
limit = 0,
|
||||||
enableTotalRecordCount = true,
|
enableTotalRecordCount = true,
|
||||||
recursive = true,
|
|
||||||
)
|
)
|
||||||
val result by GetItemsRequestHandler.execute(api, request)
|
val result by GetItemsRequestHandler.execute(api, request)
|
||||||
result.totalRecordCount
|
result.totalRecordCount
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fun setWatched(
|
fun setWatched(
|
||||||
position: Int,
|
position: Int,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue