From 4fcbd886184e74d9efc44d73a1529673e2668b30 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sat, 10 May 2025 01:05:25 +0700 Subject: [PATCH] refactor(bulk-selection): optimize selectAll/reverseSelection logic (#898) --- .../presentation/browse/GlobalSearchScreen.kt | 20 +++++++--------- .../browse/MigrateSearchScreen.kt | 23 +++++++------------ .../presentation/browse/SourceFeedScreen.kt | 15 +++++------- .../presentation/components/TabbedScreen.kt | 17 +++++++------- .../migration/search/SourceSearchScreen.kt | 11 ++++----- .../source/browse/BrowseSourceScreen.kt | 11 ++++----- .../tachiyomi/ui/manga/RelatedMangasScreen.kt | 18 +++++++-------- .../exh/md/follows/MangaDexFollowsScreen.kt | 11 ++++----- .../java/exh/recs/BrowseRecommendsScreen.kt | 11 ++++----- 9 files changed, 56 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt index a2d1f5c0d..54ce83c29 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt @@ -56,20 +56,16 @@ fun GlobalSearchScreen( onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onSelectAll = { - state.filteredItems.forEach { (_, result) -> - if (result is SearchItemResult.Success) { - result.result.forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } - } - } + state.filteredItems.values + .filterIsInstance() + .flatMap { it.result } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - state.filteredItems.values - .filterIsInstance() - .flatMap { it.result }, - ) + state.filteredItems.values + .filterIsInstance() + .flatMap { it.result } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt index dc46f0bcf..831c2afb0 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt @@ -46,23 +46,16 @@ fun MigrateSearchScreen( onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onSelectAll = { - state.filteredItems.forEach { (_, result) -> - when (result) { - is SearchItemResult.Success -> { - result.result.forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } - } - else -> {} - } - } + state.filteredItems.values + .filterIsInstance() + .flatMap { it.result } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - state.filteredItems.values - .filterIsInstance() - .flatMap { it.result }, - ) + state.filteredItems.values + .filterIsInstance() + .flatMap { it.result } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt index c14523b76..0a2701e9c 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt @@ -124,17 +124,14 @@ fun SourceFeedScreen( onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onSelectAll = { - items.forEach { - it.results?.forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } - } + items.mapNotNull { it.results } + .flatten() + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - items.mapNotNull { it.results } - .flatten(), - ) + items.mapNotNull { it.results } + .flatten() + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt index eb32d5269..5799bcf96 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -65,17 +65,18 @@ fun TabbedScreen( onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onSelectAll = { - feedState.items?.forEach { - it.results?.forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + feedState.items?.let { result -> + result.mapNotNull { it.results } + .flatten() + .forEach { bulkFavoriteScreenModel.select(it) } } }, onReverseSelection = { - feedState.items - ?.mapNotNull { it.results } - ?.flatten() - ?.let { bulkFavoriteScreenModel.reverseSelection(it) } + feedState.items?.let { result -> + result.mapNotNull { it.results } + .flatten() + .let { bulkFavoriteScreenModel.reverseSelection(it) } + } }, ) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt index 722d971a1..f8a8fd34b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt @@ -89,15 +89,12 @@ data class SourceSearchScreen( onSelectAll = { mangaList.itemSnapshotList.items .map { it.value.first } - .forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - mangaList.itemSnapshotList.items - .map { it.value.first }, - ) + mangaList.itemSnapshotList.items + .map { it.value.first } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt index 1d5594b2c..1790909fe 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt @@ -202,15 +202,12 @@ data class BrowseSourceScreen( onSelectAll = { mangaList.itemSnapshotList.items .map { it.value.first } - .forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - mangaList.itemSnapshotList.items - .map { it.value.first }, - ) + mangaList.itemSnapshotList.items + .map { it.value.first } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/RelatedMangasScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/RelatedMangasScreen.kt index 8941994e9..bd5747131 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/RelatedMangasScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/RelatedMangasScreen.kt @@ -54,18 +54,18 @@ fun RelatedMangasScreen( onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onSelectAll = { - successState.relatedMangasSorted?.forEach { - val relatedManga = it as RelatedManga.Success - relatedManga.mangaList.forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + successState.relatedMangasSorted?.let { result -> + result.map { it as RelatedManga.Success } + .flatMap { it.mangaList } + .forEach { bulkFavoriteScreenModel.select(it) } } }, onReverseSelection = { - successState.relatedMangasSorted - ?.map { it as RelatedManga.Success } - ?.flatMap { it.mangaList } - ?.let { bulkFavoriteScreenModel.reverseSelection(it) } + successState.relatedMangasSorted?.let { result -> + result.map { it as RelatedManga.Success } + .flatMap { it.mangaList } + .let { bulkFavoriteScreenModel.reverseSelection(it) } + } }, ) } else { diff --git a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt index 9c0d9e5ca..4a8a0b545 100644 --- a/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt +++ b/app/src/main/java/exh/md/follows/MangaDexFollowsScreen.kt @@ -77,15 +77,12 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() { onSelectAll = { mangaList.itemSnapshotList.items .map { it.value.first } - .forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - mangaList.itemSnapshotList.items - .map { it.value.first }, - ) + mangaList.itemSnapshotList.items + .map { it.value.first } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else { diff --git a/app/src/main/java/exh/recs/BrowseRecommendsScreen.kt b/app/src/main/java/exh/recs/BrowseRecommendsScreen.kt index d41dc4348..c2e99aced 100644 --- a/app/src/main/java/exh/recs/BrowseRecommendsScreen.kt +++ b/app/src/main/java/exh/recs/BrowseRecommendsScreen.kt @@ -94,15 +94,12 @@ class BrowseRecommendsScreen( onSelectAll = { mangaList.itemSnapshotList.items .map { it.value.first } - .forEach { manga -> - bulkFavoriteScreenModel.select(manga) - } + .forEach { bulkFavoriteScreenModel.select(it) } }, onReverseSelection = { - bulkFavoriteScreenModel.reverseSelection( - mangaList.itemSnapshotList.items - .map { it.value.first }, - ) + mangaList.itemSnapshotList.items + .map { it.value.first } + .let { bulkFavoriteScreenModel.reverseSelection(it) } }, ) } else {