From 864f0d370cf201fa0874bc8a47ad99adc10cfa06 Mon Sep 17 00:00:00 2001 From: Taumer <taumer943@gmail.com> Date: Sun, 9 Sep 2018 18:41:53 +0300 Subject: [PATCH] Add categories for readmanga/mintmanga (#484) Add categories for readmanga/mintmanga --- src/ru/mintmanga/build.gradle | 4 +- .../extension/ru/mintmanga/Mintmanga.kt | 47 +++++++++++++++++-- src/ru/readmanga/build.gradle | 4 +- .../extension/ru/readmanga/Readmanga.kt | 43 +++++++++++++++-- 4 files changed, 87 insertions(+), 11 deletions(-) diff --git a/src/ru/mintmanga/build.gradle b/src/ru/mintmanga/build.gradle index f151ec2fd..01adf4149 100644 --- a/src/ru/mintmanga/build.gradle +++ b/src/ru/mintmanga/build.gradle @@ -5,8 +5,8 @@ ext { appName = 'Tachiyomi: Mintmanga' pkgNameSuffix = 'ru.mintmanga' extClass = '.Mintmanga' - extVersionCode = 5 - extVersionSuffix = 5 + extVersionCode = 6 + extVersionSuffix = 6 libVersion = '1.2' } diff --git a/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/Mintmanga.kt b/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/Mintmanga.kt index e3de83cd8..fa202d7ee 100644 --- a/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/Mintmanga.kt +++ b/src/ru/mintmanga/src/eu/kanade/tachiyomi/extension/ru/mintmanga/Mintmanga.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers +import okhttp3.HttpUrl import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -52,8 +53,25 @@ class Mintmanga : ParsedHttpSource() { override fun latestUpdatesNextPageSelector() = "a.nextLink" override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val genres = filters.filterIsInstance<Genre>().joinToString("&") { it.id + arrayOf("=", "=in", "=ex")[it.state] } - return GET("$baseUrl/search/advanced?q=$query&$genres", headers) + val url = HttpUrl.parse("$baseUrl/search/advanced")!!.newBuilder() + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is GenreList -> filter.state.forEach { genre -> + if (genre.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(genre.id, arrayOf("=", "=in", "=ex")[genre.state]) + } + } + is Category -> filter.state.forEach { category -> + if (category.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(category.id, arrayOf("=", "=in", "=ex")[category.state]) + } + } + } + } + if (!query.isEmpty()) { + url.addQueryParameter("q", query) + } + return GET(url.toString().replace("=%3D", "="), headers) } override fun searchMangaSelector() = popularMangaSelector() @@ -61,7 +79,7 @@ class Mintmanga : ParsedHttpSource() { override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) // max 200 results - override fun searchMangaNextPageSelector() = null + override fun searchMangaNextPageSelector(): Nothing? = null override fun mangaDetailsParse(document: Document): SManga { val infoElement = document.select("div.leftContent").first() @@ -153,13 +171,34 @@ class Mintmanga : ParsedHttpSource() { } private class Genre(name: String, val id: String) : Filter.TriState(name) + private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres) + private class Category(categories: List<Genre>) : Filter.Group<Genre>("Category", categories) - /* [...document.querySelectorAll("tr.advanced_option:nth-child(1) > td:nth-child(3) span.js-link")] + /* [...document.querySelectorAll("tr.advanced_option:nth-child(1) > td:nth-child(3) span.js-link")] * .map(el => `Genre("${el.textContent.trim()}", $"{el.getAttribute('onclick') * .substr(31,el.getAttribute('onclick').length-33)"})`).join(',\n') * on http://mintmanga.com/search/advanced */ override fun getFilterList() = FilterList( + Category(getCategoryList()), + GenreList(getGenreList()) + ) + + private fun getCategoryList() = listOf( + Genre("В цвете", "el_4614"), + Genre("Веб", "el_1355"), + Genre("Выпуск приостановлен", "el_5232"), + Genre("Ёнкома", "el_2741"), + Genre("Комикс западный", "el_1903"), + Genre("Комикс русский", "el_2173"), + Genre("Манхва", "el_1873"), + Genre("Маньхуа", "el_1875"), + Genre("Не Яой", "el_1874"), + Genre("Ранобэ", "el_5688"), + Genre("Сборник", "el_1348") + ) + + private fun getGenreList() = listOf( Genre("арт", "el_2220"), Genre("бара", "el_1353"), Genre("боевик", "el_1346"), diff --git a/src/ru/readmanga/build.gradle b/src/ru/readmanga/build.gradle index d5957808e..10efa73af 100644 --- a/src/ru/readmanga/build.gradle +++ b/src/ru/readmanga/build.gradle @@ -5,8 +5,8 @@ ext { appName = 'Tachiyomi: Readmanga' pkgNameSuffix = 'ru.readmanga' extClass = '.Readmanga' - extVersionCode = 5 - extVersionSuffix = 5 + extVersionCode = 6 + extVersionSuffix = 6 libVersion = '1.2' } diff --git a/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/Readmanga.kt b/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/Readmanga.kt index 097a94224..c69d4dcd3 100644 --- a/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/Readmanga.kt +++ b/src/ru/readmanga/src/eu/kanade/tachiyomi/extension/ru/readmanga/Readmanga.kt @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.Headers +import okhttp3.HttpUrl import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -52,8 +53,25 @@ class Readmanga : ParsedHttpSource() { override fun latestUpdatesNextPageSelector() = "a.nextLink" override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val genres = filters.filterIsInstance<Genre>().joinToString("&") { it.id + arrayOf("=", "=in", "=ex")[it.state] } - return GET("$baseUrl/search/advanced?q=$query&$genres", headers) + val url = HttpUrl.parse("$baseUrl/search/advanced")!!.newBuilder() + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is GenreList -> filter.state.forEach { genre -> + if (genre.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(genre.id, arrayOf("=", "=in", "=ex")[genre.state]) + } + } + is Category -> filter.state.forEach { category -> + if (category.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(category.id, arrayOf("=", "=in", "=ex")[category.state]) + } + } + } + } + if (!query.isEmpty()) { + url.addQueryParameter("q", query) + } + return GET(url.toString().replace("=%3D", "="), headers) } override fun searchMangaSelector() = popularMangaSelector() @@ -61,7 +79,7 @@ class Readmanga : ParsedHttpSource() { override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) // max 200 results - override fun searchMangaNextPageSelector() = null + override fun searchMangaNextPageSelector(): Nothing? = null override fun mangaDetailsParse(document: Document): SManga { val infoElement = document.select("div.leftContent").first() @@ -153,6 +171,8 @@ class Readmanga : ParsedHttpSource() { } private class Genre(name: String, val id: String) : Filter.TriState(name) + private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres) + private class Category(categories: List<Genre>) : Filter.Group<Genre>("Category", categories) /* [...document.querySelectorAll("tr.advanced_option:nth-child(1) > td:nth-child(3) span.js-link")] * .map(el => `Genre("${el.textContent.trim()}", $"{el.getAttribute('onclick') @@ -160,6 +180,23 @@ class Readmanga : ParsedHttpSource() { * on http://readmanga.me/search/advanced */ override fun getFilterList() = FilterList( + Category(getCategoryList()), + GenreList(getGenreList()) + ) + + private fun getCategoryList() = listOf( + Genre("В цвете", "el_7290"), + Genre("Веб", "el_2160"), + Genre("Выпуск приостановлен", "el_8033"), + Genre("Ёнкома", "el_2161"), + Genre("Комикс западный", "el_3515"), + Genre("Манхва", "el_3001"), + Genre("Маньхуа", "el_3002"), + Genre("Ранобэ", "el_8575"), + Genre("Сборник", "el_2157") + ) + + private fun getGenreList() = listOf( Genre("арт", "el_5685"), Genre("боевик", "el_2155"), Genre("боевые искусства", "el_2143"),