|
@@ -35,13 +35,59 @@ class Mangachan : ParsedHttpSource() {
|
|
|
val url = if (query.isNotEmpty()) {
|
|
|
"$baseUrl/?do=search&subaction=search&story=$query&search_start=$pageNum"
|
|
|
} else {
|
|
|
- val filt = filters.filterIsInstance<Genre>().filter { !it.isIgnored() }
|
|
|
- if (filt.isNotEmpty()) {
|
|
|
- var genres = ""
|
|
|
- filt.forEach { genres += (if (it.isExcluded()) "-" else "") + it.id + '+' }
|
|
|
- "$baseUrl/tags/${genres.dropLast(1)}?offset=${20 * (pageNum - 1)}"
|
|
|
+
|
|
|
+ var genres = ""
|
|
|
+ var order = ""
|
|
|
+ var statusParam = true
|
|
|
+ var status = ""
|
|
|
+ for (filter in if (filters.isEmpty()) getFilterList() else filters) {
|
|
|
+ when (filter) {
|
|
|
+ is GenreList -> {
|
|
|
+ filter.state.forEach { f ->
|
|
|
+ if (!f.isIgnored()) {
|
|
|
+ genres += (if (f.isExcluded()) "-" else "") + f.id + '+'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ is OrderBy -> { if (filter.state!!.ascending && filter.state!!.index == 0) { statusParam = false } }
|
|
|
+ is Status -> status = arrayOf("", "all_done", "end", "ongoing", "new_ch")[filter.state]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (genres.isNotEmpty()) {
|
|
|
+ for (filter in filters) {
|
|
|
+ when (filter) {
|
|
|
+ is OrderBy -> {
|
|
|
+ order = if (filter.state!!.ascending) {
|
|
|
+ arrayOf("", "&n=favasc", "&n=abcdesc", "&n=chasc")[filter.state!!.index]
|
|
|
+ } else {
|
|
|
+ arrayOf("&n=dateasc", "&n=favdesc", "&n=abcasc", "&n=chdesc")[filter.state!!.index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (statusParam) {
|
|
|
+ "$baseUrl/tags/${genres.dropLast(1)}$order?offset=${20 * (pageNum - 1)}&status=$status"
|
|
|
+ } else {
|
|
|
+ "$baseUrl/tags/$status/${genres.dropLast(1)}/$order?offset=${20 * (pageNum - 1)}"
|
|
|
+ }
|
|
|
} else {
|
|
|
- "$baseUrl/?do=search&subaction=search&story=$query&search_start=$pageNum"
|
|
|
+ for (filter in filters) {
|
|
|
+ when (filter) {
|
|
|
+ is OrderBy -> {
|
|
|
+ order = if (filter.state!!.ascending) {
|
|
|
+ arrayOf("manga/new", "manga/new&n=favasc", "manga/new&n=abcdesc", "manga/new&n=chasc")[filter.state!!.index]
|
|
|
+ } else {
|
|
|
+ arrayOf("manga/new&n=dateasc", "mostfavorites", "catalog", "sortch")[filter.state!!.index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (statusParam) {
|
|
|
+ "$baseUrl/$order?offset=${20 * (pageNum - 1)}&status=$status"
|
|
|
+ } else {
|
|
|
+ "$baseUrl/$order/$status?offset=${20 * (pageNum - 1)}"
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return GET(url, headers)
|
|
@@ -160,14 +206,36 @@ class Mangachan : ParsedHttpSource() {
|
|
|
|
|
|
override fun imageUrlParse(document: Document) = ""
|
|
|
|
|
|
+ private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Тэги", genres)
|
|
|
private class Genre(name: String, val id: String = name.replace(' ', '_')) : Filter.TriState(name)
|
|
|
+ private class Status : Filter.Select<String>("Статус", arrayOf("Все", "Перевод завершен", "Выпуск завершен", "Онгоинг", "Новые главы"))
|
|
|
+ private class OrderBy : Filter.Sort("Сортировка",
|
|
|
+ arrayOf("Дата", "Популярность", "Имя", "Главы"),
|
|
|
+ Filter.Sort.Selection(1, false))
|
|
|
+
|
|
|
+
|
|
|
+ override fun getFilterList() = FilterList(
|
|
|
+ Status(),
|
|
|
+ OrderBy(),
|
|
|
+ GenreList(getGenreList())
|
|
|
+ )
|
|
|
+
|
|
|
+// private class StatusList(status: List<Status>) : Filter.Group<Status>("Статус", status)
|
|
|
+// private class Status(name: String, val id: String) : Filter.CheckBox(name, false)
|
|
|
+// private fun getStatusList() = listOf(
|
|
|
+// Status("Перевод завершен", "/all_done"),
|
|
|
+// Status("Выпуск завершен", "/end"),
|
|
|
+// Status("Онгоинг", "/ongoing"),
|
|
|
+// Status("Новые главы", "/new_ch")
|
|
|
+// )
|
|
|
+
|
|
|
|
|
|
/* [...document.querySelectorAll("li.sidetag > a:nth-child(1)")].map((el,i) =>
|
|
|
* { const link=el.getAttribute('href');const id=link.substr(6,link.length);
|
|
|
* return `Genre("${id.replace("_", " ")}")` }).join(',\n')
|
|
|
* on http://mangachan.me/
|
|
|
*/
|
|
|
- override fun getFilterList() = FilterList(
|
|
|
+ private fun getGenreList() = listOf(
|
|
|
Genre("18 плюс"),
|
|
|
Genre("bdsm"),
|
|
|
Genre("арт"),
|
|
@@ -211,6 +279,7 @@ class Mangachan : ParsedHttpSource() {
|
|
|
Genre("сёдзё-ай"),
|
|
|
Genre("сёнэн"),
|
|
|
Genre("сёнэн-ай"),
|
|
|
+ Genre("темное фэнтези"),
|
|
|
Genre("тентакли"),
|
|
|
Genre("трагедия"),
|
|
|
Genre("триллер"),
|