From 8c45ac552f4d30bec6a0ae9b755a3ac3f41fae3d Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Sun, 6 Apr 2025 17:33:40 +0700 Subject: [PATCH] Show new multi-Duplicate dialog when `Bulk-favorite` with only 1 manga --- .../ui/browse/BulkFavoriteScreenModel.kt | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt index 1828e55ba..8cb474517 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt @@ -133,9 +133,16 @@ class BulkFavoriteScreenModel( fun addFavorite(startIdx: Int = 0) { screenModelScope.launch { startRunning() - val mangaWithDup = getDuplicateLibraryManga(startIdx) - if (mangaWithDup != null) { - setDialog(Dialog.AllowDuplicate(mangaWithDup)) + val entryWithDuplicates = getDuplicateLibraryManga(startIdx) + if (entryWithDuplicates != null) { + val (index, duplicates) = entryWithDuplicates + if (state.value.selection.size == 1) { + val manga = state.value.selection.first() + // If only one manga is selected, show the multiple duplicates dialog. + setDialog(Dialog.AddDuplicateManga(manga, duplicates)) + } else { + setDialog(Dialog.AllowDuplicate(index to duplicates.first())) + } } else { addFavoriteDuplicate() } @@ -199,13 +206,13 @@ class BulkFavoriteScreenModel( } } - private suspend fun getDuplicateLibraryManga(startIdx: Int = 0): Pair? { + private suspend fun getDuplicateLibraryManga(startIdx: Int = 0): Pair>? { val mangas = state.value.selection mangas.fastForEachIndexed { index, manga -> if (index < startIdx) return@fastForEachIndexed - val dup = getDuplicateLibraryManga(manga) - if (dup.isEmpty()) return@fastForEachIndexed - return Pair(index, dup.first()) + val duplicates = getDuplicateLibraryManga(manga) + if (duplicates.isEmpty()) return@fastForEachIndexed + return Pair(index, duplicates) } return null } @@ -435,10 +442,15 @@ fun AddDuplicateMangaDialog(bulkFavoriteScreenModel: BulkFavoriteScreenModel) { val bulkFavoriteState by bulkFavoriteScreenModel.state.collectAsState() val dialog = bulkFavoriteState.dialog as BulkFavoriteScreenModel.Dialog.AddDuplicateManga + bulkFavoriteScreenModel.stopRunning() + DuplicateMangaDialog( duplicates = dialog.duplicates, onDismissRequest = bulkFavoriteScreenModel::dismissDialog, - onConfirm = { bulkFavoriteScreenModel.addFavorite(dialog.manga) }, + onConfirm = { + bulkFavoriteScreenModel.toggleSelectionMode() + bulkFavoriteScreenModel.addFavorite(dialog.manga) + }, onOpenManga = { navigator.push(MangaScreen(it.id)) }, onMigrate = { PreMigrationScreen.navigateToMigration(