fix(pt/goanimes): Fix extractor and quality name (#2840)

Co-authored-by: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com>
This commit is contained in:
Edgard Lorraine Messias 2024-01-29 09:54:04 -03:00 committed by GitHub
parent 01d32cf2a3
commit ace0dbf5d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 11 deletions

View File

@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.animeextension.pt.goanimes.extractors.PlaylistExtract
import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.animesource.model.SEpisode
import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.lib.bloggerextractor.BloggerExtractor import eu.kanade.tachiyomi.lib.bloggerextractor.BloggerExtractor
import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.network.await
@ -70,6 +71,7 @@ class GoAnimes : DooPlay(
private val goanimesExtractor by lazy { GoAnimesExtractor(client, headers) } private val goanimesExtractor by lazy { GoAnimesExtractor(client, headers) }
private val bloggerExtractor by lazy { BloggerExtractor(client) } private val bloggerExtractor by lazy { BloggerExtractor(client) }
private val linkfunBypasser by lazy { LinkfunBypasser(client) } private val linkfunBypasser by lazy { LinkfunBypasser(client) }
private val playlistUtils by lazy { PlaylistUtils(client, headers) }
override fun videoListParse(response: Response): List<Video> { override fun videoListParse(response: Response): List<Video> {
val document = response.use { it.asJsoup() } val document = response.use { it.asJsoup() }
@ -78,9 +80,13 @@ class GoAnimes : DooPlay(
} }
private suspend fun getPlayerVideos(player: Element): List<Video> { private suspend fun getPlayerVideos(player: Element): List<Video> {
val name = player.selectFirst("span.title")!!.text()
.replace("FULLHD", "1080p")
.replace("HD", "720p")
.replace("SD", "480p")
val url = getPlayerUrl(player) val url = getPlayerUrl(player)
return when { return when {
"player5.goanimes.net" in url -> goanimesExtractor.videosFromUrl(url) "player5.goanimes.net" in url -> goanimesExtractor.videosFromUrl(url, name)
"https://gojopoolt" in url -> { "https://gojopoolt" in url -> {
val headers = headers.newBuilder() val headers = headers.newBuilder()
.set("referer", url) .set("referer", url)
@ -88,7 +94,7 @@ class GoAnimes : DooPlay(
val script = client.newCall(GET(url, headers)).await() val script = client.newCall(GET(url, headers)).await()
.use { it.body.string() } .use { it.body.string() }
.let { JsDecoder.decodeScript(it, false) } .let { JsDecoder.decodeScript(it, false).ifBlank { it } }
script.substringAfter("sources: [") script.substringAfter("sources: [")
.substringBefore(']') .substringBefore(']')
@ -103,9 +109,21 @@ class GoAnimes : DooPlay(
val resolution = it.substringAfter("label: ", "") val resolution = it.substringAfter("label: ", "")
.substringAfter('"') .substringAfter('"')
.substringBefore('"') .substringBefore('"')
.ifBlank { "Default" } .ifBlank { name.split('-').last().trim() }
Video(videoUrl, "Gojopoolt - $resolution", videoUrl, headers) val partialName = name.split('-').first().trim()
return when {
videoUrl.contains(".m3u8") -> {
playlistUtils.extractFromHls(
videoUrl,
url,
videoNameGen = {
"$partialName - ${it.replace("Video", resolution)}"
},
)
}
else -> listOf(Video(videoUrl, "$partialName - $resolution", videoUrl, headers))
}
} }
} }
listOf("/bloggerjwplayer", "/m3u8", "/multivideo").any { it in url } -> { listOf("/bloggerjwplayer", "/m3u8", "/multivideo").any { it in url } -> {
@ -121,7 +139,8 @@ class GoAnimes : DooPlay(
script.substringAfter("attr") script.substringAfter("attr")
.substringAfter(" \"") .substringAfter(" \"")
.substringBefore('"') .substringBefore('"')
.let(goanimesExtractor::videosFromUrl) .let { goanimesExtractor.videosFromUrl(it, name) }
else -> emptyList<Video>() else -> emptyList<Video>()
} }
} }
@ -153,4 +172,15 @@ class GoAnimes : DooPlay(
else -> url else -> url
} }
} }
// ============================= Utilities ==============================
override fun List<Video>.sort(): List<Video> {
val quality = preferences.getString(videoSortPrefKey, videoSortPrefDefault)!!
return sortedWith(
compareBy(
{ it.quality.contains(quality) },
{ Regex("""(\d+)p""").find(it.quality)?.groupValues?.get(1)?.toIntOrNull() ?: 0 },
),
).reversed()
}
} }

View File

@ -12,12 +12,12 @@ import okhttp3.OkHttpClient
class GoAnimesExtractor(private val client: OkHttpClient, private val headers: Headers) { class GoAnimesExtractor(private val client: OkHttpClient, private val headers: Headers) {
private val playlistUtils by lazy { PlaylistUtils(client, headers) } private val playlistUtils by lazy { PlaylistUtils(client, headers) }
fun videosFromUrl(url: String): List<Video> { fun videosFromUrl(url: String, name: String): List<Video> {
val body = client.newCall(GET(url, headers)).execute() val body = client.newCall(GET(url, headers)).execute()
.use { it.body.string() } .use { it.body.string() }
return when { return when {
"/profix/player.php" in url -> "better-go.fun/player.php" in url || "/profix/player.php" in url ->
PlaylistExtractor.videosFromScript(body, PLAYER_NAME) PlaylistExtractor.videosFromScript(body, name.split('-').first().trim())
"/proxy/v.php" in url -> { "/proxy/v.php" in url -> {
val playlistUrl = JsUnpacker.unpackAndCombine(body) val playlistUrl = JsUnpacker.unpackAndCombine(body)
?.substringAfterLast("player(\\'", "") ?.substringAfterLast("player(\\'", "")
@ -25,7 +25,7 @@ class GoAnimesExtractor(private val client: OkHttpClient, private val headers: H
?.takeIf(String::isNotEmpty) ?.takeIf(String::isNotEmpty)
?: return emptyList() ?: return emptyList()
playlistUtils.extractFromHls(playlistUrl, url, videoNameGen = { "$PLAYER_NAME - $it" }) playlistUtils.extractFromHls(playlistUrl, url, videoNameGen = { "$name - $it" })
} }
"/proxy/api3/" in url -> { "/proxy/api3/" in url -> {
val playlistUrl = body.substringAfter("sources:", "") val playlistUrl = body.substringAfter("sources:", "")
@ -43,7 +43,7 @@ class GoAnimesExtractor(private val client: OkHttpClient, private val headers: H
} }
val referer = url.toHttpUrl().queryParameter("url") ?: url val referer = url.toHttpUrl().queryParameter("url") ?: url
playlistUtils.extractFromHls(fixedUrl, referer, videoNameGen = { "$PLAYER_NAME - $it" }) playlistUtils.extractFromHls(fixedUrl, referer, videoNameGen = { "$name - $it" })
} }
else -> emptyList() else -> emptyList()
} }

View File

@ -18,7 +18,7 @@ class DooPlayGenerator : ThemeSourceGenerator {
SingleLang("AnimesFox BR", "https://animesfox.net", "pt-BR", isNsfw = false, overrideVersionCode = 2), SingleLang("AnimesFox BR", "https://animesfox.net", "pt-BR", isNsfw = false, overrideVersionCode = 2),
SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 9), SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 9),
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 18), SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 18),
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true, overrideVersionCode = 8), SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true, overrideVersionCode = 9),
SingleLang("JetAnime", "https://ssl.jetanimes.com", "fr", isNsfw = false, overrideVersionCode = 3), SingleLang("JetAnime", "https://ssl.jetanimes.com", "fr", isNsfw = false, overrideVersionCode = 3),
SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 19), SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 19),
SingleLang("Multimovies", "https://multimovies.live", "en", isNsfw = false, overrideVersionCode = 14), SingleLang("Multimovies", "https://multimovies.live", "en", isNsfw = false, overrideVersionCode = 14),