fix(ar/witanime): Update baseUrl + fix latest anime page + fix video extractor (#2517)
This commit is contained in:
parent
cd76b43871
commit
e808670ed9
@ -7,7 +7,7 @@ ext {
|
|||||||
extName = 'WIT ANIME'
|
extName = 'WIT ANIME'
|
||||||
pkgNameSuffix = 'ar.witanime'
|
pkgNameSuffix = 'ar.witanime'
|
||||||
extClass = '.WitAnime'
|
extClass = '.WitAnime'
|
||||||
extVersionCode = 46
|
extVersionCode = 47
|
||||||
libVersion = '13'
|
libVersion = '13'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
|
|
||||||
override val name = "WIT ANIME"
|
override val name = "WIT ANIME"
|
||||||
|
|
||||||
override val baseUrl = "https://witanime.rest"
|
override val baseUrl = "https://witanime.pics"
|
||||||
|
|
||||||
override val lang = "ar"
|
override val lang = "ar"
|
||||||
|
|
||||||
@ -56,8 +56,12 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
override fun popularAnimeRequest(page: Int) = GET("$baseUrl/قائمة-الانمي/page/$page")
|
override fun popularAnimeRequest(page: Int) = GET("$baseUrl/قائمة-الانمي/page/$page")
|
||||||
|
|
||||||
override fun popularAnimeFromElement(element: Element) = SAnime.create().apply {
|
override fun popularAnimeFromElement(element: Element) = SAnime.create().apply {
|
||||||
setUrlWithoutDomain(element.selectFirst("a")!!.attr("href"))
|
element.selectFirst("a")!!.run {
|
||||||
element.selectFirst("img")!!.let {
|
attr("href").takeUnless { it.contains("javascript:") }
|
||||||
|
?: getEncodedUrl() // Get base64-encoded URLs
|
||||||
|
}.also { setUrlWithoutDomain(it) }
|
||||||
|
|
||||||
|
element.selectFirst("img")!!.also {
|
||||||
title = it.attr("alt")
|
title = it.attr("alt")
|
||||||
thumbnail_url = it.attr("abs:src")
|
thumbnail_url = it.attr("abs:src")
|
||||||
}
|
}
|
||||||
@ -126,10 +130,14 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
return document.select("ul#episode-servers li a")
|
return document.select("ul#episode-servers li a")
|
||||||
.distinctBy { it.text().substringBefore(" -") } // remove duplicates by server name
|
.distinctBy { it.text().substringBefore(" -") } // remove duplicates by server name
|
||||||
.parallelMap {
|
.parallelCatchingFlatMap {
|
||||||
val url = it.getEncodedUrl()
|
val url = it.attr("data-url")
|
||||||
runCatching { extractVideos(url) }.getOrElse { emptyList() }
|
.takeUnless(String::isBlank)
|
||||||
}.flatten()
|
?.let { String(Base64.decode(it, Base64.DEFAULT)) }
|
||||||
|
?: it.getEncodedUrl()
|
||||||
|
|
||||||
|
extractVideos(url)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val soraPlayExtractor by lazy { SoraPlayExtractor(client) }
|
private val soraPlayExtractor by lazy { SoraPlayExtractor(client) }
|
||||||
@ -229,9 +237,13 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ============================= Utilities ==============================
|
// ============================= Utilities ==============================
|
||||||
private inline fun <A, B> Iterable<A>.parallelMap(crossinline f: suspend (A) -> B): List<B> =
|
private inline fun <A, B> Iterable<A>.parallelCatchingFlatMap(crossinline f: suspend (A) -> Iterable<B>): List<B> =
|
||||||
runBlocking {
|
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 {
|
private fun getRealDoc(document: Document): Document {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user