From e808670ed98e8650c4baedd48fc3b83305db2141 Mon Sep 17 00:00:00 2001
From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com>
Date: Thu, 16 Nov 2023 11:42:48 -0300
Subject: [PATCH] fix(ar/witanime): Update baseUrl + fix latest anime page +
fix video extractor (#2517)
---
src/ar/witanime/build.gradle | 2 +-
.../animeextension/ar/witanime/WitAnime.kt | 30 +++++++++++++------
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/ar/witanime/build.gradle b/src/ar/witanime/build.gradle
index b73556728..929bcd226 100644
--- a/src/ar/witanime/build.gradle
+++ b/src/ar/witanime/build.gradle
@@ -7,7 +7,7 @@ ext {
extName = 'WIT ANIME'
pkgNameSuffix = 'ar.witanime'
extClass = '.WitAnime'
- extVersionCode = 46
+ extVersionCode = 47
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 5840b50de..5d1aa433b 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
@@ -34,7 +34,7 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override val name = "WIT ANIME"
- override val baseUrl = "https://witanime.rest"
+ override val baseUrl = "https://witanime.pics"
override val lang = "ar"
@@ -56,8 +56,12 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun popularAnimeRequest(page: Int) = GET("$baseUrl/قائمة-الانمي/page/$page")
override fun popularAnimeFromElement(element: Element) = SAnime.create().apply {
- setUrlWithoutDomain(element.selectFirst("a")!!.attr("href"))
- element.selectFirst("img")!!.let {
+ element.selectFirst("a")!!.run {
+ attr("href").takeUnless { it.contains("javascript:") }
+ ?: getEncodedUrl() // Get base64-encoded URLs
+ }.also { setUrlWithoutDomain(it) }
+
+ element.selectFirst("img")!!.also {
title = it.attr("alt")
thumbnail_url = it.attr("abs:src")
}
@@ -126,10 +130,14 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val document = response.asJsoup()
return document.select("ul#episode-servers li a")
.distinctBy { it.text().substringBefore(" -") } // remove duplicates by server name
- .parallelMap {
- val url = it.getEncodedUrl()
- runCatching { extractVideos(url) }.getOrElse { emptyList() }
- }.flatten()
+ .parallelCatchingFlatMap {
+ val url = it.attr("data-url")
+ .takeUnless(String::isBlank)
+ ?.let { String(Base64.decode(it, Base64.DEFAULT)) }
+ ?: it.getEncodedUrl()
+
+ extractVideos(url)
+ }
}
private val soraPlayExtractor by lazy { SoraPlayExtractor(client) }
@@ -229,9 +237,13 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
// ============================= Utilities ==============================
- private inline fun Iterable.parallelMap(crossinline f: suspend (A) -> B): List =
+ private inline fun Iterable.parallelCatchingFlatMap(crossinline f: suspend (A) -> Iterable): List =
runBlocking {
- map { async(Dispatchers.Default) { f(it) } }.awaitAll()
+ map {
+ async(Dispatchers.Default) {
+ runCatching { f(it) }.getOrElse { emptyList() }
+ }
+ }.awaitAll().flatten()
}
private fun getRealDoc(document: Document): Document {