Tachiyomi-Extensions/multisrc/overrides/multichan/mangachan/src/MangaChan.kt

160 lines
6.0 KiB
Kotlin
Raw Normal View History

2017-01-21 16:55:27 +00:00
package eu.kanade.tachiyomi.extension.ru.mangachan
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
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 {
var pageNum = 1
when {
2020-04-25 03:16:31 +00:00
page < 1 -> pageNum = 1
page >= 1 -> pageNum = page
}
2017-01-21 16:55:27 +00:00
val url = if (query.isNotEmpty()) {
"$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 + '+'
}
}
}
is OrderBy -> {
if (filter.state!!.ascending && filter.state!!.index == 0) {
statusParam = false
}
}
is Status -> status = arrayOf("", "all_done", "end", "ongoing", "new_ch")[filter.state]
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]
}
}
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]
}
}
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("Все", "Перевод завершен", "Выпуск завершен", "Онгоинг", "Новые главы"))
private class OrderBy : Filter.Sort(
"Сортировка",
arrayOf("Дата", "Популярность", "Имя", "Главы"),
Selection(1, false)
)
2018-01-18 18:08:37 +00:00
override fun getFilterList() = FilterList(
Status(),
OrderBy(),
GenreList(getGenreList())
2018-01-18 18:08:37 +00:00
)
private fun getGenreList() = listOf(
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("яой"),
Genre("ёнкома")
2017-01-21 16:55:27 +00:00
)
}