From db6c9eb905fe63ea4f7c41e9cf41b3495ef76246 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Fri, 28 Jul 2023 12:40:13 +0000 Subject: [PATCH] fix(fr/franime): Fix video extraction (#1964) --- src/fr/franime/build.gradle | 10 ++-- .../animeextension/fr/franime/FrAnime.kt | 57 +++++++++---------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/fr/franime/build.gradle b/src/fr/franime/build.gradle index 84e17bb3e..6650ad7a8 100644 --- a/src/fr/franime/build.gradle +++ b/src/fr/franime/build.gradle @@ -1,12 +1,14 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} ext { extName = 'FrAnime' pkgNameSuffix = 'fr.franime' extClass = '.FrAnime' - extVersionCode = 3 + extVersionCode = 4 libVersion = '13' containsNsfw = true } diff --git a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt index cf9f89c49..e3f9db092 100644 --- a/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt +++ b/src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.animeextension.fr.franime -import android.net.UrlQuerySanitizer import eu.kanade.tachiyomi.animeextension.fr.franime.dto.Anime import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.AnimesPage @@ -14,15 +13,13 @@ import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor import eu.kanade.tachiyomi.network.GET import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import rx.Observable import uy.kohesive.injekt.injectLazy import java.lang.Exception -import java.net.URI -import kotlin.io.path.Path -import kotlin.io.path.name class FrAnime : AnimeHttpSource() { @@ -41,6 +38,8 @@ class FrAnime : AnimeHttpSource() { override val client: OkHttpClient = network.cloudflareClient + override fun headersBuilder() = super.headersBuilder().add("Referer", "$baseUrl/") + private val json: Json by injectLazy() private val database by lazy { @@ -58,9 +57,10 @@ class FrAnime : AnimeHttpSource() { // === Episodes override fun fetchEpisodeList(anime: SAnime): Observable> { - val stem = Path(URI(anime.url).path).name // WILL break on API update ! name becomes fileName in new versions ! - val language = UrlQuerySanitizer(anime.url).getValue("lang") - val season = UrlQuerySanitizer(anime.url).getValue("s").toInt() + val url = (baseUrl + anime.url).toHttpUrl() + val stem = url.encodedPathSegments.last() + val language = url.queryParameter("lang") ?: "vo" + val season = url.queryParameter("s")?.toIntOrNull() ?: 1 val animeData = database.first { titleToUrl(it.originalTitle) == stem } val episodes = mutableListOf() animeData.seasons[season - 1].episodes.forEachIndexed { index, episode -> @@ -81,30 +81,30 @@ class FrAnime : AnimeHttpSource() { // === Players override fun fetchVideoList(episode: SEpisode): Observable> { - val seasonNumber = UrlQuerySanitizer(episode.url).getValue("s").toInt() - val episodeNumber = UrlQuerySanitizer(episode.url).getValue("ep").toInt() - val episodeLang = UrlQuerySanitizer(episode.url).getValue("lang") - val stem = Path(URI(episode.url).path).name + val url = (baseUrl + episode.url).toHttpUrl() + val seasonNumber = url.queryParameter("s")?.toIntOrNull() ?: 1 + val episodeNumber = url.queryParameter("ep")?.toIntOrNull() ?: 1 + val episodeLang = url.queryParameter("lang") ?: "vo" + val stem = url.encodedPathSegments.last() val animeData = database.first { titleToUrl(it.originalTitle) == stem } val episodeData = animeData.seasons[seasonNumber - 1].episodes[episodeNumber - 1] val videoBaseUrl = "$baseApiAnimeUrl/${animeData.id}/${seasonNumber - 1}/${episodeNumber - 1}" - val videos = mutableListOf