mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +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