2017-01-21 16:55:27 +00:00
|
|
|
|
package eu.kanade.tachiyomi.extension.ru.mangachan
|
|
|
|
|
|
2022-06-09 18:23:57 +00:00
|
|
|
|
import eu.kanade.tachiyomi.multisrc.multichan.MultiChan
|
2017-01-21 16:55:27 +00:00
|
|
|
|
import eu.kanade.tachiyomi.network.GET
|
2020-04-25 03:16:31 +00:00
|
|
|
|
import eu.kanade.tachiyomi.source.model.Filter
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.FilterList
|
2017-01-21 16:55:27 +00:00
|
|
|
|
import okhttp3.Request
|
|
|
|
|
|
2022-07-25 19:06:34 +00:00
|
|
|
|
class MangaChan : MultiChan("MangaChan", "https://manga-chan.me", "ru") {
|
2017-01-21 16:55:27 +00:00
|
|
|
|
|
|
|
|
|
override val id: Long = 7
|
|
|
|
|
|
|
|
|
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
2017-06-01 15:49:38 +00:00
|
|
|
|
var pageNum = 1
|
|
|
|
|
when {
|
2020-04-25 03:16:31 +00:00
|
|
|
|
page < 1 -> pageNum = 1
|
2017-06-01 15:49:38 +00:00
|
|
|
|
page >= 1 -> pageNum = page
|
|
|
|
|
}
|
2017-01-21 16:55:27 +00:00
|
|
|
|
val url = if (query.isNotEmpty()) {
|
2017-06-01 15:49:38 +00:00
|
|
|
|
"$baseUrl/?do=search&subaction=search&story=$query&search_start=$pageNum"
|
2017-01-21 16:55:27 +00:00
|
|
|
|
} else {
|
2018-01-18 18:08:37 +00:00
|
|
|
|
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 + '+'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-04-11 08:13:35 +00:00
|
|
|
|
is OrderBy -> {
|
|
|
|
|
if (filter.state!!.ascending && filter.state!!.index == 0) {
|
|
|
|
|
statusParam = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
is Status -> status = arrayOf("", "all_done", "end", "ongoing", "new_ch")[filter.state]
|
2022-06-06 23:46:19 +00:00
|
|
|
|
else -> continue
|
2018-01-18 18:08:37 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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]
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-06 23:46:19 +00:00
|
|
|
|
else -> continue
|
2018-01-18 18:08:37 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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)}"
|
|
|
|
|
}
|
2017-01-21 16:55:27 +00:00
|
|
|
|
} else {
|
2018-01-18 18:08:37 +00:00
|
|
|
|
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]
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-06 23:46:19 +00:00
|
|
|
|
else -> continue
|
2018-01-18 18:08:37 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (statusParam) {
|
|
|
|
|
"$baseUrl/$order?offset=${20 * (pageNum - 1)}&status=$status"
|
|
|
|
|
} else {
|
|
|
|
|
"$baseUrl/$order/$status?offset=${20 * (pageNum - 1)}"
|
|
|
|
|
}
|
2017-01-21 16:55:27 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return GET(url, headers)
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-18 18:08:37 +00:00
|
|
|
|
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Тэги", genres)
|
2017-01-21 16:55:27 +00:00
|
|
|
|
private class Genre(name: String, val id: String = name.replace(' ', '_')) : Filter.TriState(name)
|
2018-01-18 18:08:37 +00:00
|
|
|
|
private class Status : Filter.Select<String>("Статус", arrayOf("Все", "Перевод завершен", "Выпуск завершен", "Онгоинг", "Новые главы"))
|
2020-09-13 22:33:59 +00:00
|
|
|
|
private class OrderBy : Filter.Sort(
|
|
|
|
|
"Сортировка",
|
|
|
|
|
arrayOf("Дата", "Популярность", "Имя", "Главы"),
|
2023-02-11 19:21:03 +00:00
|
|
|
|
Selection(1, false),
|
2020-09-13 22:33:59 +00:00
|
|
|
|
)
|
2018-01-18 18:08:37 +00:00
|
|
|
|
|
|
|
|
|
override fun getFilterList() = FilterList(
|
2020-09-13 22:33:59 +00:00
|
|
|
|
Status(),
|
|
|
|
|
OrderBy(),
|
2023-02-11 19:21:03 +00:00
|
|
|
|
GenreList(getGenreList()),
|
2018-01-18 18:08:37 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
private fun getGenreList() = listOf(
|
2020-09-13 22:33:59 +00:00
|
|
|
|
Genre("18_плюс"),
|
|
|
|
|
Genre("bdsm"),
|
|
|
|
|
Genre("арт"),
|
|
|
|
|
Genre("боевик"),
|
|
|
|
|
Genre("боевые_искусства"),
|
|
|
|
|
Genre("вампиры"),
|
|
|
|
|
Genre("веб"),
|
|
|
|
|
Genre("гарем"),
|
|
|
|
|
Genre("гендерная_интрига"),
|
|
|
|
|
Genre("героическое_фэнтези"),
|
|
|
|
|
Genre("детектив"),
|
|
|
|
|
Genre("дзёсэй"),
|
|
|
|
|
Genre("додзинси"),
|
|
|
|
|
Genre("драма"),
|
|
|
|
|
Genre("игра"),
|
|
|
|
|
Genre("инцест"),
|
|
|
|
|
Genre("искусство"),
|
|
|
|
|
Genre("история"),
|
|
|
|
|
Genre("киберпанк"),
|
|
|
|
|
Genre("кодомо"),
|
|
|
|
|
Genre("комедия"),
|
|
|
|
|
Genre("литРПГ"),
|
|
|
|
|
Genre("махо-сёдзё"),
|
|
|
|
|
Genre("меха"),
|
|
|
|
|
Genre("мистика"),
|
|
|
|
|
Genre("музыка"),
|
|
|
|
|
Genre("научная_фантастика"),
|
|
|
|
|
Genre("повседневность"),
|
|
|
|
|
Genre("постапокалиптика"),
|
|
|
|
|
Genre("приключения"),
|
|
|
|
|
Genre("психология"),
|
|
|
|
|
Genre("романтика"),
|
|
|
|
|
Genre("самурайский_боевик"),
|
|
|
|
|
Genre("сборник"),
|
|
|
|
|
Genre("сверхъестественное"),
|
|
|
|
|
Genre("сказка"),
|
|
|
|
|
Genre("спорт"),
|
|
|
|
|
Genre("супергерои"),
|
|
|
|
|
Genre("сэйнэн"),
|
|
|
|
|
Genre("сёдзё"),
|
|
|
|
|
Genre("сёдзё-ай"),
|
|
|
|
|
Genre("сёнэн"),
|
|
|
|
|
Genre("сёнэн-ай"),
|
|
|
|
|
Genre("тентакли"),
|
|
|
|
|
Genre("трагедия"),
|
|
|
|
|
Genre("триллер"),
|
|
|
|
|
Genre("ужасы"),
|
|
|
|
|
Genre("фантастика"),
|
|
|
|
|
Genre("фурри"),
|
|
|
|
|
Genre("фэнтези"),
|
|
|
|
|
Genre("школа"),
|
|
|
|
|
Genre("эротика"),
|
|
|
|
|
Genre("юри"),
|
|
|
|
|
Genre("яой"),
|
2023-02-11 19:21:03 +00:00
|
|
|
|
Genre("ёнкома"),
|
2017-01-21 16:55:27 +00:00
|
|
|
|
)
|
2017-12-16 21:31:02 +00:00
|
|
|
|
}
|