diff --git a/src/en/rule34video/build.gradle b/src/en/rule34video/build.gradle index ad07d8093..8b46215d2 100644 --- a/src/en/rule34video/build.gradle +++ b/src/en/rule34video/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Rule34Video' pkgNameSuffix = 'en.rule34video' extClass = '.Rule34Video' - extVersionCode = 2 + extVersionCode = 3 libVersion = '13' containsNsfw = true } diff --git a/src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34Video.kt b/src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34Video.kt index fb3a74ee1..322a2c91a 100644 --- a/src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34Video.kt +++ b/src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34Video.kt @@ -120,42 +120,49 @@ class Rule34Video : ConfigurableAnimeSource, ParsedAnimeHttpSource() { private var cat = false override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val sortedBy = filters.find { it is OrderFilter } as OrderFilter + val catBy = filters.find { it is CategoryBy } as CategoryBy + val newSort = when (sortedBy.toUriPart()) { + "latest-updates" -> "post_date" - val sortedBy = getSearchParameters(filters).split(":")[0] - val catBy = getSearchParameters(filters).split(":")[1] + "most-popular" -> "video_viewed" - return if (query.isNotEmpty()) { + "top-rated" -> "rating" + else -> "" + } + val tagFilter = try { + verifyTag = true + (filters.find { it is TagFilter } as TagFilter).state + } catch (e: Exception) { + verifyTag = false + "" + } - cat = false - var newSort = "" - when (sortedBy) { - "latest-updates" -> { - newSort = "post_date" - } - "most-popular" -> { - newSort = "video_viewed" - } - "top-rated" -> { - newSort = "rating" - } + tagDocument = if (tagFilter.isNotBlank()) client.newCall(GET("$baseUrl/search_ajax.php?tag=$tagFilter", headers)).execute().asJsoup() else Document("") + + val tagSearch = try { + filters.find { it is TagSearch } as TagSearch + } catch (e: Exception) { + TagSearch(arrayOf()).apply { state = 0 } + } + + return when { + query.isNotEmpty() -> { + GET("$baseUrl/search/$query/?flag1=${catBy.toUriPart()}&sort_by=$newSort&from_videos=$page", headers) // with search + } + tagSearch.state != 0 -> GET("$baseUrl/search/?tag_ids=all,${tagSearch.toUriPart()}&sort_by=$newSort&from_videos=$page") // with tag search + sortedBy.state != 0 || catBy.state != 0 -> { + GET("$baseUrl/search/?flag1=${catBy.toUriPart()}&sort_by=${sortedBy.toUriPart()}&from_videos=$page", headers) // with sort and category + } + else -> { + GET("$baseUrl/latest-updates/$page/", headers) // without search } - - GET("$baseUrl/search/$query/?flag1=$catBy&sort_by=$newSort&from_videos=$page", headers) // with search - } else { - cat = true - GET("$baseUrl/$sortedBy/$page/?flag1=$catBy", headers) // without search } } - override fun searchAnimeSelector(): String = "div.item.thumb" + override fun searchAnimeSelector(): String = popularAnimeSelector() - override fun searchAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.setUrlWithoutDomain(element.select("a.th").attr("href")) - anime.title = element.select("a.th div.thumb_title").text() - anime.thumbnail_url = element.select("a.th div.img img").attr("data-original") - return anime - } + override fun searchAnimeFromElement(element: Element): SAnime = popularAnimeFromElement(element) override fun searchAnimeNextPageSelector(): String = "div.item.pager.next a" @@ -201,58 +208,58 @@ class Rule34Video : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } // Filters + private var verifyTag = false + private var tagDocument = Document("") - private data class View(val name: String, val id: String) - private class ViewList(Views: Array) : AnimeFilter.Select("Order", Views) - private val viewBy = getView().map { - it.name - }.toTypedArray() - private fun getView() = listOf( - View("Latest", "latest-updates"), - View("Most Viewed", "most-popular"), - View("Top Rated", "top-rated"), - - ) - - private data class Category(val name: String, val id: String) - private class CategoryList(Categories: Array) : AnimeFilter.Select("Category", Categories) - private val categoryBy = getCategory().map { - it.name - }.toTypedArray() - private fun getCategory() = listOf( - Category("All", ""), - Category("Futa", "15"), - Category("Gay", "192"), - ) + private fun tagsResults(document: Document): Array> { + val tagList = mutableListOf(Pair("