From 719c1ebf9c740a9c69f96e1fc27d1b5aa2915775 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 22 Mar 2023 23:00:48 -0300 Subject: [PATCH] feat(multisrc/DooPlay): Make new filters implementation easier (#1434) * feat(multisrc/DooPlay): Make new filters implementation easier * fix(multisrc/DooPlay): Update CineVision URL --- .../dooplay/cinevision/src/CineVision.kt | 2 +- .../tachiyomi/multisrc/dooplay/DooPlay.kt | 58 +++++++++++++------ .../multisrc/dooplay/DooPlayGenerator.kt | 2 +- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/multisrc/overrides/dooplay/cinevision/src/CineVision.kt b/multisrc/overrides/dooplay/cinevision/src/CineVision.kt index ab297d188..3f1df75fd 100644 --- a/multisrc/overrides/dooplay/cinevision/src/CineVision.kt +++ b/multisrc/overrides/dooplay/cinevision/src/CineVision.kt @@ -13,7 +13,7 @@ import uy.kohesive.injekt.api.get class CineVision : DooPlay( "pt-BR", "CineVision", - "https://cinevisionv6.net", + "https://cinevision.vc", ) { // ============================== Popular =============================== override fun popularAnimeSelector(): String = "article.w_item_b > a" diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt index a619c1bfa..e734fee68 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt @@ -199,10 +199,16 @@ abstract class DooPlay( override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { return when { query.isBlank() -> { - val genreUri = filters.asUriPart() - var url = "$baseUrl/$genreUri" - if (page > 1) url += "/page/$page" - GET(url, headers) + filters + .firstOrNull { it.state != 0 } + ?.let { + val filter = it as UriPartFilter + val filterUrl = buildString { + append("$baseUrl/${filter.toUriPart()}") + if (page > 1) append("/page/$page") + } + GET(filterUrl, headers) + } ?: popularAnimeRequest(page) } else -> GET("$baseUrl/page/$page/?s=$query", headers) } @@ -318,13 +324,13 @@ abstract class DooPlay( /** * Automatically fetched genres from the source to be used in the filters. */ - protected open lateinit var genresListFilter: AnimeFilter<*> + protected open lateinit var genresArray: FilterItems override fun getFilterList(): AnimeFilterList { - return if (this::genresListFilter.isInitialized) { + return if (this::genresArray.isInitialized) { AnimeFilterList( AnimeFilter.Header(genreFilterHeader), - genresListFilter, + FetchedGenresFilter(genresListMessage, genresArray), ) } else if (fetchGenres) { AnimeFilterList(AnimeFilter.Header(genresMissingWarning)) @@ -337,15 +343,17 @@ abstract class DooPlay( * Fetch the genres from the source to be used in the filters. */ protected open fun fetchGenresList() { - if (!this::genresListFilter.isInitialized && fetchGenres) { + if (!this::genresArray.isInitialized && fetchGenres) { runCatching { - val filter = client.newCall(genresListRequest()) + client.newCall(genresListRequest()) .execute() .asJsoup() .let(::genresListParse) - if ((filter as AnimeFilter.Select<*>).values.size > 0) { - genresListFilter = filter - } + .let { items -> + if (items.isNotEmpty()) { + genresArray = items + } + } }.onFailure { it.printStackTrace() } } } @@ -358,13 +366,23 @@ abstract class DooPlay( /** * Get the genres from the document. */ - protected open fun genresListParse(document: Document): AnimeFilter<*> { + protected open fun genresListParse(document: Document): FilterItems { val items = document.select(genresListSelector()).map { val name = it.text() val value = it.attr("href").substringAfter("$baseUrl/") Pair(name, value) }.toTypedArray() - return UriPartFilter(genresListMessage, items) + + return if (items.isEmpty()) { + items + } else { + arrayOf(Pair(selectFilterText, "")) + items + } + } + + protected open val selectFilterText = when (lang) { + "pt-BR" -> "" + else -> "