diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt deleted file mode 100644 index 7575a63476..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.api.Log -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorLinkType -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.newExtractorLink - -open class AStreamHub : ExtractorApi() { - override val name = "AStreamHub" - override val mainUrl = "https://astreamhub.com" - override val requiresReferer = true - - override suspend fun getUrl(url: String, referer: String?): List { - val sources = mutableListOf() - app.get(url).document.selectFirst("body > script")?.data()?.let { script -> - Log.i("Dev", "script => $script") - if (script.isNotBlank()) { - val m3link = "(?<=file:)(.*)(?=,)".toRegex().find(script) - ?.groupValues?.get(0)?.trim()?.trim('"') ?: "" - Log.i("Dev", "m3link => $m3link") - if (m3link.isNotBlank()) { - sources.add( - newExtractorLink( - name = name, - source = name, - url = m3link, - type = ExtractorLinkType.M3U8 - ) { - this.quality = Qualities.Unknown.value - this.referer = referer ?: url - } - ) - } - } - } - return sources - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AsianLoad.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AsianLoad.kt deleted file mode 100644 index 70e869f552..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AsianLoad.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper -import com.lagradost.cloudstream3.utils.newExtractorLink - -class Vidnest : AsianLoad() { - override var name = "Vidnest" - override var mainUrl = "https://vidnest.io" -} - -open class AsianLoad : ExtractorApi() { - override var name = "AsianLoad" - override var mainUrl = "https://asianhdplay.pro" - override val requiresReferer = true - - private val sourceRegex = Regex("""sources:[\W\w]*?file:\s*?["'](.*?)["']""") - override suspend fun getUrl(url: String, referer: String?): List { - val extractedLinksList: MutableList = mutableListOf() - with(app.get(url, referer = referer)) { - sourceRegex.findAll(this.text).forEach { sourceMatch -> - val extractedUrl = sourceMatch.groupValues[1] - // Trusting this isn't mp4, may fuck up stuff - if (extractedUrl.contains(".m3u8")) { - M3u8Helper.generateM3u8( - name, - extractedUrl, - url, - headers = mapOf("referer" to this.url) - ).forEach { link -> - extractedLinksList.add(link) - } - } else if (extractedUrl.contains(".mp4")) { - extractedLinksList.add( - newExtractorLink( - source = name, - name = name, - url = extractedUrl, - ) { - this.referer = url.replace(" ", "%20") - } - ) - } - } - return extractedLinksList - } - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/BullStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/BullStream.kt deleted file mode 100644 index 71fa7066bb..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/BullStream.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper - -open class BullStream : ExtractorApi() { - override val name = "BullStream" - override val mainUrl = "https://bullstream.xyz" - override val requiresReferer = false - val regex = Regex("(?<=sniff\\()(.*)(?=\\)\\);)") - - override suspend fun getUrl(url: String, referer: String?): List? { - val data = regex.find(app.get(url).text)?.value - ?.replace("\"", "") - ?.split(",") - ?: return null - - val m3u8 = "$mainUrl/m3u8/${data[1]}/${data[2]}/master.txt?s=1&cache=${data[4]}" - //println("shiv : $m3u8") - return M3u8Helper.generateM3u8( - name, - m3u8, - url, - headers = mapOf("referer" to url, "accept" to "*/*") - ) - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ByteShare.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ByteShare.kt deleted file mode 100644 index ca9504d2c6..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ByteShare.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.utils.* - -open class ByteShare : ExtractorApi() { - override val name = "ByteShare" - override val mainUrl = "https://byteshare.to" - override val requiresReferer = false - - override suspend fun getUrl(url: String, referer: String?): List { - val sources = mutableListOf() - sources.add( - newExtractorLink( - source = name, - name = name, - url = url.replace("/embed/", "/download/"), - ) - ) - return sources - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EPlay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EPlay.kt deleted file mode 100644 index 146859cf43..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EPlay.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.* -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson - -open class EPlayExtractor : ExtractorApi() { - override var name = "EPlay" - override var mainUrl = "https://eplayvid.net" - override val requiresReferer = true - - override suspend fun getUrl(url: String, referer: String?): List? { - val response = app.get(url).document - val trueUrl = response.select("source").attr("src") - return listOf( - newExtractorLink( - this.name, - this.name, - trueUrl, - ) { - this.referer = mainUrl - this.quality = getQualityFromName("") // this needs to be auto - } - ) - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt deleted file mode 100644 index 7baa62710b..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.USER_AGENT -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper -import com.lagradost.cloudstream3.utils.fixUrl -import com.lagradost.cloudstream3.utils.getAndUnpack -import org.jsoup.nodes.Element - -open class Filegram : ExtractorApi() { - override val name = "Filegram" - override val mainUrl = "https://filegram.to" - override val requiresReferer = true - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val header = mapOf( - "Accept" to "*/*", - "Accept-language" to "en-US,en;q=0.9", - "Origin" to mainUrl, - "Accept-Encoding" to "gzip, deflate, br, zstd", - "Connection" to "keep-alive", - "Sec-Fetch-Dest" to "empty", - "Sec-Fetch-Mode" to "cors", - "Sec-Fetch-Site" to "same-site", - "user-agent" to USER_AGENT, - ) - - val doc = app.get(getEmbedUrl(url), referer = referer).document - val unpackedJs = unpackJs(doc).toString() - val videoUrl = Regex("""file:\s*"([^"]+\.m3u8[^"]*)"""").find(unpackedJs)?.groupValues?.get(1) - if (videoUrl != null) { - M3u8Helper.generateM3u8( - this.name, - fixUrl(videoUrl), - "$mainUrl/", - headers = header - ).forEach(callback) - } - } - - private fun unpackJs(script: Element): String? { - return script.select("script").find { it.data().contains("eval(function(p,a,c,k,e,d)") } - ?.data()?.let { getAndUnpack(it) } - } - - private fun getEmbedUrl(url: String): String { - return if (!url.contains("/embed-")) { - val videoId = url.substringAfter("$mainUrl/") - "$mainUrl/embed-$videoId" - } else url - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GMPlayer.kt deleted file mode 100644 index 7aa4ed53f2..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GMPlayer.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorLinkType -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.newExtractorLink - -open class GMPlayer : ExtractorApi() { - override val name = "GM Player" - override val mainUrl = "https://gmplayer.xyz" - override val requiresReferer = true - - override suspend fun getUrl(url: String, referer: String?): List? { - val ref = referer ?: return null - val id = url.substringAfter("/video/").substringBefore("/") - - val m3u8 = app.post( - "$mainUrl/player/index.php?data=$id&do=getVideo", - mapOf( - "accept" to "*/*", - "referer" to ref, - "x-requested-with" to "XMLHttpRequest", - "origin" to mainUrl - ), - data = mapOf("hash" to id, "r" to ref) - ).parsed().videoSource ?: return null - - return listOf( - newExtractorLink( - source = this.name, - name = this.name, - url = m3u8, - type = ExtractorLinkType.M3U8 - ) { - this.referer = ref - this.quality = Qualities.Unknown.value - this.headers = mapOf("accept" to "*/*") - } - ) - } - - private data class GmResponse( - val videoSource: String? = null - ) -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GuardareStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GuardareStream.kt deleted file mode 100644 index c8eccd9889..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GuardareStream.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.newSubtitleFile -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.* - -class Vanfem : GuardareStream() { - override var name = "Vanfem" - override var mainUrl = "https://vanfem.com/" -} - -class CineGrabber : GuardareStream() { - override var name = "CineGrabber" - override var mainUrl = "https://cinegrabber.com" -} - -open class GuardareStream : ExtractorApi() { - override var name = "Guardare" - override var mainUrl = "https://guardare.stream" - override val requiresReferer = false - - data class GuardareJsonData( - @JsonProperty("data") val data: List, - @JsonProperty("captions") val captions: List?, - ) - - data class GuardareData( - @JsonProperty("file") val file: String, - @JsonProperty("label") val label: String, - @JsonProperty("type") val type: String - ) - - - // https://cinegrabber.com/asset/userdata/224879/caption/gqdmzh-71ez76z8/876438.srt - data class GuardareCaptions( - @JsonProperty("id") val id: String, - @JsonProperty("hash") val hash: String, - @JsonProperty("language") val language: String?, - @JsonProperty("extension") val extension: String - ) { - fun getUrl(mainUrl: String, userId: String): String { - return "$mainUrl/asset/userdata/$userId/caption/$hash/$id.$extension" - } - } - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val response = - app.post(url.replace("/v/", "/api/source/"), data = mapOf("d" to mainUrl)).text - - val jsonVideoData = AppUtils.parseJson(response) - jsonVideoData.data.forEach { - callback.invoke( - newExtractorLink( - this.name, - this.name, - it.file + ".${it.type}", - ) { - this.referer = mainUrl - this.quality = it.label.filter { it.isDigit() }.toInt() - } - ) - } - - if (!jsonVideoData.captions.isNullOrEmpty()){ - val iframe = app.get(url) - // var USER_ID = '224879'; - val userIdRegex = Regex("""USER_ID.*?(\d+)""") - val userId = userIdRegex.find(iframe.text)?.groupValues?.getOrNull(1) ?: return - jsonVideoData.captions.forEach { - if (it == null) return@forEach - val subUrl = it.getUrl(mainUrl, userId) - subtitleCallback.invoke( - newSubtitleFile( - it.language ?: "", - subUrl - ) - ) - } - } - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jawcloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jawcloud.kt deleted file mode 100644 index 203a266c11..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jawcloud.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper - - -open class Jawcloud : ExtractorApi() { - override var name = "Jawcloud" - override var mainUrl = "https://jawcloud.co" - override val requiresReferer = false - - override suspend fun getUrl(url: String, referer: String?): List? { - val doc = app.get(url).document - val urlString = doc.select("html body div source").attr("src") - val sources = mutableListOf() - if (urlString.contains("m3u8")) - M3u8Helper.generateM3u8( - name, - urlString, - url, - headers = app.get(url).headers.toMap() - ).forEach { link -> sources.add(link) } - return sources - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Okrulink.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Okrulink.kt deleted file mode 100644 index 2c47018558..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Okrulink.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.newExtractorLink - -data class Okrulinkdata ( - @JsonProperty("status" ) var status : String? = null, - @JsonProperty("url" ) var url : String? = null -) - -open class Okrulink: ExtractorApi() { - override var mainUrl = "https://okru.link" - override var name = "Okrulink" - override val requiresReferer = false - - override suspend fun getUrl(url: String, referer: String?): List { - val sources = mutableListOf() - val key = url.substringAfter("html?t=") - val request = app.post("https://apizz.okru.link/decoding", allowRedirects = false, - data = mapOf("video" to key) - ).parsedSafe() - if (request?.url != null) { - sources.add( - newExtractorLink( - name, - name, - request.url!! - ) - ) - } - return sources - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Solidfiles.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Solidfiles.kt deleted file mode 100644 index 9c6fd614e0..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Solidfiles.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName -import com.lagradost.cloudstream3.utils.newExtractorLink - - -open class Solidfiles : ExtractorApi() { - override val name = "Solidfiles" - override val mainUrl = "https://www.solidfiles.com" - override val requiresReferer = false - - override suspend fun getUrl(url: String, referer: String?): List { - val sources = mutableListOf() - with(app.get(url).document) { - this.select("script").map { script -> - if (script.data().contains("\"streamUrl\":")) { - val data = script.data().substringAfter("constant('viewerOptions', {").substringBefore("});") - val source = tryParseJson("{$data}") - val quality = Regex("\\d{3,4}p").find(source!!.nodeName)?.groupValues?.get(0) - sources.add( - newExtractorLink( - name, - name, - source.streamUrl, - ) { - this.referer = url - this.quality = getQualityFromName(quality) - } - ) - } - } - } - return sources - } - - - private data class ResponseSource( - @JsonProperty("streamUrl") val streamUrl: String, - @JsonProperty("nodeName") val nodeName: String - ) - -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tomatomatela.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tomatomatela.kt deleted file mode 100644 index b8d131ad9f..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tomatomatela.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.utils.* -import com.lagradost.cloudstream3.app -import com.fasterxml.jackson.annotation.JsonProperty -import com.fasterxml.jackson.module.kotlin.readValue -import com.lagradost.cloudstream3.USER_AGENT -import com.lagradost.cloudstream3.mapper -import com.lagradost.cloudstream3.utils.AppUtils.parseJson - - -class Cinestart: Tomatomatela() { - override var name: String = "Cinestart" - override val mainUrl: String = "https://cinestart.net" - override val details = "vr.php?v=" -} - -class TomatomatelalClub: Tomatomatela() { - override var name: String = "Tomatomatela" - override val mainUrl: String = "https://tomatomatela.club" -} - -open class Tomatomatela : ExtractorApi() { - override var name = "Tomatomatela" - override val mainUrl = "https://tomatomatela.com" - override val requiresReferer = false - private data class Tomato ( - @JsonProperty("status") val status: Int, - @JsonProperty("file") val file: String? - ) - open val details = "details.php?v=" - open val embeddetails = "/embed.html#" - override suspend fun getUrl(url: String, referer: String?): List? { - val link = url.replace("$mainUrl$embeddetails","$mainUrl/$details") - val sources = ArrayList() - val server = app.get(link, allowRedirects = false, - headers = mapOf( - "User-Agent" to USER_AGENT, - "Accept" to "application/json, text/javascript, */*; q=0.01", - "Accept-Language" to "en-US,en;q=0.5", - "X-Requested-With" to "XMLHttpRequest", - "DNT" to "1", - "Connection" to "keep-alive", - "Sec-Fetch-Dest" to "empty", - "Sec-Fetch-Mode" to "cors", - "Sec-Fetch-Site" to "same-origin" - - ) - ).parsedSafe() - if (server?.file != null) { - sources.add( - newExtractorLink( - name, - name, - server.file, - ) - ) - } - return sources - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoVard.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoVard.kt deleted file mode 100644 index 30a1d8fe62..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoVard.kt +++ /dev/null @@ -1,271 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 -import kotlinx.coroutines.delay -import java.math.BigInteger - -class VideovardSX : WcoStream() { - override var mainUrl = "https://videovard.sx" -} - -open class VideoVard : ExtractorApi() { - override var name = "Videovard" // Cause works for animekisa and wco - override var mainUrl = "https://videovard.to" - override val requiresReferer = false - - //The following code was extracted from https://github.com/saikou-app/saikou/blob/main/app/src/main/java/ani/saikou/parsers/anime/extractors/VideoVard.kt - override suspend fun getUrl(url: String, referer: String?): List { - val id = url.substringAfter("e/").substringBefore("/") - val sources = mutableListOf() - val hash = app.get("$mainUrl/api/make/download/$id").parsed() - delay(11_000) - val resm3u8 = app.post( - "$mainUrl/api/player/setup", - mapOf("Referer" to "$mainUrl/"), - data = mapOf( - "cmd" to "get_stream", - "file_code" to id, - "hash" to hash.hash!! - ) - ).parsed() - val m3u8 = decode(resm3u8.src!!, resm3u8.seed) - sources.addAll( - generateM3u8( - name, - m3u8, - mainUrl, - headers = mapOf("Referer" to mainUrl) - ) - ) - return sources - } - - companion object { - private val big0 = 0.toBigInteger() - private val big3 = 3.toBigInteger() - private val big4 = 4.toBigInteger() - private val big15 = 15.toBigInteger() - private val big16 = 16.toBigInteger() - private val big255 = 255.toBigInteger() - - private fun decode(dataFile: String, seed: String): String { - val dataSeed = replace(seed) - val newDataSeed = binaryDigest(dataSeed) - val newDataFile = bytes2blocks(ascii2bytes(dataFile)) - var list = listOf(1633837924, 1650680933).map { it.toBigInteger() } - val xorList = mutableListOf() - for (i in newDataFile.indices step 2) { - val temp = newDataFile.slice(i..i + 1) - xorList += xorBlocks(list, tearDecode(temp, newDataSeed)) - list = temp - } - - val result = replace(unPad(blocks2bytes(xorList)).map { it.toInt().toChar() }.joinToString("")) - return padLastChars(result) - } - - private fun binaryDigest(input: String): List { - val keys = listOf(1633837924, 1650680933, 1667523942, 1684366951).map { it.toBigInteger() } - var list1 = keys.slice(0..1) - var list2 = list1 - val blocks = bytes2blocks(digestPad(input)) - - for (i in blocks.indices step 4) { - list1 = tearCode(xorBlocks(blocks.slice(i..i + 1), list1), keys).toMutableList() - list2 = tearCode(xorBlocks(blocks.slice(i + 2..i + 3), list2), keys).toMutableList() - - val temp = list1[0] - list1[0] = list1[1] - list1[1] = list2[0] - list2[0] = list2[1] - list2[1] = temp - } - - return listOf(list1[0], list1[1], list2[0], list2[1]) - } - - private fun tearDecode(a90: List, a91: List): MutableList { - var (a95, a96) = a90 - - var a97 = (-957401312).toBigInteger() - for (_i in 0 until 32) { - a96 -= ((((a95 shl 4) xor rShift(a95, 5)) + a95) xor (a97 + a91[rShift(a97, 11).and(3.toBigInteger()).toInt()])) - a97 += 1640531527.toBigInteger() - a95 -= ((((a96 shl 4) xor rShift(a96, 5)) + a96) xor (a97 + a91[a97.and(3.toBigInteger()).toInt()])) - - } - - return mutableListOf(a95, a96) - } - - private fun digestPad(string: String): List { - val empList = mutableListOf() - val length = string.length - val extra = big15 - (length.toBigInteger() % big16) - empList.add(extra) - for (i in 0 until length) { - empList.add(string[i].code.toBigInteger()) - } - for (i in 0 until extra.toInt()) { - empList.add(big0) - } - - return empList - } - - private fun bytes2blocks(a22: List): List { - val empList = mutableListOf() - val length = a22.size - var listIndex = 0 - - for (i in 0 until length) { - val subIndex = i % 4 - val shiftedByte = a22[i] shl (3 - subIndex) * 8 - - if (subIndex == 0) { - empList.add(shiftedByte) - } else { - empList[listIndex] = empList[listIndex] or shiftedByte - } - - if (subIndex == 3) listIndex += 1 - } - - return empList - } - - private fun blocks2bytes(inp: List): List { - val tempList = mutableListOf() - inp.indices.forEach { i -> - tempList += (big255 and rShift(inp[i], 24)) - tempList += (big255 and rShift(inp[i], 16)) - tempList += (big255 and rShift(inp[i], 8)) - tempList += (big255 and inp[i]) - } - return tempList - } - - private fun unPad(a46: List): List { - val evenOdd = a46[0].toInt().mod(2) - return (1 until (a46.size - evenOdd)).map { - a46[it] - } - } - - private fun xorBlocks(a76: List, a77: List): List { - return listOf(a76[0] xor a77[0], a76[1] xor a77[1]) - } - - private fun rShift(input: BigInteger, by: Int): BigInteger { - return (input.mod(4294967296.toBigInteger()) shr by) - } - - private fun tearCode(list1: List, list2: List): MutableList { - var a1 = list1[0] - var a2 = list1[1] - var temp = big0 - - for (_i in 0 until 32) { - a1 += (a2 shl 4 xor rShift(a2, 5)) + a2 xor temp + list2[(temp and big3).toInt()] - temp -= 1640531527.toBigInteger() - a2 += (a1 shl 4 xor rShift(a1, 5)) + a1 xor temp + list2[(rShift(temp, 11) and big3).toInt()] - } - return mutableListOf(a1, a2) - } - - private fun ascii2bytes(input: String): List { - val abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" - val abcMap = abc.mapIndexed { i, c -> c to i.toBigInteger() }.toMap() - var index = -1 - val length = input.length - var listIndex = 0 - val bytes = mutableListOf() - - while (true) { - for (i in input) { - if (abc.contains(i)) { - index++ - break - } - } - - bytes.add((abcMap[input.getOrNull(index)?:return bytes]!! * big4)) - - while (true) { - index++ - if (abc.contains(input[index])) { - break - } - } - - var temp = abcMap[input[index]]!! - - bytes[listIndex] = bytes[listIndex] or rShift(temp, 4) - listIndex++ - temp = (big15.and(temp)) - - if ((temp == big0) && (index == (length - 1))) return bytes - - bytes.add((temp * big4 * big4)) - - while (true) { - index++ - if (index >= length) return bytes - if (abc.contains(input[index])) break - } - - temp = abcMap[input[index]]!! - bytes[listIndex] = bytes[listIndex] or rShift(temp, 2) - listIndex++ - temp = (big3 and temp) - if ((temp == big0) && (index == (length - 1))) { - return bytes - } - bytes.add((temp shl 6)) - for (i in input) { - index++ - if (abc.contains(input[index])) { - break - } - } - bytes[listIndex] = bytes[listIndex] or abcMap[input[index]]!! - listIndex++ - } - } - - private fun replace(a: String): String { - val map = mapOf( - '0' to '5', - '1' to '6', - '2' to '7', - '5' to '0', - '6' to '1', - '7' to '2' - ) - var b = "" - a.forEach { - b += if (map.containsKey(it)) map[it] else it - } - return b - } - - private fun padLastChars(input:String):String{ - return if(input.reversed()[3].isDigit()) input - else input.dropLast(4) - } - - private data class HashResponse( - val hash: String? = null, - val version:String? = null - ) - - private data class SetupResponse( - val seed: String, - val src: String?=null, - val link:String?=null - ) - } -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt deleted file mode 100644 index 03a16c0a70..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt +++ /dev/null @@ -1,139 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.lagradost.api.Log -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.INFER_TYPE -import com.lagradost.cloudstream3.utils.Qualities -import com.lagradost.cloudstream3.utils.newExtractorLink -import org.mozilla.javascript.Context -import org.mozilla.javascript.NativeJSON -import org.mozilla.javascript.NativeObject -import org.mozilla.javascript.Scriptable -import kotlin.io.encoding.Base64 -import kotlin.io.encoding.ExperimentalEncodingApi - -class Vidguardto1 : Vidguardto() { - override val mainUrl = "https://bembed.net" -} - -class Vidguardto2 : Vidguardto() { - override val mainUrl = "https://listeamed.net" -} - -class Vidguardto3 : Vidguardto() { - override val mainUrl = "https://vgfplay.com" -} - -open class Vidguardto : ExtractorApi() { - override val name = "Vidguard" - override val mainUrl = "https://vidguard.to" - override val requiresReferer = false - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val res = app.get(getEmbedUrl(url)) - val resc = res.document.select("script:containsData(eval)").firstOrNull()?.data() - resc?.let { - val jsonStr2 = AppUtils.parseJson(runJS2(it)) - val watchlink = sigDecode(jsonStr2.stream) - - callback.invoke( - newExtractorLink( - this.name, - name, - watchlink, - ) { - this.referer = mainUrl - } - ) - } - } - - @OptIn(ExperimentalEncodingApi::class) - private fun sigDecode(url: String): String { - val sig = url.split("sig=")[1].split("&")[0] - val t = sig.chunked(2) - .joinToString("") { (Integer.parseInt(it, 16) xor 2).toChar().toString() } - .let { - val padding = when (it.length % 4) { - 2 -> "==" - 3 -> "=" - else -> "" - } - String(Base64.decode((it + padding).toByteArray(Charsets.UTF_8))) - } - .dropLast(5) - .reversed() - .toCharArray() - .apply { - for (i in indices step 2) { - if (i + 1 < size) { - this[i] = this[i + 1].also { this[i + 1] = this[i] } - } - } - } - .concatToString() - .dropLast(5) - return url.replace(sig, t) - } - - private fun runJS2(hideMyHtmlContent: String): String { - var result = "" - val r = Runnable { - val rhino = Context.enter() - rhino.initSafeStandardObjects() - rhino.setInterpretedMode(true) - val scope: Scriptable = rhino.initSafeStandardObjects() - scope.put("window", scope, scope) - try { - rhino.evaluateString( - scope, - hideMyHtmlContent, - "JavaScript", - 1, - null - ) - val svgObject = scope.get("svg", scope) - result = if (svgObject is NativeObject) { - NativeJSON.stringify( - Context.getCurrentContext(), - scope, - svgObject, - null, - null - ).toString() - } else { - Context.toString(svgObject) - } - } catch (e: Exception) { - Log.e("runJS", "Error executing JavaScript: ${e.message}") - } finally { - Context.exit() - } - } - val t = Thread(ThreadGroup("A"), r, "thread_rhino", 8 * 1024 * 1024) // Increase stack size to 8MB - t.start() - t.join() - t.interrupt() - return result - } - - private fun getEmbedUrl(url: String): String { - return url.takeIf { it.contains("/d/") || it.contains("/v/") } - ?.replace("/d/", "/e/")?.replace("/v/", "/e/") ?: url - } - - data class SvgObject( - val stream: String, - val hash: String - ) - -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WcoStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WcoStream.kt deleted file mode 100644 index 0488c0d387..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WcoStream.kt +++ /dev/null @@ -1,142 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.ErrorLoadingException -import com.lagradost.cloudstream3.extractors.helper.NineAnimeHelper.cipher -import com.lagradost.cloudstream3.extractors.helper.NineAnimeHelper.encrypt -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.newExtractorLink -import com.lagradost.cloudstream3.utils.INFER_TYPE -import com.lagradost.cloudstream3.utils.Qualities - -class Vidstreamz : WcoStream() { - override var mainUrl = "https://vidstreamz.online" -} - -class Vizcloud : WcoStream() { - override var mainUrl = "https://vizcloud2.ru" -} - -class Vizcloud2 : WcoStream() { - override var mainUrl = "https://vizcloud2.online" -} - -class VizcloudOnline : WcoStream() { - override var mainUrl = "https://vizcloud.online" -} - -class VizcloudXyz : WcoStream() { - override var mainUrl = "https://vizcloud.xyz" -} - -class VizcloudLive : WcoStream() { - override var mainUrl = "https://vizcloud.live" -} - -class VizcloudInfo : WcoStream() { - override var mainUrl = "https://vizcloud.info" -} - -class MwvnVizcloudInfo : WcoStream() { - override var mainUrl = "https://mwvn.vizcloud.info" -} - -class VizcloudDigital : WcoStream() { - override var mainUrl = "https://vizcloud.digital" -} - -class VizcloudCloud : WcoStream() { - override var mainUrl = "https://vizcloud.cloud" -} - -class VizcloudSite : WcoStream() { - override var mainUrl = "https://vizcloud.site" -} - -class Mcloud : WcoStream() { - override var name = "Mcloud" - override var mainUrl = "https://mcloud.to" - override val requiresReferer = true -} - -open class WcoStream : ExtractorApi() { - override var name = "VidStream" // Cause works for animekisa and wco - override var mainUrl = "https://vidstream.pro" - override val requiresReferer = false - private val regex = Regex("(.+?/)e(?:mbed)?/([a-zA-Z0-9]+)") - - companion object { - // taken from https://github.com/saikou-app/saikou/blob/b35364c8c2a00364178a472fccf1ab72f09815b4/app/src/main/java/ani/saikou/parsers/anime/extractors/VizCloud.kt - // GNU General Public License v3.0 https://github.com/saikou-app/saikou/blob/main/LICENSE.md - private var lastChecked = 0L - private const val jsonLink = - "https://raw.githubusercontent.com/chenkaslowankiya/BruhFlow/main/keys.json" - private var cipherKey: VizCloudKey? = null - suspend fun getKey(): VizCloudKey { - cipherKey = - if (cipherKey != null && (lastChecked - System.currentTimeMillis()) < 1000 * 60 * 30) cipherKey!! - else { - lastChecked = System.currentTimeMillis() - app.get(jsonLink).parsed() - } - return cipherKey!! - } - - data class VizCloudKey( - @JsonProperty("cipherKey") val cipherKey: String, - @JsonProperty("mainKey") val mainKey: String, - @JsonProperty("encryptKey") val encryptKey: String, - @JsonProperty("dashTable") val dashTable: String - ) - - private const val baseTable = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+=/_" - - private fun dashify(id: String, dashTable: String): String { - val table = dashTable.split(" ") - return id.mapIndexedNotNull { i, c -> - table.getOrNull((baseTable.indexOf(c) * 16) + (i % 16)) - }.joinToString("-") - } - } - - //private val key = "LCbu3iYC7ln24K7P" // key credits @Modder4869 - override suspend fun getUrl(url: String, referer: String?): List { - val group = regex.find(url)?.groupValues!! - - val host = group[1] - val viz = getKey() - val id = encrypt( - cipher( - viz.cipherKey, - encrypt(group[2], viz.encryptKey).also { println(it) } - ).also { println(it) }, - viz.encryptKey - ).also { println(it) } - - val link = - "${host}mediainfo/${dashify(id, viz.dashTable)}?key=${viz.mainKey}" // - val response = app.get(link, referer = referer) - - data class Sources(@JsonProperty("file") val file: String) - data class Media(@JsonProperty("sources") val sources: List) - data class Data(@JsonProperty("media") val media: Media) - data class Response(@JsonProperty("data") val data: Data) - - - if (!response.text.startsWith("{")) throw ErrorLoadingException("Seems like 9Anime kiddies changed stuff again, Go touch some grass for bout an hour Or use a different Server") - return response.parsed().data.media.sources.map { - newExtractorLink( - name, - it.file, - it.file, - type = INFER_TYPE - ) { - this.referer = host - this.quality = Qualities.Unknown.value - } - } - } -} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zorofile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zorofile.kt deleted file mode 100644 index 43c4eefb2c..0000000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zorofile.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.APIHolder.getCaptchaToken -import com.lagradost.cloudstream3.ErrorLoadingException -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper - -open class Zorofile : ExtractorApi() { - override val name = "Zorofile" - override val mainUrl = "https://zorofile.com" - override val requiresReferer = true - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val id = url.split("?").first().split("/").last() - val token = app.get( - url, - referer = referer - ).document.select("button.g-recaptcha").attr("data-sitekey").let { captchaKey -> - getCaptchaToken( - url, - captchaKey, - referer = referer - ) - } ?: throw ErrorLoadingException("can't bypass captcha") - - val data = app.post( - "$mainUrl/dl", - data = mapOf( - "op" to "embed", - "file_code" to id, - "auto" to "1", - "referer" to "$referer/", - "g-recaptcha-response" to token - ), - referer = url, - headers = mapOf( - "Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", - "Content-Type" to "application/x-www-form-urlencoded", - "Origin" to mainUrl, - "Sec-Fetch-Dest" to "iframe", - "Sec-Fetch-Mode" to "navigate", - "Sec-Fetch-Site" to "same-origin", - "Sec-Fetch-User" to "?1", - "Upgrade-Insecure-Requests" to "1", - ) - ).document.select("script").find { it.data().contains("var holaplayer;") }?.data() - ?.substringAfter("sources: [")?.substringBefore("],")?.replace("src", "\"src\"") - ?.replace("type", "\"type\"") - - tryParseJson("$data")?.let { res -> - return M3u8Helper.generateM3u8( - name, - res.src ?: return@let, - "$mainUrl/", - headers = mapOf( - "Origin" to mainUrl, - ) - ).forEach(callback) - } - } - - private data class Sources( - @JsonProperty("src") val src: String? = null, - @JsonProperty("type") val type: String? = null, - ) -} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 9ef0eec455..8b5ce0d18e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -6,11 +6,9 @@ import com.lagradost.cloudstream3.IDownloadableMinimum import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.extractors.AStreamHub import com.lagradost.cloudstream3.extractors.Acefile import com.lagradost.cloudstream3.extractors.Ahvsh import com.lagradost.cloudstream3.extractors.Aico -import com.lagradost.cloudstream3.extractors.AsianLoad import com.lagradost.cloudstream3.extractors.Asnwish import com.lagradost.cloudstream3.extractors.Auvexiug import com.lagradost.cloudstream3.extractors.Awish @@ -18,19 +16,15 @@ import com.lagradost.cloudstream3.extractors.BgwpCC import com.lagradost.cloudstream3.extractors.BigwarpArt import com.lagradost.cloudstream3.extractors.BigwarpIO import com.lagradost.cloudstream3.extractors.Blogger -import com.lagradost.cloudstream3.extractors.BullStream import com.lagradost.cloudstream3.extractors.ByseSX import com.lagradost.cloudstream3.extractors.Bysezejataos import com.lagradost.cloudstream3.extractors.ByseBuho import com.lagradost.cloudstream3.extractors.ByseVepoin import com.lagradost.cloudstream3.extractors.ByseQekaho -import com.lagradost.cloudstream3.extractors.ByteShare import com.lagradost.cloudstream3.extractors.Cavanhabg import com.lagradost.cloudstream3.extractors.Cda import com.lagradost.cloudstream3.extractors.Cdnplayer import com.lagradost.cloudstream3.extractors.CdnwishCom -import com.lagradost.cloudstream3.extractors.CineGrabber -import com.lagradost.cloudstream3.extractors.Cinestart import com.lagradost.cloudstream3.extractors.CloudMailRu import com.lagradost.cloudstream3.extractors.ContentX import com.lagradost.cloudstream3.extractors.CsstOnline @@ -65,7 +59,6 @@ import com.lagradost.cloudstream3.extractors.Ds2video import com.lagradost.cloudstream3.extractors.DsstOnline import com.lagradost.cloudstream3.extractors.Dumbalag import com.lagradost.cloudstream3.extractors.Dwish -import com.lagradost.cloudstream3.extractors.EPlayExtractor import com.lagradost.cloudstream3.extractors.Embedgram import com.lagradost.cloudstream3.extractors.EmturbovidExtractor import com.lagradost.cloudstream3.extractors.Evoload @@ -79,7 +72,6 @@ import com.lagradost.cloudstream3.extractors.Fembed9hd import com.lagradost.cloudstream3.extractors.FileMoon import com.lagradost.cloudstream3.extractors.FileMoonIn import com.lagradost.cloudstream3.extractors.FileMoonSx -import com.lagradost.cloudstream3.extractors.Filegram import com.lagradost.cloudstream3.extractors.FilemoonV2 import com.lagradost.cloudstream3.extractors.Filesim import com.lagradost.cloudstream3.extractors.FlaswishCom @@ -89,7 +81,6 @@ import com.lagradost.cloudstream3.extractors.FourPlayRu import com.lagradost.cloudstream3.extractors.Fplayer import com.lagradost.cloudstream3.extractors.FsstOnline import com.lagradost.cloudstream3.extractors.GDMirrorbot -import com.lagradost.cloudstream3.extractors.GMPlayer import com.lagradost.cloudstream3.extractors.GUpload import com.lagradost.cloudstream3.extractors.GamoVideo import com.lagradost.cloudstream3.extractors.Gdriveplayer @@ -105,7 +96,6 @@ import com.lagradost.cloudstream3.extractors.Gdriveplayerus import com.lagradost.cloudstream3.extractors.Geodailymotion import com.lagradost.cloudstream3.extractors.Gofile import com.lagradost.cloudstream3.extractors.GoodstreamExtractor -import com.lagradost.cloudstream3.extractors.GuardareStream import com.lagradost.cloudstream3.extractors.Guccihide import com.lagradost.cloudstream3.extractors.Guxhag import com.lagradost.cloudstream3.extractors.HDMomPlayer @@ -121,7 +111,6 @@ import com.lagradost.cloudstream3.extractors.Hxfile import com.lagradost.cloudstream3.extractors.HlsWish import com.lagradost.cloudstream3.extractors.InternetArchive import com.lagradost.cloudstream3.extractors.JWPlayer -import com.lagradost.cloudstream3.extractors.Jawcloud import com.lagradost.cloudstream3.extractors.Jeniusplay import com.lagradost.cloudstream3.extractors.Jodwish import com.lagradost.cloudstream3.extractors.Keephealth @@ -138,7 +127,6 @@ import com.lagradost.cloudstream3.extractors.Luxubu import com.lagradost.cloudstream3.extractors.Lvturbo import com.lagradost.cloudstream3.extractors.MailRu import com.lagradost.cloudstream3.extractors.Maxstream -import com.lagradost.cloudstream3.extractors.Mcloud import com.lagradost.cloudstream3.extractors.Mediafire import com.lagradost.cloudstream3.extractors.Megacloud import com.lagradost.cloudstream3.extractors.Meownime @@ -158,7 +146,6 @@ import com.lagradost.cloudstream3.extractors.Multimovies import com.lagradost.cloudstream3.extractors.Mvidoo import com.lagradost.cloudstream3.extractors.MyVidPlay import com.lagradost.cloudstream3.extractors.Mwish -import com.lagradost.cloudstream3.extractors.MwvnVizcloudInfo import com.lagradost.cloudstream3.extractors.NathanFromSubject import com.lagradost.cloudstream3.extractors.Nekostream import com.lagradost.cloudstream3.extractors.Nekowish @@ -170,7 +157,6 @@ import com.lagradost.cloudstream3.extractors.OkRuHTTP import com.lagradost.cloudstream3.extractors.OkRuHTTPMobile import com.lagradost.cloudstream3.extractors.OkRuSSL import com.lagradost.cloudstream3.extractors.OkRuSSLMobile -import com.lagradost.cloudstream3.extractors.Okrulink import com.lagradost.cloudstream3.extractors.PeaceMakerst import com.lagradost.cloudstream3.extractors.Peytonepre import com.lagradost.cloudstream3.extractors.Pichive @@ -203,7 +189,6 @@ import com.lagradost.cloudstream3.extractors.SibNet import com.lagradost.cloudstream3.extractors.Simpulumlamerop import com.lagradost.cloudstream3.extractors.Smoothpre import com.lagradost.cloudstream3.extractors.Sobreatsesuyp -import com.lagradost.cloudstream3.extractors.Solidfiles import com.lagradost.cloudstream3.extractors.Ssbstream import com.lagradost.cloudstream3.extractors.StreamEmbed import com.lagradost.cloudstream3.extractors.StreamHLS @@ -244,8 +229,6 @@ import com.lagradost.cloudstream3.extractors.TRsTX import com.lagradost.cloudstream3.extractors.Tantifilm import com.lagradost.cloudstream3.extractors.TauVideo import com.lagradost.cloudstream3.extractors.Techinmind -import com.lagradost.cloudstream3.extractors.Tomatomatela -import com.lagradost.cloudstream3.extractors.TomatomatelalClub import com.lagradost.cloudstream3.extractors.Tubeless import com.lagradost.cloudstream3.extractors.Uasopt import com.lagradost.cloudstream3.extractors.Up4FunTop @@ -263,7 +246,6 @@ import com.lagradost.cloudstream3.extractors.Userload import com.lagradost.cloudstream3.extractors.Userscloud import com.lagradost.cloudstream3.extractors.Uservideo import com.lagradost.cloudstream3.extractors.Videa -import com.lagradost.cloudstream3.extractors.Vanfem import com.lagradost.cloudstream3.extractors.Vicloud import com.lagradost.cloudstream3.extractors.VidHidePro import com.lagradost.cloudstream3.extractors.VidHidePro1 @@ -275,40 +257,22 @@ import com.lagradost.cloudstream3.extractors.VidHidePro6 import com.lagradost.cloudstream3.extractors.VidMoxy import com.lagradost.cloudstream3.extractors.VidStack import com.lagradost.cloudstream3.extractors.VideoSeyred -import com.lagradost.cloudstream3.extractors.VideoVard -import com.lagradost.cloudstream3.extractors.VideovardSX import com.lagradost.cloudstream3.extractors.Videzz import com.lagradost.cloudstream3.extractors.Vidgomunime import com.lagradost.cloudstream3.extractors.Vidgomunimesb -import com.lagradost.cloudstream3.extractors.Vidguardto -import com.lagradost.cloudstream3.extractors.Vidguardto1 -import com.lagradost.cloudstream3.extractors.Vidguardto2 -import com.lagradost.cloudstream3.extractors.Vidguardto3 import com.lagradost.cloudstream3.extractors.VidhideExtractor import com.lagradost.cloudstream3.extractors.Vidmoly import com.lagradost.cloudstream3.extractors.Vidmolyme import com.lagradost.cloudstream3.extractors.Vidmolyto import com.lagradost.cloudstream3.extractors.Vidmolybiz -import com.lagradost.cloudstream3.extractors.Vidnest import com.lagradost.cloudstream3.extractors.Vido import com.lagradost.cloudstream3.extractors.Vidoza -import com.lagradost.cloudstream3.extractors.Vidstreamz import com.lagradost.cloudstream3.extractors.VinovoSi import com.lagradost.cloudstream3.extractors.VinovoTo -import com.lagradost.cloudstream3.extractors.Vizcloud -import com.lagradost.cloudstream3.extractors.Vizcloud2 -import com.lagradost.cloudstream3.extractors.VizcloudCloud -import com.lagradost.cloudstream3.extractors.VizcloudDigital -import com.lagradost.cloudstream3.extractors.VizcloudInfo -import com.lagradost.cloudstream3.extractors.VizcloudLive -import com.lagradost.cloudstream3.extractors.VizcloudOnline -import com.lagradost.cloudstream3.extractors.VizcloudSite -import com.lagradost.cloudstream3.extractors.VizcloudXyz import com.lagradost.cloudstream3.extractors.VkExtractor import com.lagradost.cloudstream3.extractors.Voe import com.lagradost.cloudstream3.extractors.Voe1 import com.lagradost.cloudstream3.extractors.Vtbe -import com.lagradost.cloudstream3.extractors.WcoStream import com.lagradost.cloudstream3.extractors.Wibufile import com.lagradost.cloudstream3.extractors.WishembedPro import com.lagradost.cloudstream3.extractors.Wishfast @@ -323,7 +287,6 @@ import com.lagradost.cloudstream3.extractors.YoutubeNoCookieExtractor import com.lagradost.cloudstream3.extractors.YoutubeShortLinkExtractor import com.lagradost.cloudstream3.extractors.Yufiles import com.lagradost.cloudstream3.extractors.Yuguaab -import com.lagradost.cloudstream3.extractors.Zorofile import com.lagradost.cloudstream3.extractors.Zplayer import com.lagradost.cloudstream3.extractors.ZplayerV2 import com.lagradost.cloudstream3.extractors.Ztreamhub @@ -926,20 +889,6 @@ suspend fun loadExtractor( val extractorApis: MutableList = arrayListOf( //AllProvider(), - WcoStream(), - Vidstreamz(), - Vizcloud(), - Vizcloud2(), - VizcloudOnline(), - VizcloudXyz(), - VizcloudLive(), - VizcloudInfo(), - MwvnVizcloudInfo(), - VizcloudDigital(), - VizcloudCloud(), - VizcloudSite(), - VideoVard(), - VideovardSX(), Mp4Upload(), StreamTape(), StreamTapeNet(), @@ -951,10 +900,8 @@ val extractorApis: MutableList = arrayListOf( MixDropCh(), MixDropTo(), MixDropAg(), - MixDrop(), - Mcloud(), XStreamCdn(), StreamSB(), @@ -1031,14 +978,10 @@ val extractorApis: MutableList = arrayListOf( PixelDrainDev(), MailRu(), - Tomatomatela(), - TomatomatelalClub(), - Cinestart(), OkRuSSL(), OkRuSSLMobile(), OkRuHTTP(), OkRuHTTPMobile(), - Okrulink(), Sendvid(), // dood extractors @@ -1057,10 +1000,7 @@ val extractorApis: MutableList = arrayListOf( DoodWfExtractor(), DoodYtExtractor(), - AsianLoad(), - // GenericM3U8(), - Jawcloud(), Zplayer(), ZplayerV2(), Upstream(), @@ -1069,9 +1009,6 @@ val extractorApis: MutableList = arrayListOf( Tantifilm(), Userload(), Supervideo(), - GuardareStream(), - CineGrabber(), - Vanfem(), // StreamSB.kt works // SBPlay(), @@ -1080,11 +1017,7 @@ val extractorApis: MutableList = arrayListOf( PlayerVoxzer(), - BullStream(), - GMPlayer(), - Blogger(), - Solidfiles(), YourUpload(), Hxfile(), @@ -1131,7 +1064,6 @@ val extractorApis: MutableList = arrayListOf( Linkbox(), Acefile(), Minoplres(), // formerly SpeedoStream - Zorofile(), Embedgram(), Mvidoo(), Streamplay(), @@ -1171,11 +1103,9 @@ val extractorApis: MutableList = arrayListOf( YoutubeNoCookieExtractor(), Streamlare(), PlayLtXyz(), - AStreamHub(), Cda(), Dailymotion(), - ByteShare(), Ztreamhub(), Rabbitstream(), Dokicloud(), @@ -1221,15 +1151,9 @@ val extractorApis: MutableList = arrayListOf( FlaswishCom(), SfastwishCom(), Playerwish(), - Vidnest(), StreamEmbed(), EmturbovidExtractor(), Vtbe(), - EPlayExtractor(), - Vidguardto(), - Vidguardto1(), - Vidguardto2(), - Vidguardto3(), SecvideoOnline(), FsstOnline(), CsstOnline(), @@ -1262,7 +1186,6 @@ val extractorApis: MutableList = arrayListOf( Wishonly(), Ds2play(), Ds2video(), - Filegram(), InternetArchive(), VidStack(), GDMirrorbot(),