fix(library): Fix categories filter & hidden categories
This commit is contained in:
parent
1fd86ca74f
commit
f635fc209b
1 changed files with 67 additions and 83 deletions
|
|
@ -184,37 +184,11 @@ class LibraryScreenModel(
|
||||||
::Triple,
|
::Triple,
|
||||||
),
|
),
|
||||||
combine(getTracksPerManga.subscribe(), getTrackingFiltersFlow(), ::Pair),
|
combine(getTracksPerManga.subscribe(), getTrackingFiltersFlow(), ::Pair),
|
||||||
// SY -->
|
|
||||||
combine(
|
|
||||||
state.map { it.groupType }.distinctUntilChanged(),
|
|
||||||
libraryPreferences.sortingMode().changes(),
|
|
||||||
// KMK -->
|
|
||||||
state.map { it.searchQuery.isNullOrBlank() && !it.hasActiveFilters }.distinctUntilChanged(),
|
|
||||||
::Triple,
|
|
||||||
// KMK <--
|
|
||||||
),
|
|
||||||
// SY <--
|
|
||||||
// KMK -->
|
// KMK -->
|
||||||
combine(
|
getCategoriesPerLibraryManga.subscribe(),
|
||||||
combine(
|
|
||||||
getCategoriesPerLibraryManga.subscribe(),
|
|
||||||
state.map { it.filterCategory }.distinctUntilChanged(),
|
|
||||||
::Pair,
|
|
||||||
),
|
|
||||||
combine(
|
|
||||||
state.map { it.includedCategories }.distinctUntilChanged(),
|
|
||||||
state.map { it.excludedCategories }.distinctUntilChanged(),
|
|
||||||
::Pair,
|
|
||||||
),
|
|
||||||
::Pair,
|
|
||||||
),
|
|
||||||
// KMK <--
|
// KMK <--
|
||||||
getLibraryItemPreferencesFlow(),
|
getLibraryItemPreferencesFlow(),
|
||||||
) { (searchQuery, categories, favorites), (tracksMap, trackingFilters), (groupType, sort, noActiveFilterOrSearch), (categoryFilters, filteredCategories), itemPreferences ->
|
) { (searchQuery, categories, favorites), (tracksMap, trackingFilters), categoriesPerManga, itemPreferences ->
|
||||||
// KMK -->
|
|
||||||
val (categoriesPerManga, filterCategory) = categoryFilters
|
|
||||||
val (includedCategories, _) = filteredCategories
|
|
||||||
// KMK <--
|
|
||||||
val filteredFavorites = favorites
|
val filteredFavorites = favorites
|
||||||
.applyFilters(
|
.applyFilters(
|
||||||
tracksMap,
|
tracksMap,
|
||||||
|
|
@ -255,55 +229,75 @@ class LibraryScreenModel(
|
||||||
}
|
}
|
||||||
|
|
||||||
screenModelScope.launchIO {
|
screenModelScope.launchIO {
|
||||||
state
|
combine(
|
||||||
.dropWhile { !it.libraryData.isInitialized }
|
state
|
||||||
.map {
|
.dropWhile { !it.libraryData.isInitialized }
|
||||||
Triple(
|
.map {
|
||||||
it.libraryData,
|
Triple(
|
||||||
// SY -->
|
it.libraryData,
|
||||||
it.groupType,
|
// SY -->
|
||||||
// SY <--
|
it.groupType,
|
||||||
|
// SY <--
|
||||||
|
// KMK -->
|
||||||
|
it.searchQuery.isNullOrBlank() && !it.hasActiveFilters,
|
||||||
|
// KMK <--
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.distinctUntilChanged(),
|
||||||
|
// KMK -->
|
||||||
|
combine(
|
||||||
|
libraryPreferences.sortingMode().changes(),
|
||||||
|
libraryPreferences.showHiddenCategories().changes(),
|
||||||
|
::Pair,
|
||||||
|
),
|
||||||
|
combine(
|
||||||
|
state.map { it.filterCategory }.distinctUntilChanged(),
|
||||||
|
state.map { it.includedCategories }.distinctUntilChanged(),
|
||||||
|
::Pair,
|
||||||
|
),
|
||||||
|
// KMK <--
|
||||||
|
) { (data, groupType, noActiveFilterOrSearch), (sort, showHiddenCategories), (filterCategory, includedCategories) ->
|
||||||
|
data.favorites
|
||||||
|
.applyGrouping(
|
||||||
|
data.categories,
|
||||||
// KMK -->
|
// KMK -->
|
||||||
it.searchQuery.isNullOrBlank() && !it.hasActiveFilters,
|
if (filterCategory && includedCategories.isNotEmpty()) {
|
||||||
|
LibraryGroup.UNGROUPED
|
||||||
|
} else {
|
||||||
|
groupType
|
||||||
|
},
|
||||||
|
showHiddenCategories,
|
||||||
// KMK <--
|
// KMK <--
|
||||||
)
|
)
|
||||||
}
|
.applySort(
|
||||||
.distinctUntilChanged()
|
data.favoritesById,
|
||||||
.map { (data, groupType, noActiveFilterOrSearch) ->
|
data.tracksMap,
|
||||||
data.favorites
|
data.loggedInTrackerIds,
|
||||||
.applyGrouping(
|
// SY -->
|
||||||
data.categories,
|
sort.takeIf { groupType != LibraryGroup.BY_DEFAULT },
|
||||||
// SY -->
|
// SY <--
|
||||||
groupType,
|
)
|
||||||
// SY <--
|
// KMK -->
|
||||||
)
|
.filter {
|
||||||
.applySort(
|
// Hide empty categories if no active filter or search
|
||||||
data.favoritesById,
|
noActiveFilterOrSearch || it.value.isNotEmpty()
|
||||||
data.tracksMap,
|
}
|
||||||
data.loggedInTrackerIds,
|
.let {
|
||||||
// SY -->
|
// Fall back to default category if no categories are present
|
||||||
libraryPreferences.sortingMode().get().takeIf { groupType != LibraryGroup.BY_DEFAULT },
|
it.ifEmpty {
|
||||||
// SY <--
|
mapOf(
|
||||||
)
|
Category(
|
||||||
// KMK -->
|
0,
|
||||||
.filter {
|
preferences.context.stringResource(MR.strings.default_category),
|
||||||
noActiveFilterOrSearch || it.value.isNotEmpty()
|
0,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
) to emptyList(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
.let {
|
}
|
||||||
it.ifEmpty {
|
// KMK <--
|
||||||
mapOf(
|
}
|
||||||
Category(
|
|
||||||
0,
|
|
||||||
preferences.context.stringResource(MR.strings.default_category),
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
) to emptyList(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// KMK <--
|
|
||||||
}
|
|
||||||
.collectLatest {
|
.collectLatest {
|
||||||
mutableState.update { state ->
|
mutableState.update { state ->
|
||||||
state.copy(
|
state.copy(
|
||||||
|
|
@ -415,16 +409,6 @@ class LibraryScreenModel(
|
||||||
}
|
}
|
||||||
.launchIn(screenModelScope)
|
.launchIn(screenModelScope)
|
||||||
|
|
||||||
screenModelScope.launchIO {
|
|
||||||
getCategories
|
|
||||||
.subscribe()
|
|
||||||
.collect { categories ->
|
|
||||||
mutableState.update { state ->
|
|
||||||
state.copy(libraryCategories = categories.filterNot(Category::isSystemCategory))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
screenModelScope.launchIO {
|
screenModelScope.launchIO {
|
||||||
if (mangaDexDmcaUuids.isEmpty()) {
|
if (mangaDexDmcaUuids.isEmpty()) {
|
||||||
mangaDexDmcaUuids = loadMangaDexDmcaUuids(context = Injekt.get<Application>())
|
mangaDexDmcaUuids = loadMangaDexDmcaUuids(context = Injekt.get<Application>())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue