From 095b534f98c4c2278ff865f6d25c7e25222ef4b5 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:41:39 +0000 Subject: [PATCH] feat(ar/WitAnime): Add Okru extractor + general refactoration (#1687) --- src/ar/witanime/build.gradle | 8 +- .../animeextension/ar/witanime/WitAnime.kt | 295 ++++++++---------- .../extractors/DailymotionExtractor.kt | 23 +- .../witanime/extractors/SoraPlayExtractor.kt | 22 +- 4 files changed, 151 insertions(+), 197 deletions(-) diff --git a/src/ar/witanime/build.gradle b/src/ar/witanime/build.gradle index 4f74bd8b2..4b77c34d9 100644 --- a/src/ar/witanime/build.gradle +++ b/src/ar/witanime/build.gradle @@ -1,11 +1,13 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +} ext { extName = 'WIT ANIME' pkgNameSuffix = 'ar.witanime' extClass = '.WitAnime' - extVersionCode = 37 + extVersionCode = 38 libVersion = '13' } diff --git a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt index 5001c7823..0430f077b 100755 --- a/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt +++ b/src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt @@ -14,9 +14,14 @@ 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.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response @@ -38,212 +43,152 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val client: OkHttpClient = network.cloudflareClient + override fun headersBuilder() = super.headersBuilder().add("Referer", baseUrl) + private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - // ================================== popular ================================== + // ============================== Popular =============================== + override fun popularAnimeSelector() = "div.anime-list-content div.row div.anime-card-poster div.ehover6" - override fun popularAnimeSelector(): String = "div.anime-list-content div:nth-child(1) div.col-lg-2 div.anime-card-container" - - override fun popularAnimeNextPageSelector(): String = "ul.pagination a.next" + override fun popularAnimeNextPageSelector() = "ul.pagination a.next" override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/قائمة-الانمي/page/$page") - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.setUrlWithoutDomain(element.select("div.anime-card-poster a").attr("href")) - anime.title = element.select("div.anime-card-poster div.ehover6 img").attr("alt") - anime.thumbnail_url = element.selectFirst("div.anime-card-poster div.ehover6 img")!!.attr("abs:src") - return anime - } - - // ================================== episodes ================================== - - override fun episodeListParse(response: Response): List { - val episodes = mutableListOf() - fun episodeExtract(element: Element): SEpisode { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(element.attr("href")) - episode.name = element.text() - return episode + override fun popularAnimeFromElement(element: Element) = SAnime.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href")) + element.selectFirst("img")!!.let { + title = it.attr("alt") + thumbnail_url = it.attr("abs:src") } - fun addEpisodes(document: Document) { - /*if (document.select(episodeListSelector()).isNullOrEmpty()) - document.select("div.all-episodes ul.all-episodes-list li a").forEach { episodes.add(episodeExtract(it)) } - else*/ - document.select(episodeListSelector()).map { episodes.add(episodeFromElement(it)) } - } - addEpisodes(response.asJsoup()) - return episodes.reversed() } - override fun episodeListSelector() = "div.all-episodes ul.all-episodes-list li, div.ehover6 > div.episodes-card-title > h3" + // ============================== Episodes ============================== + override fun episodeListParse(response: Response) = super.episodeListParse(response).reversed() - override fun episodeFromElement(element: Element): SEpisode { - val episode = SEpisode.create() - episode.setUrlWithoutDomain(element.select("a").attr("href")) - episode.name = element.select("a").text() - val episodeNumberString = element.select("a").text().removePrefix("الحلقة ").removePrefix("الخاصة ").removePrefix("الأونا ").removePrefix("الفلم ").removePrefix("الأوفا ") - episode.episode_number = episodeNumberString.toFloat() - return episode + override fun episodeListSelector() = "div.ehover6 > div.episodes-card-title > h3 a" + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + name = element.text() + episode_number = name.substringAfterLast(" ").toFloatOrNull() ?: 0F } - // ================================== video urls ================================== - + // ============================ Video Links ============================= override fun videoListParse(response: Response): List