mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Range selection in library (#8186)
* logic and a bit of cleanup * cleanup done * grammar fix * fixing format * Auto stash before checking out "HEAD" * Revert "Auto stash before checking out "HEAD"" This reverts commit 202374a36ff444b7da3fcdb2a9859ca71a7c046e. * Update app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt Co-authored-by: arkon <arkon@users.noreply.github.com> * cleanup Co-authored-by: arkon <arkon@users.noreply.github.com>
This commit is contained in:
		| @@ -96,6 +96,7 @@ fun LibraryScreen( | ||||
|                     onChangeCurrentPage = { presenter.activeCategory = it }, | ||||
|                     onMangaClicked = onMangaClicked, | ||||
|                     onToggleSelection = { presenter.toggleSelection(it) }, | ||||
|                     onToggleRangeSelection = { presenter.toggleRangeSelection(it) }, | ||||
|                     onRefresh = onClickRefresh, | ||||
|                     onGlobalSearchClicked = onGlobalSearchClicked, | ||||
|                     getNumberOfMangaForCategory = { presenter.getMangaCountForCategory(it) }, | ||||
|   | ||||
| @@ -40,6 +40,7 @@ fun LibraryContent( | ||||
|     onChangeCurrentPage: (Int) -> Unit, | ||||
|     onMangaClicked: (Long) -> Unit, | ||||
|     onToggleSelection: (LibraryManga) -> Unit, | ||||
|     onToggleRangeSelection: (LibraryManga) -> Unit, | ||||
|     onRefresh: (Category?) -> Boolean, | ||||
|     onGlobalSearchClicked: () -> Unit, | ||||
|     getNumberOfMangaForCategory: @Composable (Long) -> State<Int?>, | ||||
| @@ -80,7 +81,7 @@ fun LibraryContent( | ||||
|             } | ||||
|         } | ||||
|         val onLongClickManga = { manga: LibraryManga -> | ||||
|             onToggleSelection(manga) | ||||
|             onToggleRangeSelection(manga) | ||||
|         } | ||||
|  | ||||
|         SwipeRefresh( | ||||
|   | ||||
| @@ -662,10 +662,38 @@ class LibraryPresenter( | ||||
|         state.selection = emptyList() | ||||
|     } | ||||
|  | ||||
|     private fun removeSelected(mutableList: MutableList<LibraryManga>, manga: LibraryManga): Boolean { | ||||
|         if (selection.fastAny { it.manga.id == manga.manga.id }) { | ||||
|             return mutableList.remove(manga) | ||||
|         } | ||||
|         return false | ||||
|     } | ||||
|  | ||||
|     fun toggleSelection(manga: LibraryManga) { | ||||
|         val mutableList = state.selection.toMutableList() | ||||
|         if (selection.fastAny { it.manga.id == manga.manga.id }) { | ||||
|             mutableList.remove(manga) | ||||
|         if (!removeSelected(mutableList, manga)) { | ||||
|             mutableList.add(manga) | ||||
|         } | ||||
|         state.selection = mutableList | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Selects all mangas between and including the given manga and the last pressed manga from the | ||||
|      * same category as the given manga | ||||
|      */ | ||||
|     fun toggleRangeSelection(manga: LibraryManga) { | ||||
|         val mutableList = state.selection.toMutableList() | ||||
|         if (!removeSelected(mutableList, manga) && mutableList.fastAny | ||||
|             { it.category == manga.category } | ||||
|         ) { | ||||
|             val items = (loadedManga[manga.category] ?: emptyList()).map { it.libraryManga } | ||||
|             val lastMangaIndex = items.indexOf(mutableList.findLast { it.category == manga.category }) | ||||
|             val curMangaIndex = items.indexOf(manga) | ||||
|             val newList = when (lastMangaIndex >= curMangaIndex + 1) { | ||||
|                 true -> items.subList(curMangaIndex, lastMangaIndex) | ||||
|                 false -> items.subList(lastMangaIndex, curMangaIndex + 1) | ||||
|             } | ||||
|             mutableList.addAll(newList.filterNot { it in selection }) | ||||
|         } else { | ||||
|             mutableList.add(manga) | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user