From c6e4780feb0b1f319e1846920fb266955991d78e Mon Sep 17 00:00:00 2001 From: Dr1ks Date: Mon, 14 Apr 2025 21:43:53 +0700 Subject: [PATCH] Grouple: update filters (#8463) * Readmanga: update filters list * Mintmanga: update filters list * Seimanga: update filters list * Selfmanga: update filters list * Usagi: update filters list * Seimanga: update filters list 2 * Mintmanga: update filters list 2 * RuMix: update filters list * AllHentai: update filters list * Grouple: reduce code duplication * Grouple: remove unused import * Grouple: bump * Grouple: lint --- lib-multisrc/grouple/build.gradle.kts | 2 +- .../tachiyomi/multisrc/grouple/GroupLe.kt | 65 ++++- .../extension/ru/allhentai/AllHentai.kt | 236 +----------------- .../extension/ru/mintmanga/MintManga.kt | 109 ++------ .../extension/ru/readmanga/ReadManga.kt | 99 ++------ .../tachiyomi/extension/ru/rumix/RuMIX.kt | 109 +++++--- .../extension/ru/seimanga/SeiManga.kt | 102 +------- .../extension/ru/selfmanga/SelfManga.kt | 81 +++--- .../tachiyomi/extension/ru/usagi/Usagi.kt | 83 +----- 9 files changed, 244 insertions(+), 642 deletions(-) diff --git a/lib-multisrc/grouple/build.gradle.kts b/lib-multisrc/grouple/build.gradle.kts index 759e0cf39..f551e41b8 100644 --- a/lib-multisrc/grouple/build.gradle.kts +++ b/lib-multisrc/grouple/build.gradle.kts @@ -2,4 +2,4 @@ plugins { id("lib-multisrc") } -baseVersionCode = 32 +baseVersionCode = 33 diff --git a/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt b/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt index a443ecd5b..e5a6c167f 100644 --- a/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt +++ b/lib-multisrc/grouple/src/eu/kanade/tachiyomi/multisrc/grouple/GroupLe.kt @@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.source.ConfigurableSource +import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page @@ -103,15 +104,73 @@ abstract class GroupLe( override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = - "$baseUrl/search/advancedResults?offset=${50 * (page - 1)}".toHttpUrl() - .newBuilder() + val url = "$baseUrl/search/advancedResults?offset=${50 * (page - 1)}" + .toHttpUrl() + .newBuilder() + if (query.isNotEmpty()) { url.addQueryParameter("q", query) } + + (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 CategoryList -> filter.state.forEach { category -> + if (category.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(category.id, arrayOf("=", "=in", "=ex")[category.state]) + } + } + + is AgeList -> filter.state.forEach { age -> + if (age.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(age.id, arrayOf("=", "=in", "=ex")[age.state]) + } + } + + is MoreList -> filter.state.forEach { more -> + if (more.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(more.id, arrayOf("=", "=in", "=ex")[more.state]) + } + } + + is AdditionalFilterList -> filter.state.forEach { fils -> + if (fils.state != Filter.TriState.STATE_IGNORE) { + url.addQueryParameter(fils.id, arrayOf("=", "=in", "=ex")[fils.state]) + } + } + + is OrderBy -> { + url.addQueryParameter( + "sortType", + arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE", "USER_RATING")[filter.state], + ) + } + + else -> {} + } + } + return GET(url.toString().replace("=%3D", "="), headers) } + protected class OrderBy : Filter.Select( + "Сортировка", + arrayOf("По популярности", "Популярно сейчас", "По году", "По алфавиту", "Новинки", "По дате обновления", "По рейтингу"), + ) + + protected class Genre(name: String, val id: String) : Filter.TriState(name) + + protected class GenreList(genres: List) : Filter.Group("Жанры", genres) + protected class CategoryList(categories: List) : Filter.Group("Категории", categories) + protected class AgeList(ages: List) : Filter.Group("Возрастная рекомендация", ages) + protected class MoreList(moren: List) : Filter.Group("Прочее", moren) + protected class AdditionalFilterList(fils: List) : Filter.Group("Фильтры", fils) + override fun mangaDetailsParse(document: Document): SManga { val infoElement = document.select(".expandable").first()!! val rawCategory = infoElement.select("span.elem_category").text() diff --git a/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt b/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt index bc3b76399..fa8bc66a7 100644 --- a/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt +++ b/src/ru/allhentai/src/eu/kanade/tachiyomi/extension/ru/allhentai/AllHentai.kt @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.allhentai import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class AllHentai : GroupLe("AllHentai", "https://20.allhen.online", "ru") { override val id = 1809051393403180443 @@ -16,100 +13,14 @@ class AllHentai : GroupLe("AllHentai", "https://20.allhen.online", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.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], - ) - } - } - - is FiltersList -> filter.state.forEach { filters -> - if (filters.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(filters.id, arrayOf("=", "=in", "=ex")[filters.state]) - } - } - - is OrderBy -> { - if (filter.state > 0) { - val sortType = arrayOf( - "not", - "year", - "rate", - "popularity", - "votes", - "created", - "updated", - )[filter.state] - return GET( - "$baseUrl/list?sortType=$sortType&offset=${50 * (page - 1)}", - headers, - ) - } - } - - is Tags -> { - if (filter.state > 0) { - val tagName = tagsList[filter.state].url - return GET("$baseUrl/list/tag/$tagName?offset=${50 * (page - 1)}", headers) - } - } - - else -> {} - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка (только)", - arrayOf( - "Без сортировки", - "По году", - "По популярности", - "Популярно сейчас", - "По рейтингу", - "Новинки", - "По дате обновления", - ), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - - private class Category(categories: List) : Filter.Group("Категории", categories) - - private class FiltersList(filters: List) : Filter.Group("Фильтры", filters) - - private class Tags(tags: Array) : Filter.Select("Тэг (только)", tags) - - private data class Tag(val name: String, val url: String) - override fun getFilterList() = FilterList( OrderBy(), - Tags(tagsName), - GenreList(genreList), - Category(categoryList), - FiltersList(filtersList), + CategoryList(getCategoryList()), + GenreList(getGenreList()), + AdditionalFilterList(getAdditionalFilterList()), ) - private val genreList = listOf( + private fun getGenreList() = listOf( Genre("ahegao", "el_855"), Genre("анал", "el_828"), Genre("бдсм", "el_78"), @@ -142,153 +53,32 @@ class AllHentai : GroupLe("AllHentai", "https://20.allhen.online", "ru") { Genre("фэнтези", "el_70"), Genre("чикан", "el_1059"), Genre("этти", "el_798"), - Genre("юри", "el_84"), - Genre("яой", "el_83"), ) - private val categoryList = listOf( + private fun getCategoryList() = listOf( Genre("3D", "el_626"), Genre("Анимация", "el_5777"), Genre("Без текста", "el_3157"), + Genre("Манхва", "el_1104"), + Genre("Маньхуа", "el_5902"), Genre("Порно комикс", "el_1003"), - Genre("Порно манхва", "el_1104"), + Genre("Руманга", "el_5896"), ) - private val filtersList = listOf( + private fun getAdditionalFilterList() = listOf( Genre("Высокий рейтинг", "s_high_rate"), Genre("Сингл", "s_single"), Genre("Для взрослых", "s_mature"), Genre("Завершенная", "s_completed"), Genre("Переведено", "s_translated"), + Genre("Заброшен перевод", "s_abandoned_popular"), Genre("Длинная", "s_many_chapters"), Genre("Ожидает загрузки", "s_wait_upload"), - Genre("Продается", "s_sale"), + Genre("Лицензия", "s_sale"), + Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), ) - private val tagsList = listOf( - Tag("Без тега", "not"), - Tag("handjob", "handjob"), - Tag("inseki", "inseki"), - Tag("алкоголь", "alcohol"), - Tag("андроид", "android"), - Tag("анилингус", "anilingus"), - Tag("бассейн", "pool"), - Tag("без трусиков", "without_panties"), - Tag("беременность", "pregnancy"), - Tag("бикини", "bikini"), - Tag("близнецы", "twins"), - Tag("боди-арт", "body_art"), - Tag("больница", "hospital"), - Tag("буккакэ", "bukkake"), - Tag("в ванной", "in_bathroom"), - Tag("в общественном месте", "in_public_place"), - Tag("в транспорте", "in_vehicle"), - Tag("вампиры", "vampires"), - Tag("вибратор", "vibrator"), - Tag("втянутые соски", "inverted_nipples"), - Tag("гипноз", "hypnosis"), - Tag("глубокий минет", "deepthroat"), - Tag("горничные", "maids"), - Tag("горячий источник", "hot_spring"), - Tag("гэнгбэнг", "gangbang"), - Tag("гяру", "gyaru"), - Tag("двойное проникновение", "double_penetration"), - Tag("Девочки волшебницы", "magical_girl"), - Tag("демоны", "demons"), - Tag("дефекация", "scat"), - Tag("дилдо", "dildo"), - Tag("додзинси", "doujinshi"), - Tag("домохозяйки", "housewives"), - Tag("дыра в стене", "hole_in_the_wall"), - Tag("жестокость", "cruelty"), - Tag("загар", "tan_lines"), - Tag("зомби", "zombie"), - Tag("инопланетяне", "aliens"), - Tag("исполнение желаний", "granting_wish"), - Tag("камера", "camera"), - Tag("косплей", "cosplay"), - Tag("кремпай", "creampie"), - Tag("куннилингус", "cunnilingus"), - Tag("купальник", "swimsuit"), - Tag("лактация", "lactation"), - Tag("латекс и кожа", "latex"), - Tag("Ломка Психики", "mind_break"), - Tag("магия", "magic"), - Tag("мастурбация", "masturbation"), - Tag("медсестра", "nurse"), - Tag("мерзкий дядька", "terrible_oyaji"), - Tag("много девушек", "many_girls"), - Tag("много спермы", "a_lot_of_sperm"), - Tag("монстрдевушки", "monstergirl"), - Tag("монстры", "monsters"), - Tag("мужчина крепкого телосложения", "muscle_man"), - Tag("на природе", "outside"), - Tag("не бритая киска", "hairy_pussy"), - Tag("не бритые подмышки", "hairy_armpits"), - Tag("нетори", "netori"), - Tag("нижнее бельё", "lingerie"), - Tag("обмен партнерами", "swinging"), - Tag("обмен телами", "body_swap"), - Tag("обычный секс", "normal_sex"), - Tag("огромная грудь", "super_big_boobs"), - Tag("орки", "orcs"), - Tag("очки", "megane"), - Tag("пайзури", "titsfuck"), - Tag("парень пассив", "passive_guy"), - Tag("пацанка", "tomboy"), - Tag("пеггинг", "pegging"), - Tag("переодевание", "disguise"), - Tag("пирсинг", "piercing"), - Tag("писают", "peeing"), - Tag("пляж", "beach"), - Tag("повседневность", "slice_of_life"), - Tag("повязка на глаза", "blindfold"), - Tag("подглядывание", "peeping"), - Tag("подчинение", "submission"), - Tag("похищение", "kidnapping"), - Tag("принуждение", "forced"), - Tag("прозрачная одежда", "transparent_clothes"), - Tag("проституция", "prostitution"), - Tag("психические отклонения", "mental_illness"), - Tag("публичный секс", "public_sex"), - Tag("пьяные", "drunk"), - Tag("рабы", "slaves"), - Tag("рентген зрение", "x_ray"), - Tag("сверхъестественное", "supernatural"), - Tag("секс втроем", "threesome"), - Tag("секс игрушки", "sex_toys"), - Tag("сексуально возбужденная", "horny"), - Tag("спортивная форма", "sports_uniform"), - Tag("спящие", "sleeping"), - Tag("страпон", "strapon"), - Tag("Суккуб", "succubus"), - Tag("темнокожие", "dark_skin"), - Tag("толстушки", "fatties"), - Tag("трап", "trap"), - Tag("униформа", "uniform"), - Tag("ушастые", "eared"), - Tag("фантазии", "dreams"), - Tag("фемдом", "femdom"), - Tag("фестиваль", "festival"), - Tag("фетиш", "fetish"), - Tag("фистинг", "fisting"), - Tag("фурри", "furry"), - Tag("футанари имеет парня", "futanari_on_boy"), - Tag("футджаб", "footfuck"), - Tag("цельный купальник", "full_swimsuit"), - Tag("цундэрэ", "tsundere"), - Tag("чулки", "hose"), - Tag("шалава", "slut"), - Tag("шантаж", "blackmail"), - Tag("эксгибиционизм", "exhibitionism"), - Tag("эльфы", "elves"), - Tag("яндере", "yandere"), - ) - - private val tagsName = tagsList.map { - it.name - }.toTypedArray() - override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { super.setupPreferenceScreen(screen) EditTextPreference(screen.context).apply { 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 345b40660..f249aa76d 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 @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.mintmanga import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class MintManga : GroupLe("MintManga", "https://2.mintmanga.one", "ru") { @@ -17,75 +14,15 @@ class MintManga : GroupLe("MintManga", "https://2.mintmanga.one", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).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]) - } - } - is AgeList -> filter.state.forEach { age -> - if (age.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(age.id, arrayOf("=", "=in", "=ex")[age.state]) - } - } - is More -> filter.state.forEach { more -> - if (more.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(more.id, arrayOf("=", "=in", "=ex")[more.state]) - } - } - is FilList -> filter.state.forEach { fils -> - if (fils.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(fils.id, arrayOf("=", "=in", "=ex")[fils.state]) - } - } - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> {} - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - private class Category(categories: List) : Filter.Group("Категории", categories) - private class AgeList(ages: List) : Filter.Group("Возрастная рекомендация", ages) - private class More(moren: List) : Filter.Group("Прочее", moren) - private class FilList(fils: List) : Filter.Group("Фильтры", fils) - override fun getFilterList() = FilterList( OrderBy(), - Category(getCategoryList()), + CategoryList(getCategoryList()), GenreList(getGenreList()), AgeList(getAgeList()), - More(getMore()), - FilList(getFilList()), + MoreList(getMoreList()), + AdditionalFilterList(getAdditionalFilterList()), ) - private fun getFilList() = listOf( + private fun getAdditionalFilterList() = listOf( Genre("Высокий рейтинг", "s_high_rate"), Genre("Сингл", "s_single"), Genre("Для взрослых", "s_mature"), @@ -94,33 +31,33 @@ class MintManga : GroupLe("MintManga", "https://2.mintmanga.one", "ru") { Genre("Заброшен перевод", "s_abandoned_popular"), Genre("Длинная", "s_many_chapters"), Genre("Ожидает загрузки", "s_wait_upload"), - Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), ) - private fun getMore() = listOf( - Genre("Анонс", "el_6641"), + private fun getMoreList() = listOf( Genre("В цвете", "el_4614"), Genre("Веб", "el_1355"), - Genre("Выпуск приостановлен", "el_5232"), - Genre("Не Яой", "el_1874"), + Genre("На экранах", "el_6827"), + Genre("Не слэш", "el_1874"), Genre("Сборник", "el_1348"), ) private fun getAgeList() = listOf( - Genre("R(16+)", "el_3968"), - Genre("NC-17(18+)", "el_3969"), - Genre("R18+(18+)", "el_3990"), + Genre("G", "el_7040"), + Genre("NC-17", "el_3969"), + Genre("PG", "el_7041"), + Genre("PG-13", "el_7046"), + Genre("R", "el_3968"), ) private fun getCategoryList() = listOf( Genre("OEL-манга", "el_6637"), - Genre("Додзинси", "el_1332"), Genre("Арт", "el_2220"), + Genre("Додзинси", "el_1332"), Genre("Ёнкома", "el_2741"), Genre("Комикс", "el_1903"), Genre("Манга", "el_6421"), Genre("Манхва", "el_1873"), Genre("Маньхуа", "el_1875"), - Genre("Ранобэ", "el_5688"), ) private fun getGenreList() = listOf( @@ -128,42 +65,38 @@ class MintManga : GroupLe("MintManga", "https://2.mintmanga.one", "ru") { Genre("боевые искусства", "el_1334"), Genre("гарем", "el_1333"), Genre("гендерная интрига", "el_1347"), - Genre("героическое фэнтези", "el_1337"), + Genre("девушки", "el_1320"), Genre("детектив", "el_1343"), Genre("дзёсэй", "el_1349"), Genre("драма", "el_1310"), - Genre("игра", "el_5229"), - Genre("исэкай", "el_6420"), + Genre("женщины", "el_1315"), Genre("история", "el_1311"), + Genre("исэкай", "el_6420"), Genre("киберпанк", "el_1351"), Genre("комедия", "el_1328"), - Genre("меха", "el_1318"), + Genre("мужчины", "el_1336"), + Genre("музыка", "el_6585"), Genre("научная фантастика", "el_1325"), - Genre("омегаверс", "el_5676"), + Genre("пародия", "el_6595"), Genre("повседневность", "el_1327"), Genre("постапокалиптика", "el_1342"), Genre("приключения", "el_1322"), Genre("психология", "el_1335"), Genre("романтика", "el_1313"), - Genre("самурайский боевик", "el_1316"), Genre("сверхъестественное", "el_1350"), Genre("сёдзё", "el_1314"), - Genre("сёдзё-ай", "el_1320"), Genre("сёнэн", "el_1326"), - Genre("сёнэн-ай", "el_1330"), Genre("спорт", "el_1321"), Genre("сэйнэн", "el_1329"), Genre("сянься", "el_6631"), Genre("трагедия", "el_1344"), Genre("триллер", "el_1341"), Genre("ужасы", "el_1317"), - Genre("уся", "el_6632"), Genre("фэнтези", "el_1323"), Genre("школа", "el_1319"), Genre("эротика", "el_1340"), Genre("этти", "el_1354"), - Genre("юри", "el_1315"), - Genre("яой", "el_1336"), + Genre("юноши", "el_1330"), ) override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { 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 d47d2dac5..4ad7025a4 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 @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.readmanga import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class ReadManga : GroupLe("ReadManga", "https://zz.readmanga.io", "ru") { @@ -17,76 +14,16 @@ class ReadManga : GroupLe("ReadManga", "https://zz.readmanga.io", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).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]) - } - } - is AgeList -> filter.state.forEach { age -> - if (age.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(age.id, arrayOf("=", "=in", "=ex")[age.state]) - } - } - is More -> filter.state.forEach { more -> - if (more.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(more.id, arrayOf("=", "=in", "=ex")[more.state]) - } - } - is FilList -> filter.state.forEach { fils -> - if (fils.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(fils.id, arrayOf("=", "=in", "=ex")[fils.state]) - } - } - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> {} - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - private class Category(categories: List) : Filter.Group("Категории", categories) - private class AgeList(ages: List) : Filter.Group("Возрастная рекомендация", ages) - private class More(moren: List) : Filter.Group("Прочее", moren) - private class FilList(fils: List) : Filter.Group("Фильтры", fils) - override fun getFilterList() = FilterList( OrderBy(), - Category(getCategoryList()), + CategoryList(getCategoryList()), GenreList(getGenreList()), AgeList(getAgeList()), - More(getMore()), - FilList(getFilList()), + MoreList(getMoreList()), + AdditionalFilterList(getAdditionalFilterList()), ) - private fun getFilList() = listOf( + private fun getAdditionalFilterList() = listOf( Genre("Высокий рейтинг", "s_high_rate"), Genre("Сингл", "s_single"), Genre("Для взрослых", "s_mature"), @@ -95,20 +32,23 @@ class ReadManga : GroupLe("ReadManga", "https://zz.readmanga.io", "ru") { Genre("Заброшен перевод", "s_abandoned_popular"), Genre("Длинная", "s_many_chapters"), Genre("Ожидает загрузки", "s_wait_upload"), - Genre("Продается", "s_sale"), + Genre("Лицензия", "s_sale"), Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), ) - private fun getMore() = listOf( - Genre("Анонс", "el_9578"), + private fun getMoreList() = listOf( Genre("В цвете", "el_7290"), Genre("Веб", "el_2160"), + Genre("На экранах", "el_9795"), Genre("Сборник", "el_2157"), ) private fun getAgeList() = listOf( - Genre("G(0+)", "el_6180"), - Genre("PG-13(12+)", "el_6181"), - Genre("PG(16+)", "el_6179"), + Genre("G (0+)", "el_6180"), + Genre("PG-13 (12+)", "el_6181"), + Genre("PG (16+)", "el_6179"), + Genre("NC-17 (17+)", "el_9848"), + Genre("R (17+)", "el_9847"), ) private fun getCategoryList() = listOf( @@ -127,37 +67,30 @@ class ReadManga : GroupLe("ReadManga", "https://zz.readmanga.io", "ru") { Genre("боевые искусства", "el_2143"), Genre("гарем", "el_2142"), Genre("гендерная интрига", "el_2156"), - Genre("героическое фэнтези", "el_2146"), Genre("детектив", "el_2152"), Genre("дзёсэй", "el_2158"), Genre("драма", "el_2118"), + Genre("история", "el_2119"), Genre("игра", "el_2154"), Genre("исэкай", "el_9450"), - Genre("история", "el_2119"), Genre("киберпанк", "el_8032"), Genre("кодомо", "el_2137"), Genre("комедия", "el_2136"), - Genre("махо-сёдзё", "el_2147"), - Genre("меха", "el_2126"), + Genre("музыка", "el_9514"), Genre("научная фантастика", "el_2133"), + Genre("пародия", "el_9524"), Genre("повседневность", "el_2135"), Genre("постапокалиптика", "el_2151"), Genre("приключения", "el_2130"), Genre("психология", "el_2144"), Genre("романтика", "el_2121"), - Genre("самурайский боевик", "el_2124"), - Genre("сверхъестественное", "el_2159"), Genre("сёдзё", "el_2122"), - Genre("сёдзё-ай", "el_2128"), Genre("сёнэн", "el_2134"), - Genre("сёнэн-ай", "el_2139"), Genre("спорт", "el_2129"), Genre("сэйнэн", "el_2138"), - Genre("сянься", "el_9561"), Genre("трагедия", "el_2153"), Genre("триллер", "el_2150"), Genre("ужасы", "el_2125"), - Genre("уся", "el_9560"), Genre("фэнтези", "el_2131"), Genre("школа", "el_2127"), Genre("этти", "el_2149"), diff --git a/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt b/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt index a74b0b571..af017add7 100644 --- a/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt +++ b/src/ru/rumix/src/eu/kanade/tachiyomi/extension/ru/rumix/RuMIX.kt @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.rumix import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class RuMIX : GroupLe("RuMIX", "https://rumix.me", "ru") { @@ -15,34 +12,88 @@ class RuMIX : GroupLe("RuMIX", "https://rumix.me", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).forEach { filter -> - when (filter) { - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> return@forEach - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - override fun getFilterList() = FilterList( OrderBy(), + CategoryList(getCategoryList()), + GenreList(getGenreList()), + AgeList(getAgeList()), + AdditionalFilterList(getAdditionalFilterList()), + ) + + private fun getAdditionalFilterList() = listOf( + Genre("Высокий рейтинг", "s_high_rate"), + Genre("Сингл", "s_single"), + Genre("Для взрослых", "s_mature"), + Genre("Завершенная", "s_completed"), + Genre("Переведено", "s_translated"), + Genre("Заброшен перевод", "s_abandoned_popular"), + Genre("Длинная", "s_many_chapters"), + Genre("Ожидает загрузки", "s_wait_upload"), + Genre("Онгоинг", "s_ongoing"), + ) + + private fun getAgeList() = listOf( + Genre("0+", "el_9154"), + Genre("6+", "el_9155"), + Genre("12+", "el_9156"), + Genre("16+", "el_9139"), + Genre("18+", "el_9145"), + Genre("G", "el_6180"), + Genre("PG", "el_6179"), + Genre("PG-13", "el_6181"), + ) + + private fun getCategoryList() = listOf( + Genre("BD", "el_9142"), + Genre("В цвете", "el_7290"), + Genre("Веб", "el_2160"), + 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"), + Genre("вампиры", "el_2148"), + Genre("вестерн", "el_9150"), + Genre("гарем", "el_2142"), + Genre("гендерная интрига", "el_2156"), + Genre("героическое фэнтези", "el_2146"), + Genre("детектив", "el_2152"), + Genre("дзёсэй", "el_2158"), + Genre("драма", "el_2118"), + Genre("игра", "el_2154"), + Genre("история", "el_2119"), + Genre("киберпанк", "el_8032"), + Genre("кодомо", "el_2137"), + Genre("комедия", "el_2136"), + Genre("махо-сёдзё", "el_2147"), + Genre("меха", "el_2126"), + Genre("мистика", "el_9151"), + Genre("научная фантастика", "el_2133"), + Genre("повседневность", "el_2135"), + Genre("постапокалиптика", "el_2151"), + Genre("приключения", "el_2130"), + Genre("психология", "el_2144"), + Genre("романтика", "el_2121"), + Genre("самурайский боевик", "el_2124"), + Genre("сверхъестественное", "el_2159"), + Genre("сёдзё", "el_2122"), + Genre("сёнэн", "el_2134"), + Genre("спорт", "el_2129"), + Genre("сэйнэн", "el_2138"), + Genre("трагедия", "el_2153"), + Genre("триллер", "el_2150"), + Genre("ужасы", "el_2125"), + Genre("фантастика", "el_9153"), + Genre("фэнтези", "el_2131"), + Genre("школа", "el_2127"), + Genre("этти", "el_2149"), ) override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { diff --git a/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt b/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt index bb20e2546..48866593c 100644 --- a/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt +++ b/src/ru/seimanga/src/eu/kanade/tachiyomi/extension/ru/seimanga/SeiManga.kt @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.seimanga import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class SeiManga : GroupLe("SeiManga", "https://1.seimanga.me", "ru") { @@ -15,75 +12,15 @@ class SeiManga : GroupLe("SeiManga", "https://1.seimanga.me", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).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]) - } - } - is AgeList -> filter.state.forEach { age -> - if (age.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(age.id, arrayOf("=", "=in", "=ex")[age.state]) - } - } - is More -> filter.state.forEach { more -> - if (more.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(more.id, arrayOf("=", "=in", "=ex")[more.state]) - } - } - is FilList -> filter.state.forEach { fils -> - if (fils.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(fils.id, arrayOf("=", "=in", "=ex")[fils.state]) - } - } - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> {} - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - private class Category(categories: List) : Filter.Group("Категории", categories) - private class AgeList(ages: List) : Filter.Group("Возрастная рекомендация", ages) - private class More(moren: List) : Filter.Group("Прочее", moren) - private class FilList(fils: List) : Filter.Group("Фильтры", fils) - override fun getFilterList() = FilterList( OrderBy(), - Category(getCategoryList()), + CategoryList(getCategoryList()), GenreList(getGenreList()), AgeList(getAgeList()), - More(getMore()), - FilList(getFilList()), + MoreList(getMoreList()), + AdditionalFilterList(getAdditionalFilterList()), ) - private fun getFilList() = listOf( + private fun getAdditionalFilterList() = listOf( Genre("Высокий рейтинг", "s_high_rate"), Genre("Сингл", "s_single"), Genre("Для взрослых", "s_mature"), @@ -92,33 +29,29 @@ class SeiManga : GroupLe("SeiManga", "https://1.seimanga.me", "ru") { Genre("Заброшен перевод", "s_abandoned_popular"), Genre("Длинная", "s_many_chapters"), Genre("Ожидает загрузки", "s_wait_upload"), - Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), ) - private fun getMore() = listOf( - Genre("Анонс", "el_6641"), + private fun getMoreList() = listOf( Genre("В цвете", "el_4614"), Genre("Веб", "el_1355"), - Genre("Выпуск приостановлен", "el_5232"), - Genre("Не Яой", "el_1874"), + Genre("На экранах", "el_6827"), Genre("Сборник", "el_1348"), ) private fun getAgeList() = listOf( - Genre("R(16+)", "el_3968"), - Genre("NC-17(18+)", "el_3969"), - Genre("R18+(18+)", "el_3990"), + Genre("NC-17", "el_3969"), + Genre("R", "el_3968"), ) private fun getCategoryList() = listOf( Genre("OEL-манга", "el_6637"), - Genre("Додзинси", "el_1332"), Genre("Арт", "el_2220"), + Genre("Додзинси", "el_1332"), Genre("Ёнкома", "el_2741"), Genre("Комикс", "el_1903"), Genre("Манга", "el_6421"), Genre("Манхва", "el_1873"), Genre("Маньхуа", "el_1875"), - Genre("Ранобэ", "el_5688"), ) private fun getGenreList() = listOf( @@ -126,42 +59,33 @@ class SeiManga : GroupLe("SeiManga", "https://1.seimanga.me", "ru") { Genre("боевые искусства", "el_1334"), Genre("гарем", "el_1333"), Genre("гендерная интрига", "el_1347"), - Genre("героическое фэнтези", "el_1337"), Genre("детектив", "el_1343"), Genre("дзёсэй", "el_1349"), Genre("драма", "el_1310"), - Genre("игра", "el_5229"), - Genre("исэкай", "el_6420"), Genre("история", "el_1311"), + Genre("исэкай", "el_6420"), Genre("киберпанк", "el_1351"), Genre("комедия", "el_1328"), - Genre("меха", "el_1318"), + Genre("музыка", "el_6585"), Genre("научная фантастика", "el_1325"), - Genre("омегаверс", "el_5676"), + Genre("пародия", "el_6595"), Genre("повседневность", "el_1327"), Genre("постапокалиптика", "el_1342"), Genre("приключения", "el_1322"), Genre("психология", "el_1335"), Genre("романтика", "el_1313"), - Genre("самурайский боевик", "el_1316"), Genre("сверхъестественное", "el_1350"), Genre("сёдзё", "el_1314"), - Genre("сёдзё-ай", "el_1320"), Genre("сёнэн", "el_1326"), - Genre("сёнэн-ай", "el_1330"), Genre("спорт", "el_1321"), Genre("сэйнэн", "el_1329"), - Genre("сянься", "el_6631"), Genre("трагедия", "el_1344"), Genre("триллер", "el_1341"), Genre("ужасы", "el_1317"), - Genre("уся", "el_6632"), Genre("фэнтези", "el_1323"), Genre("школа", "el_1319"), Genre("эротика", "el_1340"), Genre("этти", "el_1354"), - Genre("юри", "el_1315"), - Genre("яой", "el_1336"), ) override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { diff --git a/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt b/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt index 420fe9056..0af5b4408 100644 --- a/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt +++ b/src/ru/selfmanga/src/eu/kanade/tachiyomi/extension/ru/selfmanga/SelfManga.kt @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.selfmanga import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") { @@ -17,70 +14,53 @@ class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).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]) - } - } - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> return@forEach - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - private class Category(categories: List) : Filter.Group("Категории", categories) - override fun getFilterList() = FilterList( OrderBy(), - Category(getCategoryList()), + CategoryList(getCategoryList()), GenreList(getGenreList()), + MoreList(getMoreList()), + AdditionalFilterList(getAdditionalFilterList()), + ) + + private fun getAdditionalFilterList() = listOf( + Genre("Высокий рейтинг", "s_high_rate"), + Genre("Сингл", "s_single"), + Genre("Для взрослых", "s_mature"), + Genre("Завершенная", "s_completed"), + Genre("Длинная", "s_many_chapters"), + Genre("Ожидает загрузки", "s_wait_upload"), + Genre("Лицензия", "s_sale"), + Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), + ) + + private fun getMoreList() = listOf( + Genre("В цвете", "el_6015"), + Genre("Начинающий", "el_6013"), + Genre("Нейросетевой арт", "el_6317"), + Genre("Продвинутый", "el_6014"), ) private fun getCategoryList() = listOf( - Genre("Артбук", "el_5894"), - Genre("Веб", "el_2160"), + Genre("Арт", "el_5894"), + Genre("Вебтун", "el_2160"), + Genre("Додзинси", "el_2141"), Genre("Журнал", "el_4983"), - Genre("Ранобэ", "el_5215"), + Genre("Комикс", "el_6011"), + Genre("Манга", "el_6010"), Genre("Сборник", "el_2157"), ) private fun getGenreList() = listOf( + Genre("альтернативная история", "el_6026"), Genre("боевик", "el_2155"), Genre("боевые искусства", "el_2143"), + Genre("вампиры", "el_2148"), Genre("гарем", "el_2142"), Genre("гендерная интрига", "el_2156"), Genre("героическое фэнтези", "el_2146"), Genre("детектив", "el_2152"), Genre("дзёсэй", "el_2158"), - Genre("додзинси", "el_2141"), Genre("драма", "el_2118"), Genre("ёнкома", "el_2161"), Genre("история", "el_2119"), @@ -95,9 +75,7 @@ class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") { Genre("романтика", "el_2121"), Genre("сверхъестественное", "el_2159"), Genre("сёдзё", "el_2122"), - Genre("сёдзё-ай", "el_2128"), Genre("сёнэн", "el_2134"), - Genre("сёнэн-ай", "el_2139"), Genre("спорт", "el_2129"), Genre("сэйнэн", "el_5838"), Genre("трагедия", "el_2153"), @@ -106,6 +84,7 @@ class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") { Genre("фантастика", "el_2140"), Genre("фэнтези", "el_2131"), Genre("школа", "el_2127"), + Genre("эротика", "el_6012"), Genre("этти", "el_4982"), ) diff --git a/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt b/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt index 751c4c481..a637e3780 100644 --- a/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt +++ b/src/ru/usagi/src/eu/kanade/tachiyomi/extension/ru/usagi/Usagi.kt @@ -3,11 +3,8 @@ package eu.kanade.tachiyomi.extension.ru.usagi import android.widget.Toast import androidx.preference.EditTextPreference import eu.kanade.tachiyomi.multisrc.grouple.GroupLe -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import keiyoushi.utils.getPreferences -import okhttp3.Request class Usagi : GroupLe("Usagi", "https://web.usagi.one/", "ru") { @@ -15,75 +12,15 @@ class Usagi : GroupLe("Usagi", "https://web.usagi.one/", "ru") { override val baseUrl by lazy { getPrefBaseUrl() } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = super.searchMangaRequest(page, query, filters).url.newBuilder() - (if (filters.isEmpty()) getFilterList().reversed() else filters.reversed()).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]) - } - } - is AgeList -> filter.state.forEach { age -> - if (age.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(age.id, arrayOf("=", "=in", "=ex")[age.state]) - } - } - is More -> filter.state.forEach { more -> - if (more.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(more.id, arrayOf("=", "=in", "=ex")[more.state]) - } - } - is FilList -> filter.state.forEach { fils -> - if (fils.state != Filter.TriState.STATE_IGNORE) { - url.addQueryParameter(fils.id, arrayOf("=", "=in", "=ex")[fils.state]) - } - } - is OrderBy -> { - if (url.toString().contains("&") && filter.state < 6) { - url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE, USER_RATING")[filter.state]) - } else { - val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state] - return GET("$baseUrl/list?sortType=$ord&offset=${50 * (page - 1)}", headers) - } - } - else -> {} - } - } - return if (url.toString().contains("&")) { - GET(url.toString().replace("=%3D", "="), headers) - } else { - popularMangaRequest(page) - } - } - - private class OrderBy : Filter.Select( - "Сортировка", - arrayOf("По популярности", "Популярно сейчас", "По году", "По имени", "Новинки", "По дате обновления", "По рейтингу"), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Жанры", genres) - private class Category(categories: List) : Filter.Group("Категории", categories) - private class AgeList(ages: List) : Filter.Group("Возрастная рекомендация", ages) - private class More(moren: List) : Filter.Group("Прочее", moren) - private class FilList(fils: List) : Filter.Group("Фильтры", fils) - override fun getFilterList() = FilterList( OrderBy(), - Category(getCategoryList()), + CategoryList(getCategoryList()), GenreList(getGenreList()), AgeList(getAgeList()), - More(getMore()), - FilList(getFilList()), + MoreList(getMoreList()), + AdditionalFilterList(getAdditionalFilterList()), ) - private fun getFilList() = listOf( + private fun getAdditionalFilterList() = listOf( Genre("Высокий рейтинг", "s_high_rate"), Genre("Сингл", "s_single"), Genre("Для взрослых", "s_mature"), @@ -92,10 +29,10 @@ class Usagi : GroupLe("Usagi", "https://web.usagi.one/", "ru") { Genre("Заброшен перевод", "s_abandoned_popular"), Genre("Длинная", "s_many_chapters"), Genre("Ожидает загрузки", "s_wait_upload"), - Genre("Лицензия", "s_sale"), Genre("Белые жанры", "s_not_pessimized"), + Genre("Онгоинг", "s_ongoing"), ) - private fun getMore() = listOf( + private fun getMoreList() = listOf( Genre("В цвете", "el_7290"), Genre("Веб", "el_2160"), Genre("На экранах", "el_9795"), @@ -126,31 +63,27 @@ class Usagi : GroupLe("Usagi", "https://web.usagi.one/", "ru") { Genre("боевые искусства", "el_2143"), Genre("гарем", "el_2142"), Genre("гендерная интрига", "el_2156"), - Genre("героическое фэнтези", "el_2146"), Genre("детектив", "el_2152"), Genre("дзёсэй", "el_2158"), Genre("драма", "el_2118"), - Genre("игра", "el_2154"), Genre("история", "el_2119"), Genre("исэкай", "el_9450"), Genre("киберпанк", "el_8032"), Genre("кодомо", "el_2137"), Genre("комедия", "el_2136"), - Genre("махо-сёдзё", "el_2147"), - Genre("меха", "el_2126"), + Genre("музыка", "el_9514"), Genre("научная фантастика", "el_2133"), + Genre("пародия", "el_9524"), Genre("повседневность", "el_2135"), Genre("постапокалиптика", "el_2151"), Genre("приключения", "el_2130"), Genre("психология", "el_2144"), Genre("романтика", "el_2121"), - Genre("самурайский боевик", "el_2124"), Genre("сверхъестественное", "el_2159"), Genre("сёдзё", "el_2122"), Genre("сёнэн", "el_2134"), Genre("спорт", "el_2129"), Genre("сэйнэн", "el_2138"), - Genre("сянься", "el_9561"), Genre("трагедия", "el_2153"), Genre("триллер", "el_2150"), Genre("ужасы", "el_2125"),