diff --git a/lib-multisrc/animestream/build.gradle.kts b/lib-multisrc/animestream/build.gradle.kts index 5e2a19a1..e2f11e9c 100644 --- a/lib-multisrc/animestream/build.gradle.kts +++ b/lib-multisrc/animestream/build.gradle.kts @@ -2,4 +2,4 @@ plugins { id("lib-multisrc") } -baseVersionCode = 2 \ No newline at end of file +baseVersionCode = 3 diff --git a/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt b/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt index fbd2a189..d6a25493 100644 --- a/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt +++ b/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt @@ -117,7 +117,11 @@ abstract class AnimeStream( } protected open fun searchAnimeByPathParse(response: Response): AnimesPage { - val details = animeDetailsParse(response.asJsoup()) + val details = animeDetailsParse(response.asJsoup()).apply { + setUrlWithoutDomain(response.request.url.toString()) + initialized = true + } + return AnimesPage(listOf(details), false) } diff --git a/lib-multisrc/dooplay/build.gradle.kts b/lib-multisrc/dooplay/build.gradle.kts index 0024039f..9dce2478 100644 --- a/lib-multisrc/dooplay/build.gradle.kts +++ b/lib-multisrc/dooplay/build.gradle.kts @@ -2,4 +2,4 @@ plugins { id("lib-multisrc") } -baseVersionCode = 1 \ No newline at end of file +baseVersionCode = 2 diff --git a/lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt b/lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt index 818496c8..7756075c 100644 --- a/lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt +++ b/lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt @@ -155,7 +155,11 @@ abstract class DooPlay( // =============================== Search =============================== private fun searchAnimeByPathParse(response: Response): AnimesPage { - val details = animeDetailsParse(response) + val details = animeDetailsParse(response).apply { + setUrlWithoutDomain(response.request.url.toString()) + initialized = true + } + return AnimesPage(listOf(details), false) } diff --git a/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt b/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt index 1ea54de1..747db057 100644 --- a/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt +++ b/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.lib.chillxextractor +import android.util.Log import eu.kanade.tachiyomi.animesource.model.Track import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES @@ -51,6 +52,7 @@ class ChillxExtractor(private val client: OkHttpClient, private val headers: Hea val subtitleList = buildList { val subtitles = REGEX_SUBS.findAll(decryptedScript) subtitles.forEach { + Log.d("ChillxExtractor", "Found subtitle: ${it.groupValues}") add(Track(it.groupValues[1], decodeUnicodeEscape(it.groupValues[2]))) } } diff --git a/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt b/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt index 2d2c460c..9b626958 100644 --- a/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt +++ b/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt @@ -5,36 +5,50 @@ import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.network.GET import okhttp3.Headers import okhttp3.OkHttpClient +import java.net.URI class DoodExtractor(private val client: OkHttpClient) { fun videoFromUrl( url: String, - quality: String? = null, + prefix: String? = null, redirect: Boolean = true, externalSubs: List = emptyList(), ): Video? { - val newQuality = quality ?: ("Doodstream" + if (redirect) " mirror" else "") - return runCatching { val response = client.newCall(GET(url)).execute() val newUrl = if (redirect) response.request.url.toString() else url - val doodHost = Regex("https://(.*?)/").find(newUrl)!!.groupValues[1] + val doodHost = getBaseUrl(newUrl) val content = response.body.string() if (!content.contains("'/pass_md5/")) return null - val md5 = content.substringAfter("'/pass_md5/").substringBefore("',") + + // Obtener la calidad del título de la página + val extractedQuality = Regex("\\d{3,4}p") + .find(content.substringAfter("").substringBefore("")) + ?.groupValues + ?.getOrNull(0) + + // Determinar la calidad a usar + val newQuality = extractedQuality ?: ( if (redirect) " mirror" else "") + + // Obtener el hash MD5 + val md5 = doodHost + (Regex("/pass_md5/[^']*").find(content)?.value ?: return null) val token = md5.substringAfterLast("/") - val randomString = getRandomString() + val randomString = createHashTable() val expiry = System.currentTimeMillis() + + // Obtener la URL del video val videoUrlStart = client.newCall( GET( - "https://$doodHost/pass_md5/$md5", + md5, Headers.headersOf("referer", newUrl), ), ).execute().body.string() - val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry" - Video(videoUrl, newQuality, videoUrl, headers = doodHeaders(doodHost), subtitleTracks = externalSubs) + + val trueUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry" + + Video(trueUrl, prefix + "Doodstream " + newQuality , trueUrl, headers = doodHeaders(doodHost), subtitleTracks = externalSubs) }.getOrNull() } @@ -44,16 +58,27 @@ class DoodExtractor(private val client: OkHttpClient) { redirect: Boolean = true, ): List