From b48cae3c3cfdd42d05119cd204fa2da039233f6e Mon Sep 17 00:00:00 2001 From: imper1aldev Date: Mon, 30 Oct 2023 06:52:35 -0600 Subject: [PATCH] refactor(src/es): Improvements for the main spanish extensions (#2446) --- .../lib/voeextractor/VoeExtractor.kt | 7 +- src/es/animefenix/build.gradle | 8 +- .../es/animefenix/Animefenix.kt | 312 ++++++++++-------- src/es/animeflv/build.gradle | 3 +- .../animeextension/es/animeflv/AnimeFlv.kt | 102 +++--- src/es/animeid/build.gradle | 2 +- .../animeextension/es/animeid/AnimeID.kt | 101 ++---- src/es/animelatinohd/build.gradle | 3 +- .../es/animelatinohd/AnimeLatinoHD.kt | 210 ++++++------ src/es/animemovil/build.gradle | 2 +- .../es/animemovil/AnimeMovil.kt | 102 +++--- src/es/animeyt/build.gradle | 2 +- .../animeextension/es/animeyt/Animeyt.kt | 83 +++-- src/es/asialiveaction/build.gradle | 18 +- .../es/asialiveaction/AsiaLiveAction.kt | 238 ++++++++++--- .../extractors/VidGuardExtractor.kt | 124 +++++++ src/es/cuevana/build.gradle | 18 +- .../animeextension/es/cuevana/CuevanaCh.kt | 278 +++++++++++----- .../animeextension/es/cuevana/CuevanaEu.kt | 113 +++++-- .../es/cuevana/CuevanaFactory.kt | 4 +- src/es/doramasflix/build.gradle | 16 +- .../es/doramasflix/Doramasflix.kt | 286 +++++++++++++--- src/es/gnula/build.gradle | 11 +- .../animeextension/es/gnula/Gnula.kt | 301 ++++++++++------- src/es/hentaila/build.gradle | 4 +- .../hentaila/res/mipmap-hdpi/ic_launcher.png | Bin 11997 -> 2226 bytes .../hentaila/res/mipmap-mdpi/ic_launcher.png | Bin 11997 -> 1197 bytes .../hentaila/res/mipmap-xhdpi/ic_launcher.png | Bin 11997 -> 2815 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 11997 -> 4764 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 11997 -> 7021 bytes .../animeextension/es/hentaila/Hentaila.kt | 131 ++++---- src/es/jkanime/build.gradle | 3 +- .../animeextension/es/jkanime/Jkanime.kt | 126 ++++--- src/es/locopelis/build.gradle | 2 +- .../animeextension/es/locopelis/LocoPelis.kt | 97 +++--- src/es/metroseries/build.gradle | 2 +- .../es/metroseries/MetroSeries.kt | 219 ++++++++---- src/es/pelisforte/build.gradle | 2 +- .../es/pelisforte/PelisForte.kt | 40 +-- src/es/pelisplushd/build.gradle | 7 +- .../es/pelisplushd/Pelisplushd.kt | 292 +++++++++------- .../es/pelisplushd/Pelisplusph.kt | 259 ++++++++++----- .../es/pelisplushd/Pelisplusto.kt | 242 +++++++++----- 43 files changed, 2452 insertions(+), 1318 deletions(-) create mode 100644 src/es/asialiveaction/src/eu/kanade/tachiyomi/animeextension/es/asialiveaction/extractors/VidGuardExtractor.kt diff --git a/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt b/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt index 5bda3d466..53a86fc81 100644 --- a/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt +++ b/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt @@ -6,14 +6,17 @@ import eu.kanade.tachiyomi.util.asJsoup import okhttp3.OkHttpClient class VoeExtractor(private val client: OkHttpClient) { - fun videoFromUrl(url: String, quality: String? = null): Video? { + fun videoFromUrl(url: String, quality: String? = null, prefix: String = ""): Video? { val document = client.newCall(GET(url)).execute().asJsoup() val script = document.selectFirst("script:containsData(const sources),script:containsData(var sources)") ?.data() ?: return null val videoUrl = script.substringAfter("hls': '").substringBefore("'") val resolution = script.substringAfter("video_height': ").substringBefore(",") - val qualityStr = quality ?: "VoeCDN(${resolution}p)" + val qualityStr = when { + prefix.isNotEmpty() -> "$prefix${resolution}p" + else -> quality ?: "VoeCDN(${resolution}p)" + } return Video(url, qualityStr, videoUrl) } } diff --git a/src/es/animefenix/build.gradle b/src/es/animefenix/build.gradle index 69fdf890f..db6a41764 100644 --- a/src/es/animefenix/build.gradle +++ b/src/es/animefenix/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Animefenix' pkgNameSuffix = 'es.animefenix' extClass = '.Animefenix' - extVersionCode = 29 + extVersionCode = 30 libVersion = '13' } @@ -13,11 +13,17 @@ dependencies { implementation(project(':lib-mp4upload-extractor')) implementation(project(':lib-streamtape-extractor')) implementation(project(':lib-yourupload-extractor')) + implementation(project(':lib-uqload-extractor')) implementation(project(':lib-okru-extractor')) implementation(project(':lib-burstcloud-extractor')) implementation(project(':lib-streamwish-extractor')) implementation(project(':lib-filemoon-extractor')) implementation(project(':lib-voe-extractor')) + implementation(project(':lib-streamlare-extractor')) + implementation(project(':lib-fastream-extractor')) + implementation(project(':lib-dood-extractor')) + implementation(project(':lib-upstream-extractor')) + implementation(project(':lib-streamhidevid-extractor')) } diff --git a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt index 46f60bee8..799f83618 100644 --- a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt +++ b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt @@ -7,30 +7,36 @@ import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.fastreamextractor.FastreamExtractor import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor +import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor +import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor +import eu.kanade.tachiyomi.lib.upstreamextractor.UpstreamExtractor +import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.net.URLDecoder -class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { +class Animefenix : ConfigurableAnimeSource, AnimeHttpSource() { override val name = "AnimeFenix" @@ -42,117 +48,43 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val client: OkHttpClient = network.cloudflareClient - private val preferences: SharedPreferences by lazy { - Injekt.get().getSharedPreferences("source_$id", 0x0000) - } + private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - override fun popularAnimeSelector(): String = "article.serie-card" + companion object { + private const val PREF_QUALITY_KEY = "preferred_quality" + private const val PREF_QUALITY_DEFAULT = "1080" + private val QUALITY_LIST = arrayOf("1080", "720", "480", "360") + + private const val PREF_SERVER_KEY = "preferred_server" + private const val PREF_SERVER_DEFAULT = "Amazon" + private val SERVER_LIST = arrayOf( + "YourUpload", "Voe", "Mp4Upload", "Doodstream", + "Upload", "BurstCloud", "Upstream", "StreamTape", + "Fastream", "Filemoon", "StreamWish", "Okru", + "Amazon", "AmazonES", "Fireload", "FileLions" + ) + } override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/animes?order=likes&page=$page") - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create().apply { - setUrlWithoutDomain( - element.select("figure.image a").attr("href"), - ) - title = element.select("div.title h3 a").text() - thumbnail_url = element.select("figure.image a img").attr("src") - description = element.select("div.serie-card__information p").text() - } - return anime - } - - override fun popularAnimeNextPageSelector(): String = "ul.pagination-list li a.pagination-link:contains(Siguiente)" - - override fun episodeListParse(response: Response): List { + override fun popularAnimeParse(response: Response): AnimesPage { val document = response.asJsoup() - - return document.select("ul.anime-page__episode-list.is-size-6 li").map { it -> - val epNum = it.select("a span").text().replace("Episodio", "") - SEpisode.create().apply { - episode_number = epNum.toFloat() - name = "Episodio $epNum" - setUrlWithoutDomain(it.select("a").attr("href")) + val elements = document.select("article.serie-card") + val nextPage = document.select("ul.pagination-list li a.pagination-link:contains(Siguiente)").any() + val animeList = elements.map { element -> + SAnime.create().apply { + setUrlWithoutDomain(element.select("figure.image a").attr("abs:href")) + title = element.select("div.title h3 a").text() + thumbnail_url = element.select("figure.image a img").attr("abs:src") + description = element.select("div.serie-card__information p").text() } } + return AnimesPage(animeList, nextPage) } - override fun episodeListSelector() = throw Exception("not used") + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/animes?order=added&page=$page") - override fun episodeFromElement(element: Element) = throw Exception("not used") - - override fun videoListParse(response: Response): List