diff --git a/src/en/comicextra/build.gradle b/src/en/comicextra/build.gradle index 19f3911b8..ff14515e4 100644 --- a/src/en/comicextra/build.gradle +++ b/src/en/comicextra/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: ComicExtra' pkgNameSuffix = 'en.comicextra' extClass = '.ComicExtra' - extVersionCode = 4 + extVersionCode = 5 libVersion = '1.2' } diff --git a/src/en/comicextra/src/eu/kanade/tachiyomi/extension/en/comicextra/ComicExtra.kt b/src/en/comicextra/src/eu/kanade/tachiyomi/extension/en/comicextra/ComicExtra.kt index b8fdfa697..0244025ad 100644 --- a/src/en/comicextra/src/eu/kanade/tachiyomi/extension/en/comicextra/ComicExtra.kt +++ b/src/en/comicextra/src/eu/kanade/tachiyomi/extension/en/comicextra/ComicExtra.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.extension.en.comicextra import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter @@ -42,7 +43,19 @@ class ComicExtra : ParsedHttpSource() { override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/comic-updates", headers) - override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/comic-search?key=$query", headers) + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + return if (query.isNotBlank()) { + GET("$baseUrl/comic-search?key=$query", headers) + } else { + var url = baseUrl + filters.forEach { filter -> + when (filter) { + is GenreFilter -> url += "/${filter.toUriPart()}" + } + } + GET(url + if (page > 1) "/$page" else "", headers) + } + } override fun popularMangaFromElement(element: Element) = SManga.create().apply { setUrlWithoutDomain(element.select("div.mb-right > h3 > a").attr("href")) @@ -71,16 +84,13 @@ class ComicExtra : ParsedHttpSource() { override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() override fun mangaDetailsParse(document: Document): SManga { - val manga = SManga.create() - manga.title = document.select("span.title-1").text() - manga.thumbnail_url = document.select("div.movie-l-img > img").attr("src") - - val status = document.select("dt:contains(Status:) + dd").text() - manga.status = parseStatus(status) - manga.author = document.select("dt:contains(Author:) + dd").text() - manga.description = document.select("div#film-content").text() - - return manga + return SManga.create().apply { + title = document.select("div.movie-detail span.title-1").text() + thumbnail_url = document.select("div.movie-l-img > img").attr("src") + status = parseStatus(document.select("dt:contains(Status:) + dd").text()) + author = document.select("dt:contains(Author:) + dd").text() + description = document.select("div#film-content").text() + } } private fun parseStatus(element: String): Int = when { @@ -164,4 +174,79 @@ class ComicExtra : ParsedHttpSource() { } override fun imageUrlParse(document: Document) = throw UnsupportedOperationException("Unused method was called somehow!") + + // Filters + + override fun getFilterList() = FilterList( + Filter.Header("Note: can't combine search types"), + Filter.Separator(), + GenreFilter(getGenreList) + ) + + private class GenreFilter(genrePairs: Array>) : UriPartFilter("Category", genrePairs) + + open class UriPartFilter(displayName: String, private val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + private val getGenreList = arrayOf( + Pair("Action", "action-comic"), + Pair("Adventure", "adventure-comic"), + Pair("Anthology", "anthology-comic"), + Pair("Anthropomorphic", "anthropomorphic-comic"), + Pair("Biography", "biography-comic"), + Pair("Black Mask Studios", "black-mask-studios-comic"), + Pair("Children", "children-comic"), + Pair("Comedy", "comedy-comic"), + Pair("Crime", "crime-comic"), + Pair("DC Comics", "dc-comics-comic"), + Pair("Dark Horse", "dark-horse-comic"), + Pair("Drama", "drama-comic"), + Pair("Family", "family-comic"), + Pair("Fantasy", "fantasy-comic"), + Pair("Fighting", "fighting-comic"), + Pair("First Second Books", "first-second-books-comic"), + Pair("Graphic Novels", "graphic-novels-comic"), + Pair("Historical", "historical-comic"), + Pair("Horror", "horror-comic"), + Pair("LEOMACS", "a>