From bb678e956259216f695cc291346c023f05b6e8cb Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Tue, 9 May 2023 12:38:12 +0200 Subject: [PATCH] Update video extraction (#1591) --- src/en/holamovies/build.gradle | 2 +- .../holamovies/extractors/GDBotExtractor.kt | 37 +++++--- .../holamovies/extractors/GDFlixExtractor.kt | 89 +++++-------------- .../holamovies/extractors/GDTotExtractor.kt | 6 +- 4 files changed, 51 insertions(+), 83 deletions(-) diff --git a/src/en/holamovies/build.gradle b/src/en/holamovies/build.gradle index aab09a7f5..9c4c0c2e9 100644 --- a/src/en/holamovies/build.gradle +++ b/src/en/holamovies/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'HolaMovies' pkgNameSuffix = 'en.holamovies' extClass = '.HolaMovies' - extVersionCode = 1 + extVersionCode = 2 libVersion = '13' } diff --git a/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDBotExtractor.kt b/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDBotExtractor.kt index fe6964970..f1315e76d 100644 --- a/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDBotExtractor.kt +++ b/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDBotExtractor.kt @@ -3,6 +3,10 @@ package eu.kanade.tachiyomi.animeextension.en.holamovies.extractors import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient @@ -24,18 +28,29 @@ class GDBotExtractor(private val client: OkHttpClient, private val headers: Head GET("$botUrl/file/$fileId", headers = docHeaders), ).execute().asJsoup() - document.select("li.py-6 > a[href]").forEach { - val url = it.attr("href") - when { - url.toHttpUrl().host.contains("gdflix") -> { - videoList.addAll(GDFlixExtractor(client, headers).videosFromUrl(url)) - } -// url.toHttpUrl().host.contains("gdtot") -> { -// videoList.addAll(GDTotExtractor(client, headers).videosFromUrl(url)) -// } - } - } + videoList.addAll( + document.select("li.py-6 > a[href]").parallelMap { server -> + runCatching { + val url = server.attr("href") + when { + url.toHttpUrl().host.contains("gdflix") -> { + GDFlixExtractor(client, headers).videosFromUrl(url) + } + url.toHttpUrl().host.contains("gdtot") -> { + GDTotExtractor(client, headers).videosFromUrl(url) + } + else -> null + } + }.getOrNull() + }.filterNotNull().flatten(), + ) return videoList } + + // From Dopebox + private fun Iterable.parallelMap(f: suspend (A) -> B): List = + runBlocking { + map { async(Dispatchers.Default) { f(it) } }.awaitAll() + } } diff --git a/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDFlixExtractor.kt b/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDFlixExtractor.kt index cc5c1866d..3e60c6cf0 100644 --- a/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDFlixExtractor.kt +++ b/src/en/holamovies/src/eu/kanade/tachiyomi/animeextension/en/holamovies/extractors/GDFlixExtractor.kt @@ -1,10 +1,13 @@ package eu.kanade.tachiyomi.animeextension.en.holamovies.extractors -import android.util.Base64 import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json @@ -20,78 +23,37 @@ class GDFlixExtractor(private val client: OkHttpClient, private val headers: Hea fun videosFromUrl(serverUrl: String): List.parallelMap(f: suspend (A) -> B): List = + runBlocking { + map { async(Dispatchers.Default) { f(it) } }.awaitAll() } - for (type in 1..3) { - videoList.addAll( - extractWorkerLinks(epUrl.url, quality, type), - ) - } - return Pair(videoList, epUrl.url) - } - - private val sizeRegex = "\\[((?:.(?!\\[))+)][ ]*\$".toRegex(RegexOption.IGNORE_CASE) - - private fun extractWorkerLinks(mediaUrl: String, quality: String, type: Int): List