fix(lib/dood-extractor)

This commit is contained in:
Dark25 2024-07-25 22:54:13 +02:00
parent 180cb35d55
commit f657b3df3a
68 changed files with 115 additions and 100 deletions

View file

@ -8,45 +8,61 @@ import okhttp3.OkHttpClient
class DoodExtractor(private val client: OkHttpClient) {
fun videoFromUrl(
url: String,
quality: String? = null,
redirect: Boolean = true,
externalSubs: List<Track> = emptyList(),
): Video? {
val newQuality = quality ?: ("Doodstream" + if (redirect) " mirror" else "")
fun videoFromUrl(url: String, quality: String? = null, externalSubs: List<Track> = emptyList(),): Video? {
return runCatching {
val response = client.newCall(GET(url)).execute()
val newUrl = if (redirect) response.request.url.toString() else url
val urlRegex = Regex("https://(.*?)/[de]/([0-9a-zA-Z]+)").find(url)!!
var updatedHost = urlRegex.groupValues[1].let {
if (it.endsWith(".cx") || it.endsWith(".wf")) {
"dood.so"
} else {
it
}
}
val mediaId = urlRegex.groupValues[2]
var webUrl = getUrl(updatedHost, mediaId)
val headers = doodHeaders(updatedHost)
val response = client.newCall(GET(webUrl, headers)).execute()
if (response.request.url.toString() != webUrl) {
updatedHost = Regex("(?://|\\.)([^/]+)").find(response.request.url.toString())?.groupValues?.get(1) ?: updatedHost
webUrl = getUrl(updatedHost, mediaId)
}
val updatedHeaders = headers.newBuilder().set("referer", webUrl).build()
val iframeMatch = Regex("""<iframe\s*src="([^"]+)""").find(response.body.string())
webUrl = if (iframeMatch != null) {
getUrl(updatedHost, iframeMatch.groupValues[1])
} else {
webUrl.replace("/d/", "/e/")
}
val html = client.newCall(GET(webUrl, updatedHeaders)).execute().body.string()
val subMatches = Regex("""dsplayer\.addRemoteTextTrack\(\{src:'([^']+)',\s*label:'([^']*)',kind:'captions'""").findAll(html)
val subTitles = mutableListOf<Track>()
subMatches.forEach {
val src = it.groupValues[1]
if (it.groupValues[1].length > 1) {
subTitles.add(Track(it.groupValues[1], if (src.startsWith("//")) "https:$src" else src))
}
}
val doodHost = Regex("https://(.*?)/").find(newUrl)!!.groupValues[1]
val content = response.body.string()
if (!content.contains("'/pass_md5/")) return null
val md5 = content.substringAfter("'/pass_md5/").substringBefore("',")
val token = md5.substringAfterLast("/")
val randomString = getRandomString()
val expiry = System.currentTimeMillis()
val videoUrlStart = client.newCall(
GET(
"https://$doodHost/pass_md5/$md5",
Headers.headersOf("referer", newUrl),
),
).execute().body.string()
val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry"
Video(newUrl, newQuality, videoUrl, headers = doodHeaders(doodHost), subtitleTracks = externalSubs)
val tokenMatch = Regex("""dsplayer\.hotkeys[^']+'([^']+).+?function\s*makePlay.+?return[^?]+([^"]+)""", RegexOption.DOT_MATCHES_ALL).find(html)
val token = tokenMatch!!.groupValues[2]
val videoUrl = "https://${updatedHost}${tokenMatch.groupValues[1]}"
val videoHtml = client.newCall(GET(videoUrl, updatedHeaders)).execute().body.string()
val vidSrc = if (videoHtml.contains("cloudflarestorage.")) {
videoHtml.trim()
} else {
videoHtml + getRandomString() + token + (System.currentTimeMillis() / 1000).toString()
}
Video(vidSrc, "Dood${ if (quality != null) ": $quality" else "" }", vidSrc, headers = updatedHeaders, subtitleTracks = externalSubs.ifEmpty { subTitles })
}.getOrNull()
}
fun videosFromUrl(
url: String,
quality: String? = null,
redirect: Boolean = true,
): List<Video> {
val video = videoFromUrl(url, quality, redirect)
return video?.let(::listOf) ?: emptyList<Video>()
fun videosFromUrl(url: String, quality: String? = null): List<Video> {
val video = videoFromUrl(url, quality)
return video?.let(::listOf) ?: emptyList()
}
private fun getUrl(host: String, mediaId: String) = "https://$host/d/$mediaId"
private fun getRandomString(length: Int = 10): String {
val allowedChars = ('A'..'Z') + ('a'..'z') + ('0'..'9')
return (1..length)

View file

@ -3,7 +3,7 @@ ext {
extClass = '.AnimeXin'
themePkg = 'animestream'
baseUrl = 'https://animexin.vip'
overrideVersionCode = 8
overrideVersionCode = 9
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Jav Guru'
extClass = '.JavGuru'
extVersionCode = 15
extVersionCode = 16
isNsfw = true
}

View file

@ -1,7 +1,7 @@
ext {
extName = 'Anime4up'
extClass = '.Anime4Up'
extVersionCode = 57
extVersionCode = 58
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AnimeLek'
extClass = '.AnimeLek'
extVersionCode = 30
extVersionCode = 31
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Animerco'
extClass = '.Animerco'
extVersionCode = 37
extVersionCode = 38
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'asia2tv'
extClass = '.Asia2TV'
extVersionCode = 18
extVersionCode = 19
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Egy Dead'
extClass = '.EgyDead'
extVersionCode = 12
extVersionCode = 13
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'MY CIMA'
extClass = '.MyCima'
extVersionCode = 22
extVersionCode = 23
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Tuktuk Cinema'
extClass = '.Tuktukcinema'
extVersionCode = 22
extVersionCode = 23
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'WIT ANIME'
extClass = '.WitAnime'
extVersionCode = 49
extVersionCode = 50
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Anime-Loads'
extClass = '.AnimeLoads'
extVersionCode = 15
extVersionCode = 16
isNsfw = true
}

View file

@ -1,7 +1,7 @@
ext {
extName = 'AnimeToast'
extClass = '.AnimeToast'
extVersionCode = 14
extVersionCode = 15
}
apply from: "$rootDir/common.gradle"

View file

@ -166,7 +166,6 @@ class AnimeToast : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
DoodExtractor(client).videoFromUrl(
link,
quality,
false,
)
if (video != null) {
videoList.add(video)
@ -224,7 +223,7 @@ class AnimeToast : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
) == true -> {
val quality = "DoodStream"
val video =
DoodExtractor(client).videoFromUrl(link, quality, false)
DoodExtractor(client).videoFromUrl(link, quality)
if (video != null) {
videoList.add(video)
}

View file

@ -1,7 +1,7 @@
ext {
extName = 'AniWorld'
extClass = '.AniWorld'
extVersionCode = 23
extVersionCode = 24
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'CineClix'
extClass = '.CineClix'
extVersionCode = 14
extVersionCode = 15
}
apply from: "$rootDir/common.gradle"

View file

@ -3,7 +3,7 @@ ext {
extClass = '.Cinemathek'
themePkg = 'dooplay'
baseUrl = 'https://cinemathek.net'
overrideVersionCode = 20
overrideVersionCode = 21
isNsfw = true
}

View file

@ -3,7 +3,7 @@ ext {
extClass = '.Kinoking'
themePkg = 'dooplay'
baseUrl = 'https://kinoking.cc'
overrideVersionCode = 21
overrideVersionCode = 22
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Movie2k'
extClass = '.Movie2k'
extVersionCode = 6
extVersionCode = 7
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Serienstream'
extClass = '.Serienstream'
extVersionCode = 18
extVersionCode = 19
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'StreamCloud'
extClass = '.StreamCloud'
extVersionCode = 8
extVersionCode = 9
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AllAnime'
extClass = '.AllAnime'
extVersionCode = 31
extVersionCode = 32
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Animension'
extClass = '.Animension'
extVersionCode = 20
extVersionCode = 21
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AsiaFlix'
extClass = '.AsiaFlix'
extVersionCode = 10
extVersionCode = 11
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AsianLoad'
extClass = '.AsianLoad'
extVersionCode = 39
extVersionCode = 40
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'DramaCool'
extClass = '.DramaCool'
extVersionCode = 48
extVersionCode = 49
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'GenoAnime'
extClass = '.GenoAnime'
extVersionCode = 33
extVersionCode = 34
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Gogoanime'
extClass = '.GogoAnime'
extVersionCode = 83
extVersionCode = 84
}
apply from: "$rootDir/common.gradle"

View file

@ -3,7 +3,7 @@ ext {
extClass = '.Multimovies'
themePkg = 'dooplay'
baseUrl = 'https://multimovies.art'
overrideVersionCode = 17
overrideVersionCode = 18
}
apply from: "$rootDir/common.gradle"

View file

@ -764,7 +764,7 @@ class AutoEmbedExtractor(private val client: OkHttpClient) {
RabbitStreamExtractor(client).videosFromUrl(videoUrl, headers = videoHeaders, prefix = prefix)
}
videoUrl.contains("https://dood") -> {
DoodExtractor(client).videoFromUrl(videoUrl, server.name, false)
DoodExtractor(client).videoFromUrl(videoUrl, server.name)
?.let(::listOf)
}
else -> null

View file

@ -1,7 +1,7 @@
ext {
extName = 'Animefenix'
extClass = '.Animefenix'
extVersionCode = 39
extVersionCode = 40
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AnimeLatinoHD'
extClass = '.AnimeLatinoHD'
extVersionCode = 32
extVersionCode = 33
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AnimeMovil'
extClass = '.AnimeMovil'
extVersionCode = 14
extVersionCode = 15
}
apply from: "$rootDir/common.gradle"

View file

@ -253,7 +253,7 @@ class AnimeMovil : ConfigurableAnimeSource, AnimeHttpSource() {
StreamWishExtractor(client, docHeaders).videosFromUrl(url, videoNameGen = { "StreamWish:$it" }).also(videoList::addAll)
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
DoodExtractor(client).videoFromUrl(url, "DoodStream", false)?.let { videoList.add(it) }
DoodExtractor(client).videoFromUrl(url, "DoodStream")?.let { videoList.add(it) }
}
if (embedUrl.contains("streamlare")) {
StreamlareExtractor(client).videosFromUrl(url).also(videoList::addAll)

View file

@ -3,7 +3,7 @@ ext {
extClass = '.AnimeOnlineNinja'
themePkg = 'dooplay'
baseUrl = 'https://ww3.animeonline.ninja'
overrideVersionCode = 39
overrideVersionCode = 40
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'AsiaLiveAction'
extClass = '.AsiaLiveAction'
extVersionCode = 30
extVersionCode = 31
}
apply from: "$rootDir/common.gradle"

View file

@ -203,7 +203,7 @@ class AsiaLiveAction : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
DoodExtractor(client).videoFromUrl(url2, "DoodStream", false)?.let { videoList.add(it) }
DoodExtractor(client).videoFromUrl(url2, "DoodStream")?.let { videoList.add(it) }
}
if (embedUrl.contains("streamlare")) {
StreamlareExtractor(client).videosFromUrl(url).let { videoList.addAll(it) }

View file

@ -1,7 +1,7 @@
ext {
extName = 'Cuevana'
extClass = '.CuevanaFactory'
extVersionCode = 32
extVersionCode = 33
}
apply from: "$rootDir/common.gradle"

View file

@ -203,7 +203,7 @@ class CuevanaCh(override val name: String, override val baseUrl: String) : Confi
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream", false)?.let { videoList.add(it) }
DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream")?.let { videoList.add(it) }
}
if (embedUrl.contains("streamlare")) {
StreamlareExtractor(client).videosFromUrl(url, prefix = prefix).let { videoList.addAll(it) }

View file

@ -212,7 +212,7 @@ class CuevanaEu(override val name: String, override val baseUrl: String) : Confi
videoList.addAll(videos)
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream")
?.let { videoList.add(it) }
}
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {

View file

@ -1,7 +1,7 @@
ext {
extName = 'Doramasflix'
extClass = '.Doramasflix'
extVersionCode = 21
extVersionCode = 22
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'EnNovelas'
extClass = '.EnNovelas'
extVersionCode = 11
extVersionCode = 12
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'FanPelis'
extClass = '.FanPelis'
extVersionCode = 12
extVersionCode = 13
}
apply from: "$rootDir/common.gradle"

View file

@ -116,7 +116,7 @@ class FanPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood")) {
val video = try {
DoodExtractor(client).videoFromUrl(url, "DoodStream", true)
DoodExtractor(client).videoFromUrl(url, "DoodStream")
} catch (e: Exception) {
null
}

View file

@ -182,7 +182,7 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
embedUrl.contains("doodstream") || embedUrl.contains("dood.") || embedUrl.contains("ds2play") || embedUrl.contains("doods.") -> {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
listOf(DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream", false)!!)
listOf(DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream")!!)
}
embedUrl.contains("streamlare") -> StreamlareExtractor(client).videosFromUrl(url, prefix = prefix)
embedUrl.contains("yourupload") || embedUrl.contains("upload") -> YourUploadExtractor(client).videoFromUrl(url, headers = headers, prefix = prefix)

View file

@ -1,7 +1,7 @@
ext {
extName = 'Hackstore'
extClass = '.Hackstore'
extVersionCode = 10
extVersionCode = 11
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'HentaiTk'
extClass = '.Hentaitk'
extVersionCode = 1
extVersionCode = 2
isNsfw = true
}

View file

@ -1,7 +1,7 @@
ext {
extName = 'Latanime'
extClass = '.Latanime'
extVersionCode = 17
extVersionCode = 18
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'LegionAnime'
extClass = '.LegionAnime'
extVersionCode = 31
extVersionCode = 32
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'LocoPelis'
extClass = '.LocoPelis'
extVersionCode = 23
extVersionCode = 24
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Pelisflix'
extClass = '.PelisflixFactory'
extVersionCode = 14
extVersionCode = 15
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'PelisForte'
extClass = '.PelisForte'
extVersionCode = 15
extVersionCode = 16
}
apply from: "$rootDir/common.gradle"

View file

@ -203,7 +203,7 @@ open class PelisForte : ConfigurableAnimeSource, AnimeHttpSource() {
StreamWishExtractor(client, docHeaders).videosFromUrl(url, videoNameGen = { "${prefix}StreamWish:$it" }).also(videoList::addAll)
}
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
DoodExtractor(client).videoFromUrl(url, "${prefix}DoodStream", false)?.let { videoList.add(it) }
DoodExtractor(client).videoFromUrl(url, "${prefix}DoodStream")?.let { videoList.add(it) }
}
if (embedUrl.contains("streamlare")) {
StreamlareExtractor(client).videosFromUrl(url, prefix = prefix).let { videoList.addAll(it) }

View file

@ -1,7 +1,7 @@
ext {
extName = 'Pelisplushd'
extClass = '.PelisplushdFactory'
extVersionCode = 53
extVersionCode = 54
}
apply from: "$rootDir/common.gradle"

View file

@ -201,7 +201,7 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
}
embedUrl.contains("doodstream") || embedUrl.contains("dood.") || embedUrl.contains("ds2play") || embedUrl.contains("doods.") -> {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
listOf(DoodExtractor(client).videoFromUrl(url2, "DoodStream", false)!!)
listOf(DoodExtractor(client).videoFromUrl(url2, "DoodStream")!!)
}
embedUrl.contains("streamlare") -> StreamlareExtractor(client).videosFromUrl(url)
embedUrl.contains("yourupload") || embedUrl.contains("upload") -> YourUploadExtractor(client).videoFromUrl(url, headers = headers)

View file

@ -165,7 +165,7 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
}
embedUrl.contains("doodstream") || embedUrl.contains("dood.") || embedUrl.contains("ds2play") || embedUrl.contains("doods.") -> {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
listOf(DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream", false)!!)
listOf(DoodExtractor(client).videoFromUrl(url2, "$prefix DoodStream")!!)
}
embedUrl.contains("streamlare") -> StreamlareExtractor(client).videosFromUrl(url, prefix = prefix)
embedUrl.contains("yourupload") || embedUrl.contains("upload") -> YourUploadExtractor(client).videoFromUrl(url, headers = headers, prefix = prefix)

View file

@ -208,7 +208,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
}
embedUrl.contains("doodstream") || embedUrl.contains("dood.") || embedUrl.contains("ds2play") || embedUrl.contains("doods.") -> {
val url2 = url.replace("https://doodstream.com/e/", "https://dood.to/e/")
listOf(DoodExtractor(client).videoFromUrl(url2, "DoodStream", false)!!)
listOf(DoodExtractor(client).videoFromUrl(url2, "DoodStream")!!)
}
embedUrl.contains("streamlare") -> StreamlareExtractor(client).videosFromUrl(url)
embedUrl.contains("yourupload") || embedUrl.contains("upload") -> YourUploadExtractor(client).videoFromUrl(url, headers = headers)

View file

@ -1,7 +1,7 @@
ext {
extName = 'AniSama'
extClass = '.AniSama'
extVersionCode = 6
extVersionCode = 7
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'EmpireStreaming'
extClass = '.EmpireStreaming'
extVersionCode = 16
extVersionCode = 17
}
apply from: "$rootDir/common.gradle"

View file

@ -3,7 +3,7 @@ ext {
extClass = '.FrenchAnime'
themePkg = 'datalifeengine'
baseUrl = 'https://french-anime.com'
overrideVersionCode = 6
overrideVersionCode = 7
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'OtakuFR'
extClass = '.OtakuFR'
extVersionCode = 12
extVersionCode = 13
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'Vostfree'
extClass = '.Vostfree'
extVersionCode = 19
extVersionCode = 20
}
apply from: "$rootDir/common.gradle"

View file

@ -114,7 +114,7 @@ class Vostfree : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
if (server.lowercase() == "doodstream") {
val playerId = it.attr("id")
val url = document.select("div#player-tabs div.tab-blocks div.tab-content div div#content_$playerId").text()
val video = DoodExtractor(client).videoFromUrl(url, "DoodStream", false)
val video = DoodExtractor(client).videoFromUrl(url, "DoodStream")
if (video != null) {
videoList.add(video)
}

View file

@ -3,7 +3,7 @@ ext {
extClass = '.Wiflix'
themePkg = 'datalifeengine'
baseUrl = 'https://wiflix.voto'
overrideVersionCode = 6
overrideVersionCode = 7
}
apply from: "$rootDir/common.gradle"

View file

@ -1,7 +1,7 @@
ext {
extName = 'YoMovies'
extClass = '.YoMovies'
extVersionCode = 13
extVersionCode = 14
isNsfw = true
}

View file

@ -1,7 +1,7 @@
ext {
extName = 'ANIMEWORLD.tv'
extClass = '.ANIMEWORLD'
extVersionCode = 39
extVersionCode = 40
}
apply from: "$rootDir/common.gradle"

View file

@ -146,7 +146,7 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
listOf(Video(url, "AnimeWorld Server", url))
}
url.contains("https://doo") -> {
DoodExtractor(client).videoFromUrl(url, redirect = true)
DoodExtractor(client).videoFromUrl(url)
?.let(::listOf)
}
url.contains("streamtape") -> {

View file

@ -1,7 +1,7 @@
ext {
extName = 'AnimesZone'
extClass = '.AnimesZone'
extVersionCode = 8
extVersionCode = 9
isNsfw = true
}