From 7a169dae7e161cd7d2e87b32d37f31344a58e06c Mon Sep 17 00:00:00 2001 From: hexated Date: Sun, 23 Oct 2022 09:14:10 +0700 Subject: [PATCH] added sub into Gdriveplayer --- .../cloudstream3/extractors/Gdriveplayer.kt | 55 ++++++++++++++----- .../cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt index dfccc118..df9c74a4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import org.jsoup.nodes.Element import java.security.DigestException import java.security.MessageDigest @@ -10,43 +11,47 @@ import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec +class DatabaseGdrive2 : Gdriveplayer() { + override var mainUrl = "https://databasegdriveplayer.co" +} + class DatabaseGdrive : Gdriveplayer() { override var mainUrl = "https://series.databasegdriveplayer.co" } -class Gdriveplayerapi: Gdriveplayer() { +class Gdriveplayerapi : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayerapi.com" } -class Gdriveplayerapp: Gdriveplayer() { +class Gdriveplayerapp : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.app" } -class Gdriveplayerfun: Gdriveplayer() { +class Gdriveplayerfun : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.fun" } -class Gdriveplayerio: Gdriveplayer() { +class Gdriveplayerio : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.io" } -class Gdriveplayerme: Gdriveplayer() { +class Gdriveplayerme : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.me" } -class Gdriveplayerbiz: Gdriveplayer() { +class Gdriveplayerbiz : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.biz" } -class Gdriveplayerorg: Gdriveplayer() { +class Gdriveplayerorg : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.org" } -class Gdriveplayerus: Gdriveplayer() { +class Gdriveplayerus : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.us" } -class Gdriveplayerco: Gdriveplayer() { +class Gdriveplayerco : Gdriveplayer() { override val mainUrl: String = "https://gdriveplayer.co" } @@ -136,6 +141,10 @@ open class Gdriveplayer : ExtractorApi() { return find(str)?.groupValues?.getOrNull(1) } + private fun String.addMarks(str: String): String { + return this.replace(Regex("\"?$str\"?"), "\"$str\"") + } + override suspend fun getUrl( url: String, referer: String?, @@ -145,18 +154,19 @@ open class Gdriveplayer : ExtractorApi() { val document = app.get(url).document val eval = unpackJs(document)?.replace("\\", "") ?: return - val data = AppUtils.tryParseJson(Regex("data='(\\S+?)'").first(eval)) ?: return + val data = tryParseJson(Regex("data='(\\S+?)'").first(eval)) ?: return val password = Regex("null,['|\"](\\w+)['|\"]").first(eval) ?.split(Regex("\\D+")) ?.joinToString("") { Char(it.toInt()).toString() }.let { Regex("var pass = \"(\\S+?)\"").first(it ?: return)?.toByteArray() } ?: throw ErrorLoadingException("can't find password") - val decryptedData = - cryptoAESHandler(data, password, false)?.let { getAndUnpack(it) }?.replace("\\", "") - ?.substringAfter("sources:[")?.substringBefore("],") + val decryptedData = cryptoAESHandler(data, password, false)?.let { getAndUnpack(it) }?.replace("\\", "") - Regex("\"file\":\"(\\S+?)\".*?res=(\\d+)").findAll(decryptedData ?: return).map { + val sourceData = decryptedData?.substringAfter("sources:[")?.substringBefore("],") + val subData = decryptedData?.substringAfter("tracks:[")?.substringBefore("],") + + Regex("\"file\":\"(\\S+?)\".*?res=(\\d+)").findAll(sourceData ?: return).map { it.groupValues[1] to it.groupValues[2] }.toList().distinctBy { it.second }.map { (link, quality) -> callback.invoke( @@ -171,6 +181,17 @@ open class Gdriveplayer : ExtractorApi() { ) } + subData?.addMarks("file")?.addMarks("kind")?.addMarks("label").let { dataSub -> + tryParseJson>("[$dataSub]")?.map { sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.label, + httpsify(sub.file) + ) + ) + } + } + } data class AesData( @@ -179,4 +200,10 @@ open class Gdriveplayer : ExtractorApi() { @JsonProperty("s") val s: String ) + data class Tracks( + @JsonProperty("file") val file: String, + @JsonProperty("kind") val kind: String, + @JsonProperty("label") val label: String + ) + } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 75f5d81e..ca612385 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -341,6 +341,7 @@ val extractorApis: MutableList = arrayListOf( Gdriveplayerco(), Gdriveplayer(), DatabaseGdrive(), + DatabaseGdrive2(), YoutubeExtractor(), YoutubeShortLinkExtractor(),