From afd337adad2e1d627518e3fe3fdf535808cfa053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Pe=C3=B1a=20y=20Lillo?= <80992641+Diegopyl1209@users.noreply.github.com> Date: Mon, 8 May 2023 07:58:32 -0400 Subject: [PATCH] LegionAnime: small changes (#1588) * LegionAnime: A * LegionAnime: super bruh error --- src/es/legionanime/build.gradle | 2 +- .../es/legionanime/LegionAnime.kt | 345 ++++++++++-------- .../animeextension/es/legionanime/Utils.kt | 23 +- .../extractors/JkanimeExtractor.kt | 12 + 4 files changed, 218 insertions(+), 164 deletions(-) diff --git a/src/es/legionanime/build.gradle b/src/es/legionanime/build.gradle index 06523aa36..ec098f3f1 100644 --- a/src/es/legionanime/build.gradle +++ b/src/es/legionanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'LegionAnime' pkgNameSuffix = 'es.legionanime' extClass = '.LegionAnime' - extVersionCode = 18 + extVersionCode = 19 libVersion = '13' } diff --git a/src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/LegionAnime.kt b/src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/LegionAnime.kt index 317709f51..3f58e573d 100644 --- a/src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/LegionAnime.kt +++ b/src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/LegionAnime.kt @@ -7,7 +7,6 @@ import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.JkanimeExtractor import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.Mp4uploadExtractor import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.UqloadExtractor -import eu.kanade.tachiyomi.animeextension.es.legionanime.extractors.ZippyExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList @@ -20,7 +19,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor import eu.kanade.tachiyomi.lib.fembedextractor.FembedExtractor import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor -import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor import eu.kanade.tachiyomi.network.GET @@ -64,6 +62,8 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { private val headers1 = headersBuilder().add("json", jsonString).add("User-Agent", "android l3gi0n4N1mE %E6%9C%AC%E7%89%A9").build() + override fun animeDetailsRequest(anime: SAnime): Request = episodeListRequest(anime) + override fun animeDetailsParse(document: Document): SAnime { val jsonResponse = json.decodeFromString(document.body().text())["response"]!!.jsonObject val anime = jsonResponse["anime"]!!.jsonObject @@ -97,8 +97,7 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } } - override fun animeDetailsRequest(anime: SAnime): Request = episodeListRequest(anime) - + override fun episodeListRequest(anime: SAnime): Request = GET(anime.url, headers1) override fun episodeListParse(response: Response): List { val jsonResponse = json.decodeFromString(response.asJsoup().body().text()) val episodes = jsonResponse["response"]!!.jsonObject["episodes"]!!.jsonArray @@ -112,8 +111,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } } - override fun episodeListRequest(anime: SAnime): Request = GET(anime.url, headers1) - override fun latestUpdatesRequest(page: Int): Request { val body = FormBody.Builder().add("apyki", apyki).build() return POST( @@ -156,44 +153,74 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { - val body = FormBody.Builder().add("apyki", apyki).build() + val requestBody = FormBody.Builder().add("apyki", apyki).build() - val genreFilter = ((filters.find { it is TagFilter }) as? TagFilter)?.state ?: emptyList() - val excludeGenreFilter = (filters.find { it is ExcludeTagFilter } as? ExcludeTagFilter)?.state ?: emptyList() - val studioFilter = (filters.find { it is StudioFilter } as? StudioFilter)?.state ?: emptyList() - val stateFilter = (filters.find { it is StateFilter } as? StateFilter) ?: StateFilter() + val genreFilter = filters.getTagFilter()?.state ?: emptyList() + val excludeGenreFilter = filters.getExcludeTagFilter()?.state ?: emptyList() + val studioFilter = filters.getStudioFilter()?.state ?: emptyList() + val stateFilter = filters.getStateFilter() ?: StateFilter() + val orderByFilter = filters.getOrderByFilter() ?: OrderByFilter() - val genre = try { - if (genreFilter.isNotEmpty()) { - genreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() } - } else { - "" - } - } catch (e: Exception) { "" } + val genre = genreFilter.filter { it.state } + .map { genres[it.name] } + .joinToString("%2C") { it.toString() } + .takeIf { it.isNotEmpty() } ?: "" - val excludeGenre = if (excludeGenreFilter.isNotEmpty()) { - excludeGenreFilter.filter { it.state }.map { genres[it.name] }.joinToString("%2C") { it.toString() } - } else { - "" - } + val excludeGenre = excludeGenreFilter.filter { it.state } + .map { genres[it.name] } + .joinToString("%2C") { it.toString() } + .takeIf { it.isNotEmpty() } ?: "" - val studio = if (studioFilter.isNotEmpty()) { - studioFilter.filter { it.state }.map { studiosMap[it.name] }.joinToString("%2C") { it.toString() } - } else { - 0 - } + val studio = studioFilter.filter { it.state } + .map { studiosMap[it.name] } + .joinToString("%2C") { it.toString() } + .takeIf { it.isNotEmpty() } ?: "0" - val status = if (stateFilter.state != 0) stateFilter.toUriPart() else "" + val status = stateFilter.toUriPart() + val orderBy = orderByFilter.toUriPart() - val url = "$baseUrl/v2/directories?studio=$studio¬_genre=$excludeGenre&year=&orderBy=4&language=&type=&duration=&search=$query&letter=0&limit=24&genre=$genre&season=&page=${(page - 1) * 24}&status=$status" + val url = buildAnimeSearchUrl(query, page, genre, orderBy, excludeGenre, studio, status) return POST( url, headers = headers1, - body = body, + body = requestBody, ) } + private fun AnimeFilterList.getTagFilter() = find { it is TagFilter } as? TagFilter + private fun AnimeFilterList.getExcludeTagFilter() = find { it is ExcludeTagFilter } as? ExcludeTagFilter + private fun AnimeFilterList.getStudioFilter() = find { it is StudioFilter } as? StudioFilter + private fun AnimeFilterList.getStateFilter() = find { it is StateFilter } as? StateFilter + private fun AnimeFilterList.getOrderByFilter() = find { it is OrderByFilter } as? OrderByFilter + + private fun buildAnimeSearchUrl( + query: String, + page: Int, + genre: String?, + orderBy: String?, + excludeGenre: String?, + studio: String, + status: String?, + ): String { + val itemsPerPage = 24 + return "$baseUrl/v2/directories?" + + "studio=$studio&" + + "not_genre=$excludeGenre&" + + "year=&" + + "orderBy=$orderBy&" + + "language=&" + + "type=&" + + "duration=&" + + "search=$query&" + + "letter=0&" + + "limit=$itemsPerPage&" + + "genre=$genre&" + + "season=&" + + "page=${(page - 1) * itemsPerPage}&" + + "status=$status" + } + override fun searchAnimeParse(response: Response): AnimesPage { val responseJson = json.decodeFromString(response.asJsoup().body().text()) try { @@ -215,124 +242,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } } - override fun videoListParse(response: Response): List