mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 23:51:21 +02:00
Don't use saved library info for genre grids (#540)
## Description The filtering & sorting for the genre results grid is now independent from the actual library. This prevents having a filter saved on the actual library that conflicts with the Genre grid. Also shows the genre name in the title of the page ### Related issues Fixes #536
This commit is contained in:
parent
af54e777dc
commit
9a08cf3f25
13 changed files with 139 additions and 63 deletions
|
|
@ -14,6 +14,16 @@ import org.jellyfin.sdk.model.api.request.GetPersonsRequest
|
||||||
import org.jellyfin.sdk.model.serializer.UUIDSerializer
|
import org.jellyfin.sdk.model.serializer.UUIDSerializer
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class CollectionFolderFilter(
|
||||||
|
val nameOverride: String? = null,
|
||||||
|
val filter: GetItemsFilter = GetItemsFilter(),
|
||||||
|
/**
|
||||||
|
* Whether to use the libray's saved sort & filter
|
||||||
|
*/
|
||||||
|
val useSavedLibraryDisplayInfo: Boolean = true,
|
||||||
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class GetItemsFilter(
|
data class GetItemsFilter(
|
||||||
val favorite: Boolean? = null,
|
val favorite: Boolean? = null,
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ fun GenreCard(
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.clip(RoundedCornerShape(8.dp)),
|
.clip(RoundedCornerShape(8.dp)),
|
||||||
) {
|
) {
|
||||||
Timber.v("genre image=${genre?.imageUrl}")
|
|
||||||
if (genre?.imageUrl.isNotNullOrBlank()) {
|
if (genre?.imageUrl.isNotNullOrBlank()) {
|
||||||
AsyncImage(
|
AsyncImage(
|
||||||
model =
|
model =
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ import com.github.damontecres.wholphin.data.filter.PlayedFilter
|
||||||
import com.github.damontecres.wholphin.data.filter.VideoTypeFilter
|
import com.github.damontecres.wholphin.data.filter.VideoTypeFilter
|
||||||
import com.github.damontecres.wholphin.data.filter.YearFilter
|
import com.github.damontecres.wholphin.data.filter.YearFilter
|
||||||
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.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilterOverride
|
import com.github.damontecres.wholphin.data.model.GetItemsFilterOverride
|
||||||
import com.github.damontecres.wholphin.data.model.LibraryDisplayInfo
|
import com.github.damontecres.wholphin.data.model.LibraryDisplayInfo
|
||||||
|
|
@ -136,12 +137,13 @@ class CollectionFolderViewModel
|
||||||
val viewOptions = MutableLiveData<ViewOptions>()
|
val viewOptions = MutableLiveData<ViewOptions>()
|
||||||
|
|
||||||
private var useSeriesForPrimary: Boolean = true
|
private var useSeriesForPrimary: Boolean = true
|
||||||
|
private lateinit var collectionFilter: CollectionFolderFilter
|
||||||
|
|
||||||
fun init(
|
fun init(
|
||||||
itemId: String,
|
itemId: String,
|
||||||
initialSortAndDirection: SortAndDirection?,
|
initialSortAndDirection: SortAndDirection?,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
filter: GetItemsFilter,
|
collectionFilter: CollectionFolderFilter,
|
||||||
useSeriesForPrimary: Boolean,
|
useSeriesForPrimary: Boolean,
|
||||||
defaultViewOptions: ViewOptions,
|
defaultViewOptions: ViewOptions,
|
||||||
): Job =
|
): Job =
|
||||||
|
|
@ -151,6 +153,7 @@ class CollectionFolderViewModel
|
||||||
context.getString(R.string.error_loading_collection, itemId),
|
context.getString(R.string.error_loading_collection, itemId),
|
||||||
) + Dispatchers.IO,
|
) + Dispatchers.IO,
|
||||||
) {
|
) {
|
||||||
|
this@CollectionFolderViewModel.collectionFilter = collectionFilter
|
||||||
this@CollectionFolderViewModel.useSeriesForPrimary = useSeriesForPrimary
|
this@CollectionFolderViewModel.useSeriesForPrimary = useSeriesForPrimary
|
||||||
this@CollectionFolderViewModel.itemId = itemId
|
this@CollectionFolderViewModel.itemId = itemId
|
||||||
itemId.toUUIDOrNull()?.let {
|
itemId.toUUIDOrNull()?.let {
|
||||||
|
|
@ -166,15 +169,17 @@ class CollectionFolderViewModel
|
||||||
)
|
)
|
||||||
|
|
||||||
val sortAndDirection =
|
val sortAndDirection =
|
||||||
|
if (collectionFilter.useSavedLibraryDisplayInfo) {
|
||||||
libraryDisplayInfo?.sortAndDirection
|
libraryDisplayInfo?.sortAndDirection
|
||||||
?: initialSortAndDirection
|
} else {
|
||||||
?: SortAndDirection.DEFAULT
|
null
|
||||||
|
} ?: initialSortAndDirection ?: SortAndDirection.DEFAULT
|
||||||
|
|
||||||
val filterToUse =
|
val filterToUse =
|
||||||
if (libraryDisplayInfo?.filter != null) {
|
if (collectionFilter.useSavedLibraryDisplayInfo && libraryDisplayInfo?.filter != null) {
|
||||||
filter.merge(libraryDisplayInfo.filter)
|
collectionFilter.filter.merge(libraryDisplayInfo.filter)
|
||||||
} else {
|
} else {
|
||||||
filter
|
collectionFilter.filter
|
||||||
}
|
}
|
||||||
|
|
||||||
loadResults(true, sortAndDirection, recursive, filterToUse, useSeriesForPrimary)
|
loadResults(true, sortAndDirection, recursive, filterToUse, useSeriesForPrimary)
|
||||||
|
|
@ -185,6 +190,7 @@ class CollectionFolderViewModel
|
||||||
newSort: SortAndDirection = this.sortAndDirection.value!!,
|
newSort: SortAndDirection = this.sortAndDirection.value!!,
|
||||||
viewOptions: ViewOptions? = this.viewOptions.value,
|
viewOptions: ViewOptions? = this.viewOptions.value,
|
||||||
) {
|
) {
|
||||||
|
if (collectionFilter.useSavedLibraryDisplayInfo) {
|
||||||
serverRepository.currentUser.value?.let { user ->
|
serverRepository.currentUser.value?.let { user ->
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
val libraryDisplayInfo =
|
val libraryDisplayInfo =
|
||||||
|
|
@ -200,6 +206,7 @@ class CollectionFolderViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun saveViewOptions(viewOptions: ViewOptions) {
|
fun saveViewOptions(viewOptions: ViewOptions) {
|
||||||
this.viewOptions.value = viewOptions
|
this.viewOptions.value = viewOptions
|
||||||
|
|
@ -490,7 +497,7 @@ class CollectionFolderViewModel
|
||||||
fun CollectionFolderGrid(
|
fun CollectionFolderGrid(
|
||||||
preferences: UserPreferences,
|
preferences: UserPreferences,
|
||||||
itemId: UUID,
|
itemId: UUID,
|
||||||
initialFilter: GetItemsFilter,
|
initialFilter: CollectionFolderFilter,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
onClickItem: (Int, BaseItem) -> Unit,
|
onClickItem: (Int, BaseItem) -> Unit,
|
||||||
sortOptions: List<ItemSortBy>,
|
sortOptions: List<ItemSortBy>,
|
||||||
|
|
@ -523,7 +530,7 @@ fun CollectionFolderGrid(
|
||||||
fun CollectionFolderGrid(
|
fun CollectionFolderGrid(
|
||||||
preferences: UserPreferences,
|
preferences: UserPreferences,
|
||||||
itemId: String,
|
itemId: String,
|
||||||
initialFilter: GetItemsFilter,
|
initialFilter: CollectionFolderFilter,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
onClickItem: (Int, BaseItem) -> Unit,
|
onClickItem: (Int, BaseItem) -> Unit,
|
||||||
sortOptions: List<ItemSortBy>,
|
sortOptions: List<ItemSortBy>,
|
||||||
|
|
@ -550,7 +557,7 @@ fun CollectionFolderGrid(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val sortAndDirection by viewModel.sortAndDirection.observeAsState(SortAndDirection.DEFAULT)
|
val sortAndDirection by viewModel.sortAndDirection.observeAsState(SortAndDirection.DEFAULT)
|
||||||
val filter by viewModel.filter.observeAsState(initialFilter)
|
val filter by viewModel.filter.observeAsState(initialFilter.filter)
|
||||||
val loading by viewModel.loading.observeAsState(LoadingState.Loading)
|
val loading by viewModel.loading.observeAsState(LoadingState.Loading)
|
||||||
val backgroundLoading by viewModel.backgroundLoading.observeAsState(LoadingState.Loading)
|
val backgroundLoading by viewModel.backgroundLoading.observeAsState(LoadingState.Loading)
|
||||||
val item by viewModel.item.observeAsState()
|
val item by viewModel.item.observeAsState()
|
||||||
|
|
@ -574,11 +581,17 @@ fun CollectionFolderGrid(
|
||||||
|
|
||||||
LoadingState.Success -> {
|
LoadingState.Success -> {
|
||||||
pager?.let { pager ->
|
pager?.let { pager ->
|
||||||
|
val title =
|
||||||
|
initialFilter.nameOverride
|
||||||
|
?: item?.name
|
||||||
|
?: item?.data?.collectionType?.name
|
||||||
|
?: stringResource(R.string.collection)
|
||||||
Box(modifier = modifier) {
|
Box(modifier = modifier) {
|
||||||
CollectionFolderGridContent(
|
CollectionFolderGridContent(
|
||||||
preferences,
|
preferences = preferences,
|
||||||
item,
|
item = item,
|
||||||
pager,
|
title = title,
|
||||||
|
pager = pager,
|
||||||
sortAndDirection = sortAndDirection!!,
|
sortAndDirection = sortAndDirection!!,
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
onClickItem = onClickItem,
|
onClickItem = onClickItem,
|
||||||
|
|
@ -699,6 +712,7 @@ fun CollectionFolderGrid(
|
||||||
fun CollectionFolderGridContent(
|
fun CollectionFolderGridContent(
|
||||||
preferences: UserPreferences,
|
preferences: UserPreferences,
|
||||||
item: BaseItem?,
|
item: BaseItem?,
|
||||||
|
title: String,
|
||||||
pager: List<BaseItem?>,
|
pager: List<BaseItem?>,
|
||||||
sortAndDirection: SortAndDirection,
|
sortAndDirection: SortAndDirection,
|
||||||
onClickItem: (Int, BaseItem) -> Unit,
|
onClickItem: (Int, BaseItem) -> Unit,
|
||||||
|
|
@ -722,7 +736,6 @@ fun CollectionFolderGridContent(
|
||||||
onFilterChange: (GetItemsFilter) -> Unit = {},
|
onFilterChange: (GetItemsFilter) -> Unit = {},
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val title = item?.name ?: item?.data?.collectionType?.name ?: stringResource(R.string.collection)
|
|
||||||
|
|
||||||
var showHeader by rememberSaveable { mutableStateOf(true) }
|
var showHeader by rememberSaveable { mutableStateOf(true) }
|
||||||
var showViewOptions by rememberSaveable { mutableStateOf(false) }
|
var showViewOptions by rememberSaveable { mutableStateOf(false) }
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,9 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
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.model.BaseItem
|
||||||
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
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
|
||||||
|
|
@ -39,6 +42,7 @@ import kotlinx.coroutines.sync.Semaphore
|
||||||
import kotlinx.coroutines.sync.withPermit
|
import kotlinx.coroutines.sync.withPermit
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.jellyfin.sdk.api.client.ApiClient
|
import org.jellyfin.sdk.api.client.ApiClient
|
||||||
|
import org.jellyfin.sdk.api.client.extensions.userLibraryApi
|
||||||
import org.jellyfin.sdk.model.api.BaseItemKind
|
import org.jellyfin.sdk.model.api.BaseItemKind
|
||||||
import org.jellyfin.sdk.model.api.ImageType
|
import org.jellyfin.sdk.model.api.ImageType
|
||||||
import org.jellyfin.sdk.model.api.ItemFields
|
import org.jellyfin.sdk.model.api.ItemFields
|
||||||
|
|
@ -55,9 +59,12 @@ class GenreViewModel
|
||||||
constructor(
|
constructor(
|
||||||
private val api: ApiClient,
|
private val api: ApiClient,
|
||||||
private val imageUrlService: ImageUrlService,
|
private val imageUrlService: ImageUrlService,
|
||||||
|
private val serverRepository: ServerRepository,
|
||||||
val navigationManager: NavigationManager,
|
val navigationManager: NavigationManager,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
private lateinit var itemId: UUID
|
private lateinit var itemId: UUID
|
||||||
|
|
||||||
|
val item = MutableLiveData<BaseItem?>(null)
|
||||||
val loading = MutableLiveData<LoadingState>(LoadingState.Pending)
|
val loading = MutableLiveData<LoadingState>(LoadingState.Pending)
|
||||||
val genres = MutableLiveData<List<Genre>>(listOf())
|
val genres = MutableLiveData<List<Genre>>(listOf())
|
||||||
|
|
||||||
|
|
@ -65,8 +72,14 @@ class GenreViewModel
|
||||||
loading.value = LoadingState.Loading
|
loading.value = LoadingState.Loading
|
||||||
this.itemId = itemId
|
this.itemId = itemId
|
||||||
viewModelScope.launch(Dispatchers.IO + LoadingExceptionHandler(loading, "Failed to fetch genres")) {
|
viewModelScope.launch(Dispatchers.IO + LoadingExceptionHandler(loading, "Failed to fetch genres")) {
|
||||||
|
val item =
|
||||||
|
api.userLibraryApi.getItem(itemId = itemId).content.let {
|
||||||
|
BaseItem(it, false)
|
||||||
|
}
|
||||||
|
this@GenreViewModel.item.setValueOnMain(item)
|
||||||
val request =
|
val request =
|
||||||
GetGenresRequest(
|
GetGenresRequest(
|
||||||
|
userId = serverRepository.currentUser.value?.id,
|
||||||
parentId = itemId,
|
parentId = itemId,
|
||||||
fields = SlimItemFields,
|
fields = SlimItemFields,
|
||||||
)
|
)
|
||||||
|
|
@ -187,13 +200,23 @@ fun GenreCardGrid(
|
||||||
LoadingState.Success -> {
|
LoadingState.Success -> {
|
||||||
Box(modifier = modifier) {
|
Box(modifier = modifier) {
|
||||||
LaunchedEffect(Unit) { gridFocusRequester.tryRequestFocus() }
|
LaunchedEffect(Unit) { gridFocusRequester.tryRequestFocus() }
|
||||||
|
val item by viewModel.item.observeAsState(null)
|
||||||
CardGrid(
|
CardGrid(
|
||||||
pager = genres,
|
pager = genres,
|
||||||
onClickItem = { _, genre ->
|
onClickItem = { _, genre ->
|
||||||
viewModel.navigationManager.navigateTo(
|
viewModel.navigationManager.navigateTo(
|
||||||
Destination.FilteredCollection(
|
Destination.FilteredCollection(
|
||||||
itemId = itemId,
|
itemId = itemId,
|
||||||
|
filter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
nameOverride =
|
||||||
|
listOfNotNull(
|
||||||
|
genre.name,
|
||||||
|
item?.title,
|
||||||
|
).joinToString(" "),
|
||||||
filter = GetItemsFilter(genres = listOf(genre.id)),
|
filter = GetItemsFilter(genres = listOf(genre.id)),
|
||||||
|
useSavedLibraryDisplayInfo = false,
|
||||||
|
),
|
||||||
recursive = true,
|
recursive = true,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.data.model.BaseItem
|
import com.github.damontecres.wholphin.data.model.BaseItem
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
||||||
|
|
@ -28,7 +28,7 @@ fun CollectionFolderBoxSet(
|
||||||
item: BaseItem?,
|
item: BaseItem?,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
filter: GetItemsFilter = GetItemsFilter(),
|
filter: CollectionFolderFilter = CollectionFolderFilter(),
|
||||||
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
||||||
playEnabled: Boolean = false,
|
playEnabled: Boolean = false,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.data.filter.DefaultFilterOptions
|
import com.github.damontecres.wholphin.data.filter.DefaultFilterOptions
|
||||||
import com.github.damontecres.wholphin.data.filter.ItemFilterBy
|
import com.github.damontecres.wholphin.data.filter.ItemFilterBy
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
||||||
|
|
@ -29,7 +29,7 @@ fun CollectionFolderGeneric(
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
playEnabled: Boolean,
|
playEnabled: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
filter: GetItemsFilter = GetItemsFilter(),
|
filter: CollectionFolderFilter = CollectionFolderFilter(),
|
||||||
filterOptions: List<ItemFilterBy<*>> = DefaultFilterOptions,
|
filterOptions: List<ItemFilterBy<*>> = DefaultFilterOptions,
|
||||||
sortOptions: List<ItemSortBy> = VideoSortOptions,
|
sortOptions: List<ItemSortBy> = VideoSortOptions,
|
||||||
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import androidx.lifecycle.viewModelScope
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
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.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.services.BackdropService
|
import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
|
@ -164,7 +164,7 @@ fun CollectionFolderLiveTv(
|
||||||
preferences = preferences,
|
preferences = preferences,
|
||||||
onClickItem = onClickItem,
|
onClickItem = onClickItem,
|
||||||
itemId = folders[folderIndex].id,
|
itemId = folders[folderIndex].id,
|
||||||
initialFilter = GetItemsFilter(),
|
initialFilter = CollectionFolderFilter(),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = false,
|
recursive = false,
|
||||||
sortOptions = VideoSortOptions,
|
sortOptions = VideoSortOptions,
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
|
|
@ -115,9 +116,12 @@ fun CollectionFolderMovie(
|
||||||
},
|
},
|
||||||
itemId = destination.itemId,
|
itemId = destination.itemId,
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
includeItemTypes = listOf(BaseItemKind.MOVIE),
|
includeItemTypes = listOf(BaseItemKind.MOVIE),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = MovieSortOptions,
|
sortOptions = MovieSortOptions,
|
||||||
|
|
@ -143,9 +147,12 @@ fun CollectionFolderMovie(
|
||||||
},
|
},
|
||||||
itemId = destination.itemId,
|
itemId = destination.itemId,
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
includeItemTypes = listOf(BaseItemKind.BOX_SET),
|
includeItemTypes = listOf(BaseItemKind.BOX_SET),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = VideoSortOptions,
|
sortOptions = VideoSortOptions,
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.data.model.BaseItem
|
import com.github.damontecres.wholphin.data.model.BaseItem
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
import com.github.damontecres.wholphin.ui.components.ViewOptionsSquare
|
import com.github.damontecres.wholphin.ui.components.ViewOptionsSquare
|
||||||
|
|
@ -25,7 +25,7 @@ fun CollectionFolderPlaylist(
|
||||||
item: BaseItem?,
|
item: BaseItem?,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
filter: GetItemsFilter = GetItemsFilter(),
|
filter: CollectionFolderFilter = CollectionFolderFilter(),
|
||||||
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
||||||
) {
|
) {
|
||||||
var showHeader by remember { mutableStateOf(true) }
|
var showHeader by remember { mutableStateOf(true) }
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
import com.github.damontecres.wholphin.ui.components.ViewOptionsPoster
|
||||||
|
|
@ -23,7 +23,7 @@ fun CollectionFolderRecordings(
|
||||||
itemId: UUID,
|
itemId: UUID,
|
||||||
recursive: Boolean,
|
recursive: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
filter: GetItemsFilter = GetItemsFilter(),
|
filter: CollectionFolderFilter = CollectionFolderFilter(),
|
||||||
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
preferencesViewModel: PreferencesViewModel = hiltViewModel(),
|
||||||
) {
|
) {
|
||||||
var showHeader by remember { mutableStateOf(true) }
|
var showHeader by remember { mutableStateOf(true) }
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
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.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
|
||||||
|
|
@ -115,9 +116,12 @@ fun CollectionFolderTv(
|
||||||
preferences = preferences,
|
preferences = preferences,
|
||||||
itemId = destination.itemId,
|
itemId = destination.itemId,
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
includeItemTypes = listOf(BaseItemKind.SERIES),
|
includeItemTypes = listOf(BaseItemKind.SERIES),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = SeriesSortOptions,
|
sortOptions = SeriesSortOptions,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
import com.github.damontecres.wholphin.data.filter.DefaultForFavoritesFilterOptions
|
import com.github.damontecres.wholphin.data.filter.DefaultForFavoritesFilterOptions
|
||||||
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.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
||||||
import com.github.damontecres.wholphin.data.model.GetItemsFilterOverride
|
import com.github.damontecres.wholphin.data.model.GetItemsFilterOverride
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
|
|
@ -117,10 +118,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_movies",
|
itemId = "${NavDrawerItem.Favorites.id}_movies",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
includeItemTypes = listOf(BaseItemKind.MOVIE),
|
includeItemTypes = listOf(BaseItemKind.MOVIE),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = MovieSortOptions,
|
sortOptions = MovieSortOptions,
|
||||||
|
|
@ -145,10 +149,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_series",
|
itemId = "${NavDrawerItem.Favorites.id}_series",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
includeItemTypes = listOf(BaseItemKind.SERIES),
|
includeItemTypes = listOf(BaseItemKind.SERIES),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = SeriesSortOptions,
|
sortOptions = SeriesSortOptions,
|
||||||
|
|
@ -173,10 +180,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_episodes",
|
itemId = "${NavDrawerItem.Favorites.id}_episodes",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
includeItemTypes = listOf(BaseItemKind.EPISODE),
|
includeItemTypes = listOf(BaseItemKind.EPISODE),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = EpisodeSortOptions,
|
sortOptions = EpisodeSortOptions,
|
||||||
|
|
@ -202,10 +212,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_videos",
|
itemId = "${NavDrawerItem.Favorites.id}_videos",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
includeItemTypes = listOf(BaseItemKind.VIDEO),
|
includeItemTypes = listOf(BaseItemKind.VIDEO),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = VideoSortOptions,
|
sortOptions = VideoSortOptions,
|
||||||
|
|
@ -230,10 +243,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_playlists",
|
itemId = "${NavDrawerItem.Favorites.id}_playlists",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
includeItemTypes = listOf(BaseItemKind.PLAYLIST),
|
includeItemTypes = listOf(BaseItemKind.PLAYLIST),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
showTitle = false,
|
showTitle = false,
|
||||||
recursive = true,
|
recursive = true,
|
||||||
sortOptions = VideoSortOptions,
|
sortOptions = VideoSortOptions,
|
||||||
|
|
@ -258,10 +274,13 @@ fun FavoritesPage(
|
||||||
onClickItem = { _, item -> onClickItem.invoke(item) },
|
onClickItem = { _, item -> onClickItem.invoke(item) },
|
||||||
itemId = "${NavDrawerItem.Favorites.id}_people",
|
itemId = "${NavDrawerItem.Favorites.id}_people",
|
||||||
initialFilter =
|
initialFilter =
|
||||||
|
CollectionFolderFilter(
|
||||||
|
filter =
|
||||||
GetItemsFilter(
|
GetItemsFilter(
|
||||||
favorite = true,
|
favorite = true,
|
||||||
override = GetItemsFilterOverride.PERSON,
|
override = GetItemsFilterOverride.PERSON,
|
||||||
),
|
),
|
||||||
|
),
|
||||||
initialSortAndDirection =
|
initialSortAndDirection =
|
||||||
SortAndDirection(
|
SortAndDirection(
|
||||||
ItemSortBy.DEFAULT,
|
ItemSortBy.DEFAULT,
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package com.github.damontecres.wholphin.ui.nav
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.navigation3.runtime.NavKey
|
import androidx.navigation3.runtime.NavKey
|
||||||
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.GetItemsFilter
|
import com.github.damontecres.wholphin.data.model.GetItemsFilter
|
||||||
import com.github.damontecres.wholphin.data.model.ItemPlayback
|
import com.github.damontecres.wholphin.data.model.ItemPlayback
|
||||||
import com.github.damontecres.wholphin.ui.data.SortAndDirection
|
import com.github.damontecres.wholphin.ui.data.SortAndDirection
|
||||||
|
|
@ -94,7 +95,7 @@ sealed class Destination(
|
||||||
@Serializable
|
@Serializable
|
||||||
data class FilteredCollection(
|
data class FilteredCollection(
|
||||||
val itemId: UUID,
|
val itemId: UUID,
|
||||||
val filter: GetItemsFilter,
|
val filter: CollectionFolderFilter,
|
||||||
val recursive: Boolean,
|
val recursive: Boolean,
|
||||||
) : Destination(false)
|
) : Destination(false)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue