Improving genre search started from the manga page of a popular manga (#4375)
Co-authored-by: E3FxGaming <E3FxGaming@users.noreply.github.com> (cherry picked from commit 62955e73852ed1ca69a1168c855721076da9fb05) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoHeaderAdapter.kt
This commit is contained in:
parent
db395f5e37
commit
b7321ca204
@ -31,6 +31,7 @@ import eu.kanade.tachiyomi.databinding.SourceControllerBinding
|
|||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||||
import eu.kanade.tachiyomi.source.LocalSource
|
import eu.kanade.tachiyomi.source.LocalSource
|
||||||
|
import eu.kanade.tachiyomi.source.model.Filter
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.source.online.LoginSource
|
import eu.kanade.tachiyomi.source.online.LoginSource
|
||||||
@ -502,6 +503,54 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
presenter.restartPager(newQuery)
|
presenter.restartPager(newQuery)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to restart the request with a new genre-filtered query.
|
||||||
|
* If the genre name can't be found the filters,
|
||||||
|
* the standard searchWithQuery search method is used instead.
|
||||||
|
*
|
||||||
|
* @param genreName the name of the genre
|
||||||
|
*/
|
||||||
|
fun searchWithGenre(genreName: String) {
|
||||||
|
presenter.sourceFilters = presenter.source.getFilterList()
|
||||||
|
|
||||||
|
var filterList: FilterList? = null
|
||||||
|
|
||||||
|
filter@ for (sourceFilter in presenter.sourceFilters) {
|
||||||
|
if (sourceFilter is Filter.Group<*>) {
|
||||||
|
for (filter in sourceFilter.state) {
|
||||||
|
if (filter is Filter<*> && filter.name.equals(genreName, true)) {
|
||||||
|
when (filter) {
|
||||||
|
is Filter.TriState -> filter.state = 1
|
||||||
|
is Filter.CheckBox -> filter.state = true
|
||||||
|
}
|
||||||
|
filterList = presenter.sourceFilters
|
||||||
|
break@filter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (sourceFilter is Filter.Select<*>) {
|
||||||
|
val index = sourceFilter.values.filterIsInstance<String>()
|
||||||
|
.indexOfFirst { it.equals(genreName, true) }
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
sourceFilter.state = index
|
||||||
|
filterList = presenter.sourceFilters
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterList != null) {
|
||||||
|
filterSheet?.setFilters(presenter.filterItems)
|
||||||
|
|
||||||
|
showProgressBar()
|
||||||
|
|
||||||
|
adapter?.clear()
|
||||||
|
presenter.restartPager("", filterList)
|
||||||
|
} else {
|
||||||
|
searchWithQuery(genreName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called from the presenter when the network request is received.
|
* Called from the presenter when the network request is received.
|
||||||
*
|
*
|
||||||
|
@ -987,6 +987,29 @@ class MangaController :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a genre search using the provided genre name.
|
||||||
|
*
|
||||||
|
* @param genreName the search genre to the parent controller
|
||||||
|
*/
|
||||||
|
fun performGenreSearch(genreName: String) {
|
||||||
|
if (router.backstackSize < 2) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val previousController = router.backstack[router.backstackSize - 2].controller
|
||||||
|
val presenterSource = presenter.source
|
||||||
|
|
||||||
|
if (previousController is BrowseSourceController &&
|
||||||
|
presenterSource is HttpSource
|
||||||
|
) {
|
||||||
|
router.handleBack()
|
||||||
|
previousController.searchWithGenre(genreName)
|
||||||
|
} else {
|
||||||
|
performSearch(genreName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun shareCover() {
|
private fun shareCover() {
|
||||||
try {
|
try {
|
||||||
val activity = activity!!
|
val activity = activity!!
|
||||||
|
@ -170,8 +170,8 @@ class MangaInfoItemAdapter(
|
|||||||
}
|
}
|
||||||
mangaTagsInfoAdapter?.updateDataSet(namespaceTags)
|
mangaTagsInfoAdapter?.updateDataSet(namespaceTags)
|
||||||
}
|
}
|
||||||
binding.mangaGenresTagsFullChips.setChipsExtended(manga.getGenres(), controller::performSearch, controller::performGlobalSearch, source?.id ?: 0)
|
binding.mangaGenresTagsFullChips.setChipsExtended(manga.getGenres(), controller::performGenreSearch, controller::performGlobalSearch, source?.id ?: 0)
|
||||||
binding.mangaGenresTagsCompactChips.setChipsExtended(manga.getGenres(), controller::performSearch, controller::performGlobalSearch, source?.id ?: 0)
|
binding.mangaGenresTagsCompactChips.setChipsExtended(manga.getGenres(), controller::performGenreSearch, controller::performGlobalSearch, source?.id ?: 0)
|
||||||
// SY <--
|
// SY <--
|
||||||
} else {
|
} else {
|
||||||
binding.mangaGenresTagsCompactChips.isVisible = false
|
binding.mangaGenresTagsCompactChips.isVisible = false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user